diff options
Diffstat (limited to 'build-rev-cache.c')
-rw-r--r-- | build-rev-cache.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/build-rev-cache.c b/build-rev-cache.c new file mode 100644 index 0000000000..948898beb4 --- /dev/null +++ b/build-rev-cache.c @@ -0,0 +1,56 @@ +#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; +} |