t: make the sha1 test-tool helper generic
authorbrian m. carlson <sandals@crustytoothpaste.net>
Wed, 14 Nov 2018 04:09:32 +0000 (04:09 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 14 Nov 2018 07:54:52 +0000 (16:54 +0900)
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>
Makefile
t/helper/test-hash.c [new file with mode: 0644]
t/helper/test-sha1.c
t/helper/test-tool.h
index 5c8307b7c479542edb0dbfc3c84a4c178f09a8eb..324967410d2dc80c79434d29da78920999eeb08b 100644 (file)
--- a/Makefile
+++ b/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
diff --git a/t/helper/test-hash.c b/t/helper/test-hash.c
new file mode 100644 (file)
index 0000000..0a31de6
--- /dev/null
@@ -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);
+}
index 1ba0675c75f0d2dab281d054b577272cd45c39f9..d860c387c3846d69b7bd63a144ede2f93da60886 100644 (file)
@@ -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);
 }
index e4890566da552eb10ae718c4c921ad103c3f1a71..29ac7b0b0d6c167bfedf414a37734640a5e4ca39 100644 (file)
@@ -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