TreeEntry * Tree_getitem(Tree *self, PyObject *value) { char *path; git_tree_entry *entry; int err; /* Case 1: integer */ if (PyLong_Check(value)) return Tree_getitem_by_index(self, value); /* Case 2: byte or text string */ path = py_path_to_c_str(value); if (path == NULL) return NULL; err = git_tree_entry_bypath(&entry, self->tree, path); free(path); if (err == GIT_ENOTFOUND) { PyErr_SetObject(PyExc_KeyError, value); return NULL; } if (err < 0) return (TreeEntry*)Error_set(err); /* git_tree_entry_dup is already done in git_tree_entry_bypath */ return wrap_tree_entry(entry); }
int Reference_target__set__(Reference *self, PyObject *py_name) { char *c_name; int err; git_reference *new_ref; CHECK_REFERENCE_INT(self); /* Get the C name */ c_name = py_path_to_c_str(py_name); if (c_name == NULL) return -1; /* Set the new target */ err = git_reference_symbolic_set_target(&new_ref, self->reference, c_name); free(c_name); if (err < 0) { Error_set(err); return -1; } git_reference_free(self->reference); self->reference = new_ref; return 0; }
int Tree_contains(Tree *self, PyObject *py_name) { int err; git_tree_entry *entry; char *name; name = py_path_to_c_str(py_name); if (name == NULL) return -1; err = git_tree_entry_bypath(&entry, self->tree, name); free(name); if (err == GIT_ENOTFOUND) return 0; if (err < 0) { Error_set(err); return -1; } git_tree_entry_free(entry); return 1; }
PyObject * Index_getitem(Index *self, PyObject *value) { long idx; char *path; const git_index_entry *index_entry; /* Case 1: integer */ if (PyLong_Check(value)) { idx = PyLong_AsLong(value); if (idx == -1 && PyErr_Occurred()) return NULL; if (idx < 0) { PyErr_SetObject(PyExc_ValueError, value); return NULL; } index_entry = git_index_get_byindex(self->index, (size_t)idx); /* Case 2: byte or text string */ } else { path = py_path_to_c_str(value); if (!path) return NULL; index_entry = git_index_get_bypath(self->index, path, 0); free(path); } if (!index_entry) { PyErr_SetObject(PyExc_KeyError, value); return NULL; } return wrap_index_entry(index_entry, self); }
/* This is an internal function, used by Index_getitem and Index_setitem */ int Index_get_position(Index *self, PyObject *value) { char *path; int idx; /* Case 1: integer */ if (PyInt_Check(value)) { idx = (int)PyInt_AsLong(value); if (idx == -1 && PyErr_Occurred()) return -1; if (idx < 0) { PyErr_SetObject(PyExc_ValueError, value); return -1; } return idx; } /* Case 2: byte or text string */ path = py_path_to_c_str(value); if (!path) return -1; idx = git_index_find(self->index, path); if (idx < 0) { Error_set_str(idx, path); free(path); return -1; } free(path); return idx; }
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; }
int Tree_contains(Tree *self, PyObject *py_name) { int result = 0; char *name = py_path_to_c_str(py_name); if (name == NULL) return -1; result = git_tree_entry_byname(self->tree, name) ? 1 : 0; free(name); return result; }
PyObject * TreeBuilder_remove(TreeBuilder *self, PyObject *py_filename) { char *filename = py_path_to_c_str(py_filename); int err = 0; if (filename == NULL) return NULL; err = git_treebuilder_remove(self->bld, filename); free(filename); if (err < 0) return Error_set(err); Py_RETURN_NONE; }
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_status_file(Repository *self, PyObject *value) { char *path; unsigned int status; int err; path = py_path_to_c_str(value); if (!path) return NULL; err = git_status_file(&status, self->repo, path); if (err < 0) { PyObject *err_obj = Error_set_str(err, path); free(path); return err_obj; } return PyLong_FromLong(status); }
int Index_contains(Index *self, PyObject *value) { char *path; int idx; path = py_path_to_c_str(value); if (!path) return -1; idx = git_index_find(self->index, path); if (idx == GIT_ENOTFOUND) return 0; if (idx < 0) { Error_set_str(idx, path); free(path); return -1; } return 1; }
int Index_contains(Index *self, PyObject *value) { char *path; int err; path = py_path_to_c_str(value); if (!path) return -1; err = git_index_find(NULL, self->index, path); if (err == GIT_ENOTFOUND) { free(path); return 0; } if (err < 0) { Error_set_str(err, path); free(path); return -1; } free(path); return 1; }
PyObject * TreeBuilder_get(TreeBuilder *self, PyObject *py_filename) { char *filename; const git_tree_entry *entry_src; git_tree_entry *entry; filename = py_path_to_c_str(py_filename); if (filename == NULL) return NULL; entry_src = git_treebuilder_get(self->bld, filename); free(filename); if (entry_src == NULL) Py_RETURN_NONE; if (git_tree_entry_dup(&entry, entry_src) < 0) { PyErr_SetNone(PyExc_MemoryError); return NULL; } return (PyObject*)wrap_tree_entry(entry); }
PyObject * Repository_lookup_reference(Repository *self, PyObject *py_name) { git_reference *c_reference; char *c_name; int err; /* 1- Get the C name */ c_name = py_path_to_c_str(py_name); if (c_name == NULL) return NULL; /* 2- Lookup */ err = git_reference_lookup(&c_reference, self->repo, c_name); if (err < 0) { PyObject *err_obj = Error_set_str(err, c_name); free(c_name); return err_obj; } free(c_name); /* 3- Make an instance of Reference and return it */ return wrap_reference(c_reference); }
PyObject * Reference_rename(Reference *self, PyObject *py_name) { char *c_name; int err; git_reference *new_reference; CHECK_REFERENCE(self); /* Get the C name */ c_name = py_path_to_c_str(py_name); if (c_name == NULL) return NULL; /* Rename */ err = git_reference_rename(&new_reference, self->reference, c_name, 0); git_reference_free(self->reference); free(c_name); if (err < 0) return Error_set(err); self->reference = new_reference; Py_RETURN_NONE; }