git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Add git-pack-ls-objects tool

From
Petr Baudis <pasky@suse.cz>
Date
Jan 22, 2006, 02:27 UTC
Message-ID
<20060122022711.16333.93404.stgit@machine.or.cz>

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;
+}
Next: Junio C Hamano
Message 1 of 3 in “Add git-pack-ls-objects tool”
  1. Add git-pack-ls-objects toolPetr Baudis, Jan 22, 2006
  2. Junio C HamanoJan 22, 2006
  3. Petr BaudisJan 22, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.