int Reference_oid__set__(Reference *self, PyObject *py_hex) { git_oid oid; int err; git_reference *new_ref; CHECK_REFERENCE_INT(self); /* Get the oid */ err = py_str_to_git_oid_expand(git_reference_owner(self->reference), py_hex, &oid); if (err < 0) { Error_set(err); return -1; } /* Set the oid */ err = git_reference_set_target(&new_ref, self->reference, &oid); if (err < 0) { Error_set(err); return -1; } git_reference_free(self->reference); self->reference = new_ref; return 0; }
PyObject * Repository_create_reference(Repository *self, PyObject *args) { PyObject *py_oid; git_reference *c_reference; char *c_name; git_oid oid; int err; /* 1- Get the C variables */ if (!PyArg_ParseTuple(args, "sO", &c_name, &py_oid)) return NULL; err = py_str_to_git_oid_expand(self->repo, py_oid, &oid); if (err < 0) return Error_set(err); /* 2- Create the reference */ err = git_reference_create_oid(&c_reference, self->repo, c_name, &oid, 0); if (err < 0) return Error_set(err); /* 3- Make an instance of Reference and return it */ return wrap_reference(c_reference); }
PyObject * Repository_TreeBuilder(Repository *self, PyObject *args) { TreeBuilder *builder; git_treebuilder *bld; PyObject *py_src = NULL; git_oid oid; git_tree *tree = NULL; git_tree *must_free = NULL; int err; if (!PyArg_ParseTuple(args, "|O", &py_src)) return NULL; if (py_src) { if (PyObject_TypeCheck(py_src, &TreeType)) { Tree *py_tree = (Tree *)py_src; if (py_tree->repo->repo != self->repo) { //return Error_set(GIT_EINVALIDARGS); return Error_set(GIT_ERROR); } tree = py_tree->tree; } else { err = py_str_to_git_oid_expand(self->repo, py_src, &oid); if (err < 0) return NULL; err = git_tree_lookup(&tree, self->repo, &oid); if (err < 0) return Error_set(err); must_free = tree; } } err = git_treebuilder_create(&bld, tree); if (must_free != NULL) { git_tree_free(must_free); } if (err < 0) return Error_set(err); builder = PyObject_New(TreeBuilder, &TreeBuilderType); if (builder) { builder->repo = self; builder->bld = bld; Py_INCREF(self); } return (PyObject*)builder; }
PyObject * Walker_push(Walker *self, PyObject *py_hex) { int err; git_oid oid; err = py_str_to_git_oid_expand(self->repo->repo, py_hex, &oid); if (err < 0) return Error_set(err); err = git_revwalk_push(self->walk, &oid); if (err < 0) return Error_set(err); Py_RETURN_NONE; }
PyObject * Repository_walk(Repository *self, PyObject *args) { PyObject *value; unsigned int sort; int err; git_oid oid; git_revwalk *walk; Walker *py_walker; if (!PyArg_ParseTuple(args, "OI", &value, &sort)) return NULL; err = git_revwalk_new(&walk, self->repo); if (err < 0) return Error_set(err); /* Sort */ git_revwalk_sorting(walk, sort); /* Push */ if (value != Py_None) { err = py_str_to_git_oid_expand(self->repo, value, &oid); if (err < 0) { git_revwalk_free(walk); return Error_set(err); } err = git_revwalk_push(walk, &oid); if (err < 0) { git_revwalk_free(walk); return Error_set(err); } } py_walker = PyObject_New(Walker, &WalkerType); if (!py_walker) { git_revwalk_free(walk); return NULL; } Py_INCREF(self); py_walker->repo = self; py_walker->walk = walk; return (PyObject*)py_walker; }
PyObject * Repository_create_reference(Repository *self, PyObject *args, PyObject *kw) { PyObject *py_obj; git_reference *c_reference; char *c_name, *c_target; git_oid oid; int err = 0, symbolic = 0, force = 0; static char *kwlist[] = {"name", "source", "force", "symbolic", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kw, "sO|ii", kwlist, &c_name, &py_obj, &force, &symbolic)) return NULL; if(!symbolic) { err = py_str_to_git_oid_expand(self->repo, py_obj, &oid); if (err < 0) { return Error_set(err); } err = git_reference_create(&c_reference, self->repo, c_name, &oid, force); } else { #if PY_MAJOR_VERSION == 2 c_target = PyString_AsString(py_obj); #else c_target = PyString_AsString(PyUnicode_AsASCIIString(py_obj)); #endif if(c_target == NULL) return NULL; err = git_reference_symbolic_create(&c_reference, self->repo, c_name, c_target, force); } if (err < 0) return Error_set(err); return wrap_reference(c_reference); }