git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Add git-pack-ls-objects tool
@ 2006-01-22  2:27 Petr Baudis
  2006-01-22  2:46 ` Junio C Hamano
  0 siblings, 1 reply; 3+ messages in thread
From: Petr Baudis @ 2006-01-22  2:27 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

This tool takes pack index on stdin and produces the list of indexed
objects on stdout.

Very simple, but I've been always somewhat nervous that I cannot list
all (even unreferenced) objects in a repository, and in a given pack in
particular. The immediate use will be in the git-count-objects script,
but I can imagine it being useful also in various troubleshooting
situations.

Signed-off-by: Petr Baudis <pasky@suse.cz>
---

 Documentation/git-pack-ls-objects.txt |   32 ++++++++++++++++++++++++++++++++
 Makefile                              |    2 +-
 pack-ls-objects.c                     |   31 +++++++++++++++++++++++++++++++
 3 files changed, 64 insertions(+), 1 deletions(-)

diff --git a/Documentation/git-pack-ls-objects.txt b/Documentation/git-pack-ls-objects.txt
new file mode 100644
index 0000000..bf2a4a4
--- /dev/null
+++ b/Documentation/git-pack-ls-objects.txt
@@ -0,0 +1,32 @@
+git-pack-ls-objects(1)
+======================
+
+NAME
+----
+git-pack-ls-objects - List objects in a pack based on its index
+
+
+SYNOPSIS
+--------
+'git-pack-ls-objects' < pack-index
+
+
+DESCRIPTION
+-----------
+Reads a packed archive index (.idx) from its standard input and
+produces the list of indexed objects (that is, the objects packed
+in the corresponding .pack file) on its standard output.
+
+
+Author
+------
+Written by Petr Baudis <pasky@suse.cz>
+
+Documentation
+-------------
+Documentation by Petr Baudis
+
+GIT
+---
+Part of the gitlink:git[7] suite
+
diff --git a/Makefile b/Makefile
index a291bb1..7c54507 100644
--- a/Makefile
+++ b/Makefile
@@ -143,7 +143,7 @@ PROGRAMS = \
 	git-upload-pack$X git-verify-pack$X git-write-tree$X \
 	git-update-ref$X git-symbolic-ref$X git-check-ref-format$X \
 	git-name-rev$X git-pack-redundant$X git-repo-config$X git-var$X \
-	git-describe$X
+	git-describe$X git-pack-ls-objects$X
 
 # what 'all' will build and 'install' will install, in gitexecdir
 ALL_PROGRAMS = $(PROGRAMS) $(SIMPLE_PROGRAMS) $(SCRIPTS)
diff --git a/pack-ls-objects.c b/pack-ls-objects.c
new file mode 100644
index 0000000..caee59c
--- /dev/null
+++ b/pack-ls-objects.c
@@ -0,0 +1,31 @@
+/*
+ * GIT - The information manager from hell
+ *
+ * Copyright (C) Petr Baudis, 2006
+ */
+
+#include <stdio.h>
+#include "cache.h"
+
+static const char pack_usage[] = "git-pack-ls-objects < pack-idx";
+
+int main(int argc, char **argv)
+{
+	unsigned char buf[1024];
+	unsigned char entry[24];
+
+	if (argc > 1)
+		usage(pack_usage);
+
+	/* We are doing these charades because we do not want to print
+	 * the last sha1. */
+
+	if (!fread(buf, 256 * 4, 1, stdin) || !fread(entry, 24, 1, stdin))
+		die("invalid pack index");
+
+	while (fread(buf, 24, 1, stdin)) {
+		printf("%s\n", sha1_to_hex(entry + 4));
+		memcpy(entry, buf, 24);
+	}
+	return 0;
+}

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-01-22  2:59 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-22  2:27 [PATCH] Add git-pack-ls-objects tool Petr Baudis
2006-01-22  2:46 ` Junio C Hamano
2006-01-22  3:00   ` Petr Baudis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).