diff options
author | Jeff King <peff@peff.net> | 2015-06-22 07:06:32 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-06-26 09:24:42 -0700 |
commit | 3115ee45c8c7c0b753663890b13ec0e14fe4c0d7 (patch) | |
tree | db7ceda377412cbdf84cce0d96fc7f432a2c415d /builtin/cat-file.c | |
parent | 6a951937ae1abb5fe438bfb41ebb28c5abe0419d (diff) | |
download | git-3115ee45c8c7c0b753663890b13ec0e14fe4c0d7.tar.gz git-3115ee45c8c7c0b753663890b13ec0e14fe4c0d7.tar.xz |
cat-file: sort and de-dup output of --batch-all-objects
The sorting we could probably live without, but printing
duplicates is just a hassle for the user, who must then
de-dup themselves (or risk a wrong answer if they are doing
something like counting objects with a particular property).
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin/cat-file.c')
-rw-r--r-- | builtin/cat-file.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/builtin/cat-file.c b/builtin/cat-file.c index 95604c4a6..07baad1e5 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -9,6 +9,7 @@ #include "userdiff.h" #include "streaming.h" #include "tree-walk.h" +#include "sha1-array.h" struct batch_options { int enabled; @@ -324,19 +325,19 @@ struct object_cb_data { struct expand_data *expand; }; -static int batch_object_cb(const unsigned char *sha1, - struct object_cb_data *data) +static void batch_object_cb(const unsigned char sha1[20], void *vdata) { + struct object_cb_data *data = vdata; hashcpy(data->expand->sha1, sha1); batch_object_write(NULL, data->opt, data->expand); - return 0; } static int batch_loose_object(const unsigned char *sha1, const char *path, void *data) { - return batch_object_cb(sha1, data); + sha1_array_append(data, sha1); + return 0; } static int batch_packed_object(const unsigned char *sha1, @@ -344,7 +345,8 @@ static int batch_packed_object(const unsigned char *sha1, uint32_t pos, void *data) { - return batch_object_cb(sha1, data); + sha1_array_append(data, sha1); + return 0; } static int batch_objects(struct batch_options *opt) @@ -375,11 +377,17 @@ static int batch_objects(struct batch_options *opt) data.info.typep = &data.type; if (opt->all_objects) { + struct sha1_array sa = SHA1_ARRAY_INIT; struct object_cb_data cb; + + for_each_loose_object(batch_loose_object, &sa, 0); + for_each_packed_object(batch_packed_object, &sa, 0); + cb.opt = opt; cb.expand = &data; - for_each_loose_object(batch_loose_object, &cb, 0); - for_each_packed_object(batch_packed_object, &cb, 0); + sha1_array_for_each_unique(&sa, batch_object_cb, &cb); + + sha1_array_clear(&sa); return 0; } |