mirror of
https://github.com/git/git
synced 2024-08-24 02:11:08 +00:00
t: make the sha1 test-tool helper generic
Since we're going to have multiple hash algorithms to test, it makes sense to share as much of the test code as possible. Convert the sha1 helper for the test-tool to be generic and move it out into its own module. This will allow us to share most of this code with our NewHash implementation. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9a3a0ff537
commit
50c817e0c0
1
Makefile
1
Makefile
|
@ -714,6 +714,7 @@ TEST_BUILTINS_OBJS += test-dump-split-index.o
|
|||
TEST_BUILTINS_OBJS += test-dump-untracked-cache.o
|
||||
TEST_BUILTINS_OBJS += test-example-decorate.o
|
||||
TEST_BUILTINS_OBJS += test-genrandom.o
|
||||
TEST_BUILTINS_OBJS += test-hash.o
|
||||
TEST_BUILTINS_OBJS += test-hashmap.o
|
||||
TEST_BUILTINS_OBJS += test-index-version.o
|
||||
TEST_BUILTINS_OBJS += test-json-writer.o
|
||||
|
|
58
t/helper/test-hash.c
Normal file
58
t/helper/test-hash.c
Normal file
|
@ -0,0 +1,58 @@
|
|||
#include "test-tool.h"
|
||||
#include "cache.h"
|
||||
|
||||
int cmd_hash_impl(int ac, const char **av, int algo)
|
||||
{
|
||||
git_hash_ctx ctx;
|
||||
unsigned char hash[GIT_MAX_HEXSZ];
|
||||
unsigned bufsz = 8192;
|
||||
int binary = 0;
|
||||
char *buffer;
|
||||
const struct git_hash_algo *algop = &hash_algos[algo];
|
||||
|
||||
if (ac == 2) {
|
||||
if (!strcmp(av[1], "-b"))
|
||||
binary = 1;
|
||||
else
|
||||
bufsz = strtoul(av[1], NULL, 10) * 1024 * 1024;
|
||||
}
|
||||
|
||||
if (!bufsz)
|
||||
bufsz = 8192;
|
||||
|
||||
while ((buffer = malloc(bufsz)) == NULL) {
|
||||
fprintf(stderr, "bufsz %u is too big, halving...\n", bufsz);
|
||||
bufsz /= 2;
|
||||
if (bufsz < 1024)
|
||||
die("OOPS");
|
||||
}
|
||||
|
||||
algop->init_fn(&ctx);
|
||||
|
||||
while (1) {
|
||||
ssize_t sz, this_sz;
|
||||
char *cp = buffer;
|
||||
unsigned room = bufsz;
|
||||
this_sz = 0;
|
||||
while (room) {
|
||||
sz = xread(0, cp, room);
|
||||
if (sz == 0)
|
||||
break;
|
||||
if (sz < 0)
|
||||
die_errno("test-hash");
|
||||
this_sz += sz;
|
||||
cp += sz;
|
||||
room -= sz;
|
||||
}
|
||||
if (this_sz == 0)
|
||||
break;
|
||||
algop->update_fn(&ctx, buffer, this_sz);
|
||||
}
|
||||
algop->final_fn(hash, &ctx);
|
||||
|
||||
if (binary)
|
||||
fwrite(hash, 1, algop->rawsz, stdout);
|
||||
else
|
||||
puts(hash_to_hex_algop(hash, algop));
|
||||
exit(0);
|
||||
}
|
|
@ -3,55 +3,5 @@
|
|||
|
||||
int cmd__sha1(int ac, const char **av)
|
||||
{
|
||||
git_SHA_CTX ctx;
|
||||
unsigned char sha1[20];
|
||||
unsigned bufsz = 8192;
|
||||
int binary = 0;
|
||||
char *buffer;
|
||||
|
||||
if (ac == 2) {
|
||||
if (!strcmp(av[1], "-b"))
|
||||
binary = 1;
|
||||
else
|
||||
bufsz = strtoul(av[1], NULL, 10) * 1024 * 1024;
|
||||
}
|
||||
|
||||
if (!bufsz)
|
||||
bufsz = 8192;
|
||||
|
||||
while ((buffer = malloc(bufsz)) == NULL) {
|
||||
fprintf(stderr, "bufsz %u is too big, halving...\n", bufsz);
|
||||
bufsz /= 2;
|
||||
if (bufsz < 1024)
|
||||
die("OOPS");
|
||||
}
|
||||
|
||||
git_SHA1_Init(&ctx);
|
||||
|
||||
while (1) {
|
||||
ssize_t sz, this_sz;
|
||||
char *cp = buffer;
|
||||
unsigned room = bufsz;
|
||||
this_sz = 0;
|
||||
while (room) {
|
||||
sz = xread(0, cp, room);
|
||||
if (sz == 0)
|
||||
break;
|
||||
if (sz < 0)
|
||||
die_errno("test-sha1");
|
||||
this_sz += sz;
|
||||
cp += sz;
|
||||
room -= sz;
|
||||
}
|
||||
if (this_sz == 0)
|
||||
break;
|
||||
git_SHA1_Update(&ctx, buffer, this_sz);
|
||||
}
|
||||
git_SHA1_Final(sha1, &ctx);
|
||||
|
||||
if (binary)
|
||||
fwrite(sha1, 1, 20, stdout);
|
||||
else
|
||||
puts(sha1_to_hex(sha1));
|
||||
exit(0);
|
||||
return cmd_hash_impl(ac, av, GIT_HASH_SHA1);
|
||||
}
|
||||
|
|
|
@ -50,4 +50,6 @@ int cmd__windows_named_pipe(int argc, const char **argv);
|
|||
#endif
|
||||
int cmd__write_cache(int argc, const char **argv);
|
||||
|
||||
int cmd_hash_impl(int ac, const char **av, int algo);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue