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

Re: Remove diff machinery dependency from read-cache

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Jan 22, 2010, 04:21 UTC
Message-ID
<alpine.LFD.2.00.1001212014481.13231@localhost.localdomain>
In-Reply-To
<7vvdeubxnh.fsf@alter.siamese.dyndns.org>
On Thu, 21 Jan 2010, Junio C Hamano wrote:
Show 17 quoted lines
> Nicolas Pitre <nico@fluxnic.net> writes:
> 
> > I do use it, but for developing/debugging pack stuff.  I don't suggest
> > removing it, but I don't think making it a built-in has value either.
> 
> I thought people _might_ have used it for satistics purposes, but it
> appears that the command doesn't even give in-pack size of objects nor
> delta chain length, so probably anybody doing pack statistics would be
> using "verify-pack -v" and wouldn't mind if it became test-show-index.
> 
> > So I really think that Linus' patch (which is missing hex.c btw) is a 
> > good thing to do, even if only for the cleanup value.
> >
> > Then, git-show-index could probably become test-show-index and no longer 
> > leave the build directory.
> 
> Yeah, I think that is a sensible long term plan, too.

Note that there are other totally trivial git programs like 'git-var' that have exactly the same issue as 'git-show-index'.

Same details: it doesn't really want any diff machinery, doesn't want any git object handling, but can't avoid it because it uses xmalloc (through environment.c and config.c etc), so a program that _should_ be pretty trivially small again ends up being 200+kB in size even without debug info (and almost a megabyte with it).

So here's another trivial builtin-ification patch.
		Linus
---
 Makefile               |    2 +-
 var.c => builtin-var.c |    4 +---
 builtin.h              |    1 +
 git.c                  |    1 +
 4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
index f9e4aa3..398b5fb 100644
--- a/Makefile
+++ b/Makefile
@@ -396,7 +396,6 @@ PROGRAMS += git-patch-id$X
 PROGRAMS += git-shell$X
 PROGRAMS += git-unpack-file$X
 PROGRAMS += git-upload-pack$X
-PROGRAMS += git-var$X
 PROGRAMS += git-http-backend$X
 
 # List built-in command $C whose implementation cmd_$C() is not in
@@ -703,6 +702,7 @@ BUILTIN_OBJS += builtin-update-index.o
 BUILTIN_OBJS += builtin-update-ref.o
 BUILTIN_OBJS += builtin-update-server-info.o
 BUILTIN_OBJS += builtin-upload-archive.o
+BUILTIN_OBJS += builtin-var.o
 BUILTIN_OBJS += builtin-verify-pack.o
 BUILTIN_OBJS += builtin-verify-tag.o
 BUILTIN_OBJS += builtin-write-tree.o
diff --git a/var.c b/builtin-var.c
similarity index 96%
rename from var.c
rename to builtin-var.c
index d9892f8..2280518 100644
--- a/var.c
+++ b/builtin-var.c
@@ -72,7 +72,7 @@ static int show_config(const char *var, const char *value, void *cb)
 	return git_default_config(var, value, cb);
 }
 
-int main(int argc, char **argv)
+int cmd_var(int argc, const char **argv, const char *prefix)
 {
 	const char *val;
 	int nongit;
@@ -80,8 +80,6 @@ int main(int argc, char **argv)
 		usage(var_usage);
 	}
 
-	git_extract_argv0_path(argv[0]);
-
 	setup_git_directory_gently(&nongit);
 	val = NULL;
 
diff --git a/builtin.h b/builtin.h
index 3aa6b6c..0c9c396 100644
--- a/builtin.h
+++ b/builtin.h
@@ -107,6 +107,7 @@ extern int cmd_update_ref(int argc, const char **argv, const char *prefix);
 extern int cmd_update_server_info(int argc, const char **argv, const char *prefix);
 extern int cmd_upload_archive(int argc, const char **argv, const char *prefix);
 extern int cmd_upload_tar(int argc, const char **argv, const char *prefix);
+extern int cmd_var(int argc, const char **argv, const char *prefix);
 extern int cmd_verify_tag(int argc, const char **argv, const char *prefix);
 extern int cmd_version(int argc, const char **argv, const char *prefix);
 extern int cmd_whatchanged(int argc, const char **argv, const char *prefix);
diff --git a/git.c b/git.c
index a952663..09d3272 100644
--- a/git.c
+++ b/git.c
@@ -373,6 +373,7 @@ static void handle_internal_command(int argc, const char **argv)
 		{ "update-ref", cmd_update_ref, RUN_SETUP },
 		{ "update-server-info", cmd_update_server_info, RUN_SETUP },
 		{ "upload-archive", cmd_upload_archive },
+		{ "var", cmd_var },
 		{ "verify-tag", cmd_verify_tag, RUN_SETUP },
 		{ "version", cmd_version },
 		{ "whatchanged", cmd_whatchanged, RUN_SETUP | USE_PAGER },
Previous: Junio C HamanoNext: Linus Torvalds
Message 20 of 23 in “Remove diff machinery dependency from read-cache”
  1. Linus TorvaldsJan 21, 2010
  2. Junio C HamanoJan 21, 2010
  3. Linus TorvaldsJan 21, 2010
  4. Linus TorvaldsJan 21, 2010
  5. Linus TorvaldsJan 21, 2010
  6. Junio C HamanoJan 22, 2010
  7. Johannes SchindelinJan 22, 2010
  8. Junio C HamanoJan 22, 2010
  9. Johannes SchindelinJan 22, 2010
  10. Junio C HamanoJan 22, 2010
  11. Linus TorvaldsJan 22, 2010
  12. Linus TorvaldsJan 22, 2010
  13. Linus TorvaldsJan 22, 2010
  14. Johannes SixtJan 22, 2010
  15. merge-tree: remove unnecessary call of git_extract_argv0_pathJohannes Sixt, Jan 22, 2010
  16. Linus TorvaldsJan 22, 2010
  17. Nicolas PitreJan 22, 2010
  18. Linus TorvaldsJan 22, 2010
  19. Junio C HamanoJan 22, 2010
  20. Linus TorvaldsJan 22, 2010
  21. Linus TorvaldsJan 22, 2010
  22. Linus TorvaldsJan 22, 2010
  23. Brian CampbellJan 23, 2010

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.