PyObject * Repository_merge_base(Repository *self, PyObject *args) { PyObject *value1; PyObject *value2; git_oid oid; git_oid oid1; git_oid oid2; int err; if (!PyArg_ParseTuple(args, "OO", &value1, &value2)) return NULL; err = py_oid_to_git_oid_expand(self->repo, value1, &oid1); if (err < 0) return NULL; err = py_oid_to_git_oid_expand(self->repo, value2, &oid2); if (err < 0) return NULL; err = git_merge_base(&oid, self->repo, &oid1, &oid2); if (err < 0) return Error_set(err); return git_oid_to_python(&oid); }
PyObject * Reference_set_target(Reference *self, PyObject *args, PyObject *kwds) { git_oid oid; char *c_name; int err; git_reference *new_ref; const git_signature *sig = NULL; PyObject *py_target = NULL; Signature *py_signature = NULL; const char *message = NULL; char *keywords[] = {"target", "signature", "message", NULL}; CHECK_REFERENCE(self); if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O!s", keywords, &py_target, &SignatureType, &py_signature, &message)) return NULL; if (py_signature) sig = py_signature->signature; /* Case 1: Direct */ if (GIT_REF_OID == git_reference_type(self->reference)) { err = py_oid_to_git_oid_expand(self->repo->repo, py_target, &oid); if (err < 0) goto error; err = git_reference_set_target(&new_ref, self->reference, &oid, sig, message); if (err < 0) goto error; git_reference_free(self->reference); self->reference = new_ref; Py_RETURN_NONE; } /* Case 2: Symbolic */ c_name = py_path_to_c_str(py_target); if (c_name == NULL) return NULL; err = git_reference_symbolic_set_target(&new_ref, self->reference, c_name, sig, message); free(c_name); if (err < 0) goto error; git_reference_free(self->reference); self->reference = new_ref; Py_RETURN_NONE; error: Error_set(err); return NULL; }
PyObject * Repository_expand_id(Repository *self, PyObject *py_hex) { git_oid oid; int err; err = py_oid_to_git_oid_expand(self->repo, py_hex, &oid); if (err < 0) return NULL; return git_oid_to_python(&oid); }
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_oid_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_new(&bld, self->repo, 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 * Repository_blame(Repository *self, PyObject *args, PyObject *kwds) { git_blame_options opts = GIT_BLAME_OPTIONS_INIT; git_blame *blame; char *path; PyObject *value1 = NULL; PyObject *value2 = NULL; int err; char *keywords[] = {"path", "flags", "min_match_characters", "newest_commit", "oldest_commit", "min_line", "max_line", NULL}; if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|IHO!O!II", keywords, &path, &opts.flags, &opts.min_match_characters, &OidType, &value1, &OidType, &value2, &opts.min_line, &opts.max_line)) return NULL; if (value1) { err = py_oid_to_git_oid_expand(self->repo, value1, &opts.newest_commit); if (err < 0) return NULL; } if (value2) { err = py_oid_to_git_oid_expand(self->repo, value2, &opts.oldest_commit); if (err < 0) return NULL; } err = git_blame_file(&blame, self->repo, path, &opts); if (err < 0) return Error_set(err); return wrap_blame(blame, self); }
PyObject * Walker_push(Walker *self, PyObject *py_hex) { int err; git_oid oid; err = py_oid_to_git_oid_expand(self->repo->repo, py_hex, &oid); if (err < 0) return NULL; 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 = GIT_SORT_NONE; int err; git_oid oid; git_revwalk *walk; Walker *py_walker; if (!PyArg_ParseTuple(args, "O|I", &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_oid_to_git_oid_expand(self->repo, value, &oid); if (err < 0) { git_revwalk_free(walk); return NULL; } 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; }
int Reference_target__set__(Reference *self, PyObject *py_target) { git_oid oid; char *c_name; int err; git_reference *new_ref; CHECK_REFERENCE_INT(self); /* Case 1: Direct */ if (GIT_REF_OID == git_reference_type(self->reference)) { err = py_oid_to_git_oid_expand(self->repo->repo, py_target, &oid); if (err < 0) return err; err = git_reference_set_target(&new_ref, self->reference, &oid); if (err < 0) goto error; git_reference_free(self->reference); self->reference = new_ref; return 0; } /* Case 2: Symbolic */ c_name = py_path_to_c_str(py_target); if (c_name == NULL) return -1; err = git_reference_symbolic_set_target(&new_ref, self->reference, c_name); free(c_name); if (err < 0) goto error; git_reference_free(self->reference); self->reference = new_ref; return 0; error: Error_set(err); return -1; }
PyObject * Repository_create_reference_direct(Repository *self, PyObject *args, PyObject *kw) { PyObject *py_obj; git_reference *c_reference; char *c_name; git_oid oid; int err, force; if (!PyArg_ParseTuple(args, "sOi", &c_name, &py_obj, &force)) return NULL; err = py_oid_to_git_oid_expand(self->repo, py_obj, &oid); if (err < 0) return NULL; err = git_reference_create(&c_reference, self->repo, c_name, &oid, force, NULL, NULL); if (err < 0) return Error_set(err); return wrap_reference(c_reference, self); }