1
0
mirror of https://github.com/git/git.git synced 2025-03-15 11:31:32 +00:00

get_ref_dir(): take the containing directory as argument

Previously, the "dir" argument to get_ref_dir() was a pointer to the
top-level ref_dir.  Change the function to expect a pointer to the
ref_dir corresponding to dirname.  This allows entries to be added
directly to dir, without having to recurse through the reference trie
each time (i.e., we can use add_entry_to_dir() instead of add_ref()).

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael Haggerty 2012-04-25 00:45:12 +02:00 committed by Junio C Hamano
parent f348ac923c
commit 9f2fb4a373

12
refs.c
View File

@ -765,7 +765,8 @@ void add_packed_ref(const char *refname, const unsigned char *sha1)
/* /*
* Read the loose references for refs from the namespace dirname. * Read the loose references for refs from the namespace dirname.
* dirname must end with '/'. * dirname must end with '/'. dir must be the directory entry
* corresponding to dirname.
*/ */
static void get_ref_dir(struct ref_cache *refs, const char *dirname, static void get_ref_dir(struct ref_cache *refs, const char *dirname,
struct ref_dir *dir) struct ref_dir *dir)
@ -806,7 +807,8 @@ static void get_ref_dir(struct ref_cache *refs, const char *dirname,
; /* silently ignore */ ; /* silently ignore */
} else if (S_ISDIR(st.st_mode)) { } else if (S_ISDIR(st.st_mode)) {
strbuf_addch(&refname, '/'); strbuf_addch(&refname, '/');
get_ref_dir(refs, refname.buf, dir); get_ref_dir(refs, refname.buf,
&search_for_subdir(dir, refname.buf, 1)->u.subdir);
} else { } else {
if (*refs->name) { if (*refs->name) {
hashclr(sha1); hashclr(sha1);
@ -819,7 +821,8 @@ static void get_ref_dir(struct ref_cache *refs, const char *dirname,
hashclr(sha1); hashclr(sha1);
flag |= REF_ISBROKEN; flag |= REF_ISBROKEN;
} }
add_ref(dir, create_ref_entry(refname.buf, sha1, flag, 1)); add_entry_to_dir(dir,
create_ref_entry(refname.buf, sha1, flag, 1));
} }
strbuf_setlen(&refname, dirnamelen); strbuf_setlen(&refname, dirnamelen);
} }
@ -830,7 +833,8 @@ static void get_ref_dir(struct ref_cache *refs, const char *dirname,
static struct ref_dir *get_loose_refs(struct ref_cache *refs) static struct ref_dir *get_loose_refs(struct ref_cache *refs)
{ {
if (!refs->did_loose) { if (!refs->did_loose) {
get_ref_dir(refs, "refs/", &refs->loose); get_ref_dir(refs, "refs/",
&search_for_subdir(&refs->loose, "refs/", 1)->u.subdir);
refs->did_loose = 1; refs->did_loose = 1;
} }
return &refs->loose; return &refs->loose;