summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVicent Martí <vicent@github.com>2013-04-20 01:50:43 -0700
committerVicent Martí <vicent@github.com>2013-04-20 01:50:43 -0700
commitcf97799ed31ebb8cc4d44f7fd6ff86a5bc1b2e8b (patch)
tree4c8133d7595b355e3150b4525e25ad25103d10ff /src
parent4a38143c93dc705bc40109e3f79d7fac722d44d7 (diff)
parent4e4eab52f7c5062ea21ea278a38e48700e753883 (diff)
downloadlibgit2-cf97799ed31ebb8cc4d44f7fd6ff86a5bc1b2e8b.tar.gz
Merge pull request #1491 from ethomson/backends_dont_refdb
alloc doesn't take a refdb
Diffstat (limited to 'src')
-rw-r--r--src/refdb.c15
-rw-r--r--src/refdb_fs.c11
-rw-r--r--src/refs.c25
3 files changed, 29 insertions, 22 deletions
diff --git a/src/refdb.c b/src/refdb.c
index d9b73c6e7..2a0fd702c 100644
--- a/src/refdb.c
+++ b/src/refdb.c
@@ -45,7 +45,7 @@ int git_refdb_open(git_refdb **out, git_repository *repo)
return -1;
/* Add the default (filesystem) backend */
- if (git_refdb_backend_fs(&dir, repo, db) < 0) {
+ if (git_refdb_backend_fs(&dir, repo) < 0) {
git_refdb_free(db);
return -1;
}
@@ -111,9 +111,20 @@ int git_refdb_exists(int *exists, git_refdb *refdb, const char *ref_name)
int git_refdb_lookup(git_reference **out, git_refdb *db, const char *ref_name)
{
+ git_reference *ref;
+ int error;
+
assert(db && db->backend && ref_name);
- return db->backend->lookup(out, db->backend, ref_name);
+ *out = NULL;
+
+ if ((error = db->backend->lookup(&ref, db->backend, ref_name)) == 0)
+ {
+ ref->db = db;
+ *out = ref;
+ }
+
+ return error;
}
int git_refdb_foreach(
diff --git a/src/refdb_fs.c b/src/refdb_fs.c
index 784749fd3..56b2b6a99 100644
--- a/src/refdb_fs.c
+++ b/src/refdb_fs.c
@@ -42,7 +42,6 @@ typedef struct refdb_fs_backend {
git_repository *repo;
const char *path;
- git_refdb *refdb;
git_refcache refcache;
} refdb_fs_backend;
@@ -430,12 +429,12 @@ static int loose_lookup(
goto done;
}
- *out = git_reference__alloc_symbolic(backend->refdb, ref_name, target);
+ *out = git_reference__alloc_symbolic(ref_name, target);
} else {
if ((error = loose_parse_oid(&oid, &ref_file)) < 0)
goto done;
- *out = git_reference__alloc(backend->refdb, ref_name, &oid, NULL);
+ *out = git_reference__alloc(ref_name, &oid, NULL);
}
if (*out == NULL)
@@ -484,7 +483,7 @@ static int packed_lookup(
if ((error = packed_map_entry(&entry, &pos, backend, ref_name)) < 0)
return error;
- if ((*out = git_reference__alloc(backend->refdb, ref_name,
+ if ((*out = git_reference__alloc(ref_name,
&entry->oid, &entry->peel)) == NULL)
return -1;
@@ -999,8 +998,7 @@ static void refdb_fs_backend__free(git_refdb_backend *_backend)
int git_refdb_backend_fs(
git_refdb_backend **backend_out,
- git_repository *repository,
- git_refdb *refdb)
+ git_repository *repository)
{
refdb_fs_backend *backend;
@@ -1009,7 +1007,6 @@ int git_refdb_backend_fs(
backend->repo = repository;
backend->path = repository->path_repository;
- backend->refdb = refdb;
backend->parent.exists = &refdb_fs_backend__exists;
backend->parent.lookup = &refdb_fs_backend__lookup;
diff --git a/src/refs.c b/src/refs.c
index 29d1c4fa9..5b5812aae 100644
--- a/src/refs.c
+++ b/src/refs.c
@@ -31,7 +31,7 @@ enum {
GIT_PACKREF_WAS_LOOSE = 2
};
-static git_reference *alloc_ref(git_refdb *refdb, const char *name)
+static git_reference *alloc_ref(const char *name)
{
git_reference *ref;
size_t namelen = strlen(name);
@@ -39,22 +39,20 @@ static git_reference *alloc_ref(git_refdb *refdb, const char *name)
if ((ref = git__calloc(1, sizeof(git_reference) + namelen + 1)) == NULL)
return NULL;
- ref->db = refdb;
memcpy(ref->name, name, namelen + 1);
return ref;
}
git_reference *git_reference__alloc_symbolic(
- git_refdb *refdb,
const char *name,
const char *target)
{
git_reference *ref;
- assert(refdb && name && target);
+ assert(name && target);
- ref = alloc_ref(refdb, name);
+ ref = alloc_ref(name);
if (!ref)
return NULL;
@@ -69,16 +67,15 @@ git_reference *git_reference__alloc_symbolic(
}
git_reference *git_reference__alloc(
- git_refdb *refdb,
const char *name,
const git_oid *oid,
const git_oid *peel)
{
git_reference *ref;
- assert(refdb && name && oid);
+ assert(name && oid);
- ref = alloc_ref(refdb, name);
+ ref = alloc_ref(name);
if (!ref)
return NULL;
@@ -368,12 +365,13 @@ static int reference__create(
if (oid != NULL) {
assert(symbolic == NULL);
- ref = git_reference__alloc(refdb, name, oid, NULL);
+ ref = git_reference__alloc(name, oid, NULL);
} else {
- ref = git_reference__alloc_symbolic(refdb, name, symbolic);
+ ref = git_reference__alloc_symbolic(name, symbolic);
}
GITERR_CHECK_ALLOC(ref);
+ ref->db = refdb;
if ((error = git_refdb_write(refdb, ref)) < 0) {
git_reference_free(ref);
@@ -490,10 +488,9 @@ int git_reference_rename(
* Create the new reference.
*/
if (ref->type == GIT_REF_OID) {
- result = git_reference__alloc(ref->db, new_name,
- &ref->target.oid, &ref->peel);
+ result = git_reference__alloc(new_name, &ref->target.oid, &ref->peel);
} else if (ref->type == GIT_REF_SYMBOLIC) {
- result = git_reference__alloc_symbolic(ref->db, new_name, ref->target.symbolic);
+ result = git_reference__alloc_symbolic(new_name, ref->target.symbolic);
} else {
assert(0);
}
@@ -501,6 +498,8 @@ int git_reference_rename(
if (result == NULL)
return -1;
+ result->db = ref->db;
+
/* Check if we have to update HEAD. */
if ((error = git_branch_is_head(ref)) < 0)
goto on_error;