57 lines
1.1 KiB
C
57 lines
1.1 KiB
C
|
#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;
|
||
|
}
|