Beispiel #1
0
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);
}
Beispiel #3
0
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;
}
Beispiel #4
0
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;
}
Beispiel #5
0
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;
}
Beispiel #6
0
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);
}