summaryrefslogtreecommitdiff
path: root/refs/files-backend.c
diff options
context:
space:
mode:
authorMichael Haggerty <mhagger@alum.mit.edu>2017-06-23 07:01:34 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-06-23 20:27:32 (GMT)
commit6dc6ba7092423dfd5b94b9dcb649f2905d456d94 (patch)
treeddecff1c9f67c67cec3f4f479b333d15eb31b3ac /refs/files-backend.c
parent0f199b1ee051e3e6854268841335287c3ad94b88 (diff)
downloadgit-6dc6ba7092423dfd5b94b9dcb649f2905d456d94.zip
git-6dc6ba7092423dfd5b94b9dcb649f2905d456d94.tar.gz
git-6dc6ba7092423dfd5b94b9dcb649f2905d456d94.tar.bz2
packed_peel_ref(): new function, extracted from `files_peel_ref()`
This will later become a method of `packed_ref_store`. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs/files-backend.c')
-rw-r--r--refs/files-backend.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c
index c206791..185d05e 100644
--- a/refs/files-backend.c
+++ b/refs/files-backend.c
@@ -1013,6 +1013,18 @@ out:
return ret;
}
+static int packed_peel_ref(struct packed_ref_store *refs,
+ const char *refname, unsigned char *sha1)
+{
+ struct ref_entry *r = get_packed_ref(refs, refname);
+
+ if (!r || peel_entry(r, 0))
+ return -1;
+
+ hashcpy(sha1, r->u.value.peeled.hash);
+ return 0;
+}
+
static int files_peel_ref(struct ref_store *ref_store,
const char *refname, unsigned char *sha1)
{
@@ -1043,17 +1055,9 @@ static int files_peel_ref(struct ref_store *ref_store,
* be expensive and (b) loose references anyway usually do not
* have REF_KNOWS_PEELED.
*/
- if (flag & REF_ISPACKED) {
- struct ref_entry *r =
- get_packed_ref(refs->packed_ref_store, refname);
-
- if (r) {
- if (peel_entry(r, 0))
- return -1;
- hashcpy(sha1, r->u.value.peeled.hash);
- return 0;
- }
- }
+ if (flag & REF_ISPACKED &&
+ !packed_peel_ref(refs->packed_ref_store, refname, sha1))
+ return 0;
return peel_object(base, sha1);
}