X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=fsck-cache.c;h=7c55fe56a439d4ac02c288cb99c3d7b877751322;hb=180926636e47ecfe28d03cec493af75899994f0f;hp=6ac122b71cf9a5eec298a003032c5724d47f306d;hpb=d1af002dc608be3213ba18df1a99ced0ab42e6d6;p=git.git diff --git a/fsck-cache.c b/fsck-cache.c index 6ac122b7..7c55fe56 100644 --- a/fsck-cache.c +++ b/fsck-cache.c @@ -74,10 +74,6 @@ static void check_connectivity(void) refs->item->type, sha1_to_hex(refs->item->sha1)); } - /* Don't bother with tag reachability. */ - if (obj->type == tag_type) - continue; - if (show_unreachable && !(obj->flags & REACHABLE)) { if (obj->attached_deltas) printf("foreign delta reference %s\n", @@ -203,6 +199,8 @@ static int fsck_tree(struct tree *item) static int fsck_commit(struct commit *commit) { + free(commit->buffer); + commit->buffer = NULL; if (!commit->tree) return -1; if (!commit->parents && show_root) @@ -366,7 +364,7 @@ static int read_sha1_reference(const char *path) return 0; } -static void find_file_objects(const char *base, const char *name) +static int find_file_objects(const char *base, const char *name) { int baselen = strlen(base); int namelen = strlen(name); @@ -377,34 +375,36 @@ static void find_file_objects(const char *base, const char *name) path[baselen] = '/'; memcpy(path + baselen + 1, name, namelen+1); if (stat(path, &st) < 0) - return; + return 0; /* * Recurse into directories */ if (S_ISDIR(st.st_mode)) { + int count = 0; DIR *dir = opendir(path); if (dir) { struct dirent *de; while ((de = readdir(dir)) != NULL) { if (de->d_name[0] == '.') continue; - find_file_objects(path, de->d_name); + count += find_file_objects(path, de->d_name); } closedir(dir); } - return; - } - if (S_ISREG(st.st_mode)) { - read_sha1_reference(path); - return; + return count; } + if (S_ISREG(st.st_mode)) + return read_sha1_reference(path) == 0; + return 0; } static void get_default_heads(void) { char *git_dir = gitenv(GIT_DIR_ENVIRONMENT) ? : DEFAULT_GIT_DIR_ENVIRONMENT; - find_file_objects(git_dir, "refs"); + int count = find_file_objects(git_dir, "refs"); + if (!count) + die("No default references"); } int main(int argc, char **argv)