コード例 #1
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);
}
コード例 #2
0
ファイル: repository.c プロジェクト: cjwatson/pygit2
PyObject *
Repository_head__get__(Repository *self)
{
    git_reference *head;
    int err;

    err = git_repository_head(&head, self->repo);
    if (err < 0) {
        if (err == GIT_ENOTFOUND)
            PyErr_SetString(GitError, "head reference does not exist");
        else
            Error_set(err);

        return NULL;
    }

    return wrap_reference(head, self);
}
コード例 #3
0
ファイル: repository.c プロジェクト: cjwatson/pygit2
PyObject *
Repository_create_reference_symbolic(Repository *self,  PyObject *args,
                                     PyObject *kw)
{
    git_reference *c_reference;
    char *c_name, *c_target;
    int err, force;

    if (!PyArg_ParseTuple(args, "ssi", &c_name, &c_target, &force))
        return NULL;

    err = git_reference_symbolic_create(&c_reference, self->repo, c_name,
                                        c_target, force, NULL, NULL);
    if (err < 0)
        return Error_set(err);

    return wrap_reference(c_reference, self);
}
コード例 #4
0
PyObject *
Repository_create_symbolic_reference(Repository *self,  PyObject *args)
{
    git_reference *c_reference;
    char *c_name, *c_target;
    int err;

    /* 1- Get the C variables */
    if (!PyArg_ParseTuple(args, "ss", &c_name, &c_target))
        return NULL;

    /* 2- Create the reference */
    err = git_reference_create_symbolic(&c_reference, self->repo, c_name,
                                        c_target, 0);
    if (err < 0)
        return Error_set(err);

    /* 3- Make an instance of Reference and return it */
    return wrap_reference(c_reference);
}
コード例 #5
0
ファイル: reference.c プロジェクト: agmarianna/pygit2
PyObject *
Reference_resolve(Reference *self, PyObject *args)
{
    git_reference *c_reference;
    int err;

    CHECK_REFERENCE(self);

    /* Direct: return myself */
    if (git_reference_type(self->reference) == GIT_REF_OID) {
        Py_INCREF(self);
        return (PyObject *)self;
    }

    /* Symbolic: resolve */
    err = git_reference_resolve(&c_reference, self->reference);
    if (err < 0)
        return Error_set(err);

    return wrap_reference(c_reference, self->repo);
}
コード例 #6
0
ファイル: repository.c プロジェクト: cboos/pygit2
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);
}
コード例 #7
0
ファイル: repository.c プロジェクト: cjwatson/pygit2
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);
}
コード例 #8
0
ファイル: repository.c プロジェクト: cboos/pygit2
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);
}