static void try_modify(xorn_revision_t rev, xorn_object_t existing_ob, bool expected_result) { xorn_object_t ob0, ob1; xorn_selection_t sel0, sel1; xorn_error_t err; xorn_error_t expected_err = expected_result ? NO_ERROR : xorn_error_revision_not_transient; err = NO_ERROR; ob0 = xornsch_add_line(rev, &line_data, &err); assert((ob0 != NULL) == expected_result); assert(err == expected_err); err = NO_ERROR; assert((xornsch_set_box_data(rev, existing_ob, &box_data, &err) == 0) == expected_result); assert(err == expected_err); err = NO_ERROR; ob1 = xorn_copy_object(rev, rev, existing_ob, &err); assert((ob1 != NULL) == expected_result); assert(err == expected_err); xorn_object_t del_ob = expected_result ? ob1 : existing_ob; err = NO_ERROR; assert((xorn_delete_object(rev, del_ob, &err) == 0) == expected_result); assert(err == expected_err); assert(xorn_object_exists_in_revision(rev, del_ob) == !expected_result); sel0 = xorn_select_all(rev); assert(sel0 != NULL); err = NO_ERROR; sel1 = xorn_copy_objects(rev, rev, sel0, &err); assert((sel1 != NULL) == expected_result); assert(err == expected_err); xorn_free_selection(sel1); err = NO_ERROR; assert((xorn_delete_selected_objects(rev, sel0, &err) == 0) == expected_result); assert(err == expected_err); assert(xorn_object_exists_in_revision(rev, existing_ob) == !expected_result); xorn_free_selection(sel0); }
static PyObject *Revision_delete_object( Revision *self, PyObject *args, PyObject *kwds) { PyObject *ob_arg = NULL; static char *kwlist[] = { "ob", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!:Revision.delete_object", kwlist, &ObjectType, &ob_arg)) return NULL; if (!xorn_revision_is_transient(self->rev)) return not_transient(); if (!xorn_object_exists_in_revision(self->rev, ((Object *)ob_arg)->ob)) { PyErr_SetString(PyExc_KeyError, "Object does not exist"); return NULL; } xorn_delete_object(self->rev, ((Object *)ob_arg)->ob); Py_INCREF(Py_None); return Py_None; }
PyObject *Revision_copy_object( Revision *self, PyObject *args, PyObject *kwds) { PyObject *rev_arg = NULL, *ob_arg = NULL; static char *kwlist[] = { "rev", "ob", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!O!:Revision.copy_object", kwlist, &RevisionType, &rev_arg, &ObjectType, &ob_arg)) return NULL; if (!xorn_revision_is_transient(self->rev)) return not_transient(); if (!xorn_object_exists_in_revision(((Revision *)rev_arg)->rev, ((Object *)ob_arg)->ob)) { PyErr_SetString(PyExc_KeyError, "Object does not exist in source revision"); return NULL; } xorn_object_t ob = xorn_copy_object( self->rev, ((Revision *)rev_arg)->rev, ((Object *)ob_arg)->ob); return ob ? build_object(ob) : PyErr_NoMemory(); }
static PyObject *select_attached_to( PyObject *self, PyObject *args, PyObject *kwds) { PyObject *rev_arg = NULL, *ob_arg = NULL; static char *kwlist[] = { "rev", "ob", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!O:select_attached_to", kwlist, &RevisionType, &rev_arg, &ob_arg)) return NULL; if (ob_arg != Py_None && !PyObject_TypeCheck(ob_arg, &ObjectType)) { char buf[BUFSIZ]; snprintf(buf, BUFSIZ, "select_attached_to() argument 2 " "must be %.50s or None, not %.50s", ObjectType.tp_name, ob_arg->ob_type->tp_name); PyErr_SetString(PyExc_TypeError, buf); return NULL; } if (ob_arg != Py_None && !xorn_object_exists_in_revision(((Revision *)rev_arg)->rev, ((Object *)ob_arg)->ob)) { PyErr_SetString(PyExc_KeyError, "Object does not exist"); return NULL; } xorn_selection_t sel = xorn_select_attached_to( ((Revision *)rev_arg)->rev, ob_arg == Py_None ? NULL : ((Object *)ob_arg)->ob); return sel ? build_selection(sel) : PyErr_NoMemory(); }
static PyObject *Revision_object_exists( Revision *self, PyObject *args, PyObject *kwds) { PyObject *ob_arg = NULL; static char *kwlist[] = { "ob", NULL }; if (!PyArg_ParseTupleAndKeywords( args, kwds, "O!:Revision.object_exists", kwlist, &ObjectType, &ob_arg)) return NULL; PyObject *result = xorn_object_exists_in_revision( self->rev, ((Object *)ob_arg)->ob) ? Py_True : Py_False; Py_INCREF(result); return result; }