mirror of
https://github.com/git/git.git
synced 2024-12-12 03:14:11 +08:00
16ddcd403b
The callbacks for iterating a sha1_array must have a void return. This is unlike our usual for_each semantics, where a callback may interrupt iteration and have its value propagated. Let's switch it to the usual form, which will enable its use in more places (e.g., where we are replacing an existing iteration with a different data structure). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
36 lines
950 B
C
36 lines
950 B
C
#include "cache.h"
|
|
#include "sha1-array.h"
|
|
|
|
static int print_sha1(const unsigned char sha1[20], void *data)
|
|
{
|
|
puts(sha1_to_hex(sha1));
|
|
return 0;
|
|
}
|
|
|
|
int cmd_main(int argc, const char **argv)
|
|
{
|
|
struct sha1_array array = SHA1_ARRAY_INIT;
|
|
struct strbuf line = STRBUF_INIT;
|
|
|
|
while (strbuf_getline(&line, stdin) != EOF) {
|
|
const char *arg;
|
|
unsigned char sha1[20];
|
|
|
|
if (skip_prefix(line.buf, "append ", &arg)) {
|
|
if (get_sha1_hex(arg, sha1))
|
|
die("not a hexadecimal SHA1: %s", arg);
|
|
sha1_array_append(&array, sha1);
|
|
} else if (skip_prefix(line.buf, "lookup ", &arg)) {
|
|
if (get_sha1_hex(arg, sha1))
|
|
die("not a hexadecimal SHA1: %s", arg);
|
|
printf("%d\n", sha1_array_lookup(&array, sha1));
|
|
} else if (!strcmp(line.buf, "clear"))
|
|
sha1_array_clear(&array);
|
|
else if (!strcmp(line.buf, "for_each_unique"))
|
|
sha1_array_for_each_unique(&array, print_sha1, NULL);
|
|
else
|
|
die("unknown command: %s", line.buf);
|
|
}
|
|
return 0;
|
|
}
|