From: Junio C Hamano Date: Mon, 22 Jul 2013 18:24:05 +0000 (-0700) Subject: Merge branch 'mk/upload-pack-off-by-one-dead-code-removal' X-Git-Tag: v1.8.4-rc0~23 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/4c72ee838f1085a47a3c5144ce1088f1bca42f66?ds=inline;hp=-c Merge branch 'mk/upload-pack-off-by-one-dead-code-removal' * mk/upload-pack-off-by-one-dead-code-removal: upload-pack: remove a piece of dead code --- 4c72ee838f1085a47a3c5144ce1088f1bca42f66 diff --combined shallow.c index cbe2526d8c,04712ac25e..8a9c96d019 --- a/shallow.c +++ b/shallow.c @@@ -3,16 -3,6 +3,16 @@@ #include "tag.h" static int is_shallow = -1; +static struct stat shallow_stat; +static char *alternate_shallow_file; + +void set_alternate_shallow_file(const char *path) +{ + if (is_shallow != -1) + die("BUG: is_repository_shallow must not be called before set_alternate_shallow_file"); + free(alternate_shallow_file); + alternate_shallow_file = path ? xstrdup(path) : NULL; +} int register_shallow(const unsigned char *sha1) { @@@ -31,21 -21,12 +31,21 @@@ int is_repository_shallow(void { FILE *fp; char buf[1024]; + const char *path = alternate_shallow_file; if (is_shallow >= 0) return is_shallow; - fp = fopen(git_path("shallow"), "r"); - if (!fp) { + if (!path) + path = git_path("shallow"); + /* + * fetch-pack sets '--shallow-file ""' as an indicator that no + * shallow file should be used. We could just open it and it + * will likely fail. But let's do an explicit check instead. + */ + if (!*path || + stat(path, &shallow_stat) || + (fp = fopen(path, "r")) == NULL) { is_shallow = 0; return is_shallow; } @@@ -110,39 -91,15 +110,34 @@@ struct commit_list *get_shallow_commits continue; *pointer = cur_depth; } - if (cur_depth < depth) { - if (p->next) - add_object_array(&p->item->object, - NULL, &stack); - else { - commit = p->item; - cur_depth = *(int *)commit->util; - } - } else { - commit_list_insert(p->item, &result); - p->item->object.flags |= shallow_flag; + if (p->next) + add_object_array(&p->item->object, + NULL, &stack); + else { + commit = p->item; + cur_depth = *(int *)commit->util; } } } return result; } + +void check_shallow_file_for_update(void) +{ + struct stat st; + + if (!is_shallow) + return; + else if (is_shallow == -1) + die("BUG: shallow must be initialized by now"); + + if (stat(git_path("shallow"), &st)) + die("shallow file was removed during fetch"); + else if (st.st_mtime != shallow_stat.st_mtime +#ifdef USE_NSEC + || ST_MTIME_NSEC(st) != ST_MTIME_NSEC(shallow_stat) +#endif + ) + die("shallow file was changed during fetch"); +}