diff mbox series

[1/9] t/helper/test-read-midx.c: add '--show-objects'

Message ID e36acb005d3563db772711207d2af3df03685bd4.1612998106.git.me@ttaylorr.com (mailing list archive)
State Superseded
Headers show
Series midx: implement a multi-pack reverse index | expand

Commit Message

Taylor Blau Feb. 10, 2021, 11:02 p.m. UTC
The 'read-midx' helper is used in places like t5319 to display basic
information about a multi-pack-index.

In the next patch, the MIDX writing machinery will learn a new way to
choose from which pack an object is selected when multiple copies of
that object exist.

To disambiguate which pack introduces an object so that this feature can
be tested, add a '--show-objects' option which displays additional
information about each object in the MIDX.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 t/helper/test-read-midx.c | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

Comments

Derrick Stolee Feb. 11, 2021, 2:27 a.m. UTC | #1
On 2/10/21 6:02 PM, Taylor Blau wrote:
> +	if (show_objects) {
> +		struct object_id oid;
> +		struct pack_entry e;
> +
> +		for (i = 0; i < m->num_objects; i++) {
> +			nth_midxed_object_oid(&oid, m, i);
> +			fill_midx_entry(the_repository, &oid, &e, m);
> +
> +			printf("%s %"PRIu64"\t%s\n",
> +			       oid_to_hex(&oid), e.offset, e.p->pack_name);
> +		}
> +		return 0;
> +	}
> +
>  	printf("header: %08x %d %d %d %d\n",
>  	       m->signature,
>  	       m->version,

It seems a little odd to me that the list of objects happens after
the header information. Probably doesn't matter in your test cases,
but I sometimes use the test helpers to diagnose data during development
and could see piping this output into 'less' and wanting the header
at the top.

Thanks,
-Stolee
Taylor Blau Feb. 11, 2021, 2:34 a.m. UTC | #2
On Wed, Feb 10, 2021 at 09:27:29PM -0500, Derrick Stolee wrote:
> On 2/10/21 6:02 PM, Taylor Blau wrote:
> > +	if (show_objects) {
> > +		struct object_id oid;
> > +		struct pack_entry e;
> > +
> > +		for (i = 0; i < m->num_objects; i++) {
> > +			nth_midxed_object_oid(&oid, m, i);
> > +			fill_midx_entry(the_repository, &oid, &e, m);
> > +
> > +			printf("%s %"PRIu64"\t%s\n",
> > +			       oid_to_hex(&oid), e.offset, e.p->pack_name);
> > +		}
> > +		return 0;
> > +	}
> > +
> >  	printf("header: %08x %d %d %d %d\n",
> >  	       m->signature,
> >  	       m->version,
>
> It seems a little odd to me that the list of objects happens after
> the header information. Probably doesn't matter in your test cases,
> but I sometimes use the test helpers to diagnose data during development
> and could see piping this output into 'less' and wanting the header
> at the top.

Indeed. In theory you could pipe to tail instead (or to less and
immediately hit 'G'), but I can't think of a good reason that this would
have appeared above the header when I originally wrote the patch.

Anyway, it doesn't seem that the tests care about where this is (they're
just looking for for a line that begins with the object id and ends with
its offset), so I think this could probably be moved without thinking
too hard about it.

> Thanks,
> -Stolee

Thanks,
Taylor
diff mbox series

Patch

diff --git a/t/helper/test-read-midx.c b/t/helper/test-read-midx.c
index 2430880f78..4ec12f77a0 100644
--- a/t/helper/test-read-midx.c
+++ b/t/helper/test-read-midx.c
@@ -4,7 +4,7 @@ 
 #include "repository.h"
 #include "object-store.h"
 
-static int read_midx_file(const char *object_dir)
+static int read_midx_file(const char *object_dir, int show_objects)
 {
 	uint32_t i;
 	struct multi_pack_index *m;
@@ -15,6 +15,20 @@  static int read_midx_file(const char *object_dir)
 	if (!m)
 		return 1;
 
+	if (show_objects) {
+		struct object_id oid;
+		struct pack_entry e;
+
+		for (i = 0; i < m->num_objects; i++) {
+			nth_midxed_object_oid(&oid, m, i);
+			fill_midx_entry(the_repository, &oid, &e, m);
+
+			printf("%s %"PRIu64"\t%s\n",
+			       oid_to_hex(&oid), e.offset, e.p->pack_name);
+		}
+		return 0;
+	}
+
 	printf("header: %08x %d %d %d %d\n",
 	       m->signature,
 	       m->version,
@@ -48,8 +62,10 @@  static int read_midx_file(const char *object_dir)
 
 int cmd__read_midx(int argc, const char **argv)
 {
-	if (argc != 2)
-		usage("read-midx <object-dir>");
+	if (!(argc == 2 || argc == 3))
+		usage("read-midx [--show-objects] <object-dir>");
 
-	return read_midx_file(argv[1]);
+	if (!strcmp(argv[1], "--show-objects"))
+		return read_midx_file(argv[2], 1);
+	return read_midx_file(argv[1], 0);
 }