| #include "refs.h" | |
| #include "cache.h" | |
| #include "commit.h" | |
| #include "rev-cache.h" | |
| static void process_head_list(int verbose) | |
| { | |
| char buf[512]; | |
| while (fgets(buf, sizeof(buf), stdin)) { | |
| unsigned char sha1[20]; | |
| struct commit *commit; | |
| if (get_sha1_hex(buf, sha1)) { | |
| error("ignoring: %s", buf); | |
| continue; | |
| } | |
| if (!(commit = lookup_commit_reference(sha1))) { | |
| error("not a commit: %s", sha1_to_hex(sha1)); | |
| continue; | |
| } | |
| record_rev_cache(commit->object.sha1, verbose ? stderr : NULL); | |
| } | |
| } | |
| static const char *build_rev_cache_usage = | |
| "git-build-rev-cache <rev-cache-file> < list-of-heads"; | |
| int main(int ac, char **av) | |
| { | |
| int verbose = 0; | |
| const char *path; | |
| while (1 < ac && av[1][0] == '-') { | |
| if (!strcmp(av[1], "-v")) | |
| verbose = 1; | |
| else | |
| usage(build_rev_cache_usage); | |
| ac--; av++; | |
| } | |
| if (ac != 2) | |
| usage(build_rev_cache_usage); | |
| path = av[1]; | |
| /* read existing rev-cache */ | |
| read_rev_cache(path, NULL, 0); | |
| process_head_list(verbose); | |
| /* update the rev-cache database by appending newly found one to it */ | |
| write_rev_cache(path, path); | |
| return 0; | |
| } |