Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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();
}
Exemplo n.º 4
0
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();
}
Exemplo n.º 5
0
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;
}