projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Retire git-clone-dumb-http.
[git.git]
/
sha1_file.c
diff --git
a/sha1_file.c
b/sha1_file.c
index
2d109f9
..
64eac59
100644
(file)
--- a/
sha1_file.c
+++ b/
sha1_file.c
@@
-240,14
+240,21
@@
static struct alternate_object_database **alt_odb_tail;
* SHA1, an extra slash for the first level indirection, and the
* terminating NUL.
*/
* SHA1, an extra slash for the first level indirection, and the
* terminating NUL.
*/
-static void link_alt_odb_entries(const char *alt, const char *ep)
+static void link_alt_odb_entries(const char *alt, const char *ep
, int sep
)
{
const char *cp, *last;
struct alternate_object_database *ent;
last = alt;
{
const char *cp, *last;
struct alternate_object_database *ent;
last = alt;
- do {
- for (cp = last; cp < ep && *cp != ':'; cp++)
+ while (last < ep) {
+ cp = last;
+ if (cp < ep && *cp == '#') {
+ while (cp < ep && *cp != sep)
+ cp++;
+ last = cp + 1;
+ continue;
+ }
+ for ( ; cp < ep && *cp != sep; cp++)
;
if (last != cp) {
/* 43 = 40-byte + 2 '/' + terminating NUL */
;
if (last != cp) {
/* 43 = 40-byte + 2 '/' + terminating NUL */
@@
-264,25
+271,28
@@
static void link_alt_odb_entries(const char *alt, const char *ep)
ent->base[pfxlen] = ent->base[pfxlen + 3] = '/';
ent->base[entlen-1] = 0;
}
ent->base[pfxlen] = ent->base[pfxlen + 3] = '/';
ent->base[entlen-1] = 0;
}
- while (cp < ep && *cp ==
':'
)
+ while (cp < ep && *cp ==
sep
)
cp++;
last = cp;
cp++;
last = cp;
- }
while (cp < ep);
+ }
}
void prepare_alt_odb(void)
{
char path[PATH_MAX];
}
void prepare_alt_odb(void)
{
char path[PATH_MAX];
- char *map
, *ep
;
+ char *map;
int fd;
struct stat st;
int fd;
struct stat st;
- char *alt = gitenv(ALTERNATE_DB_ENVIRONMENT) ? : "";
+ char *alt;
+
+ alt = gitenv(ALTERNATE_DB_ENVIRONMENT);
+ if (!alt) alt = "";
sprintf(path, "%s/info/alternates", get_object_directory());
if (alt_odb_tail)
return;
alt_odb_tail = &alt_odb_list;
sprintf(path, "%s/info/alternates", get_object_directory());
if (alt_odb_tail)
return;
alt_odb_tail = &alt_odb_list;
- link_alt_odb_entries(alt, alt + strlen(alt));
+ link_alt_odb_entries(alt, alt + strlen(alt)
, ':'
);
fd = open(path, O_RDONLY);
if (fd < 0)
fd = open(path, O_RDONLY);
if (fd < 0)
@@
-296,10
+306,7
@@
void prepare_alt_odb(void)
if (map == MAP_FAILED)
return;
if (map == MAP_FAILED)
return;
- /* Remove the trailing newline */
- for (ep = map + st.st_size - 1; map < ep && ep[-1] == '\n'; ep--)
- ;
- link_alt_odb_entries(map, ep);
+ link_alt_odb_entries(map, map + st.st_size, '\n');
munmap(map, st.st_size);
}
munmap(map, st.st_size);
}
@@
-476,12
+483,18
@@
struct packed_git *add_packed_git(char *path, int path_len)
struct packed_git *parse_pack_index(unsigned char *sha1)
{
struct packed_git *parse_pack_index(unsigned char *sha1)
{
+ char *path = sha1_pack_index_name(sha1);
+ return parse_pack_index_file(sha1, path);
+}
+
+struct packed_git *parse_pack_index_file(const unsigned char *sha1, char *idx_path)
+{
struct packed_git *p;
unsigned long idx_size;
void *idx_map;
struct packed_git *p;
unsigned long idx_size;
void *idx_map;
- char *path
= sha1_pack_index_name(sha1)
;
+ char *path;
- if (check_packed_git_idx(path, &idx_size, &idx_map))
+ if (check_packed_git_idx(
idx_
path, &idx_size, &idx_map))
return NULL;
path = sha1_pack_name(sha1);
return NULL;
path = sha1_pack_name(sha1);