Skip to content

Commit

Permalink
Merge branch 'wh/normalize-alt-odb-path'
Browse files Browse the repository at this point in the history
* wh/normalize-alt-odb-path:
  sha1_file: normalize alt_odb path before comparing and storing
  • Loading branch information
Junio C Hamano committed Oct 5, 2011
2 parents 7451aee + 5bdf0a8 commit e99f8c6
Showing 1 changed file with 20 additions and 17 deletions.
37 changes: 20 additions & 17 deletions sha1_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,27 +248,30 @@ static int link_alt_odb_entry(const char * entry, int len, const char * relative
const char *objdir = get_object_directory();
struct alternate_object_database *ent;
struct alternate_object_database *alt;
/* 43 = 40-byte + 2 '/' + terminating NUL */
int pfxlen = len;
int entlen = pfxlen + 43;
int base_len = -1;
int pfxlen, entlen;
struct strbuf pathbuf = STRBUF_INIT;

if (!is_absolute_path(entry) && relative_base) {
/* Relative alt-odb */
if (base_len < 0)
base_len = strlen(relative_base) + 1;
entlen += base_len;
pfxlen += base_len;
strbuf_addstr(&pathbuf, real_path(relative_base));
strbuf_addch(&pathbuf, '/');
}
ent = xmalloc(sizeof(*ent) + entlen);
strbuf_add(&pathbuf, entry, len);

if (!is_absolute_path(entry) && relative_base) {
memcpy(ent->base, relative_base, base_len - 1);
ent->base[base_len - 1] = '/';
memcpy(ent->base + base_len, entry, len);
}
else
memcpy(ent->base, entry, pfxlen);
normalize_path_copy(pathbuf.buf, pathbuf.buf);

pfxlen = strlen(pathbuf.buf);

/*
* The trailing slash after the directory name is given by
* this function at the end. Remove duplicates.
*/
while (pfxlen && pathbuf.buf[pfxlen-1] == '/')
pfxlen -= 1;

entlen = pfxlen + 43; /* '/' + 2 hex + '/' + 38 hex + NUL */
ent = xmalloc(sizeof(*ent) + entlen);
memcpy(ent->base, pathbuf.buf, pfxlen);
strbuf_release(&pathbuf);

ent->name = ent->base + pfxlen + 1;
ent->base[pfxlen + 3] = '/';
Expand Down

0 comments on commit e99f8c6

Please sign in to comment.