Skip to content

Commit

Permalink
get_ref_dir(): require that the dirname argument ends in '/'
Browse files Browse the repository at this point in the history
This removes some conditional code and makes it consistent with the
way that direntry names are stored.  Please note that this function is
never used on the top-level .git directory; it is always called for
directories at level .git/refs or deeper.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michael Haggerty authored and Junio C Hamano committed May 3, 2012
1 parent 66a3d20 commit abc3909
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions refs.c
Original file line number Diff line number Diff line change
Expand Up @@ -749,13 +749,17 @@ void add_packed_ref(const char *refname, const unsigned char *sha1)
create_ref_entry(refname, sha1, REF_ISPACKED, 1));
}

/*
* Read the loose references for refs from the namespace dirname.
* dirname must end with '/'.
*/
static void get_ref_dir(struct ref_cache *refs, const char *dirname,
struct ref_dir *dir)
{
DIR *d;
const char *path;
struct dirent *de;
int dirnamelen;
int dirnamelen = strlen(dirname);
struct strbuf refname;

if (*refs->name)
Expand All @@ -767,13 +771,8 @@ static void get_ref_dir(struct ref_cache *refs, const char *dirname,
if (!d)
return;

dirnamelen = strlen(dirname);
strbuf_init(&refname, dirnamelen + 257);
strbuf_add(&refname, dirname, dirnamelen);
if (dirnamelen && dirname[dirnamelen-1] != '/') {
strbuf_addch(&refname, '/');
dirnamelen++;
}

while ((de = readdir(d)) != NULL) {
unsigned char sha1[20];
Expand All @@ -792,6 +791,7 @@ static void get_ref_dir(struct ref_cache *refs, const char *dirname,
if (stat(refdir, &st) < 0) {
; /* silently ignore */
} else if (S_ISDIR(st.st_mode)) {
strbuf_addch(&refname, '/');
get_ref_dir(refs, refname.buf, dir);
} else {
if (*refs->name) {
Expand All @@ -816,7 +816,7 @@ static void get_ref_dir(struct ref_cache *refs, const char *dirname,
static struct ref_dir *get_loose_refs(struct ref_cache *refs)
{
if (!refs->did_loose) {
get_ref_dir(refs, "refs", &refs->loose);
get_ref_dir(refs, "refs/", &refs->loose);
refs->did_loose = 1;
}
return &refs->loose;
Expand Down

0 comments on commit abc3909

Please sign in to comment.