Skip to contentSkip to conversation

Invoke "gc --auto" from git commit

PATCH In review Jean-Luc Herren 2 participants 4 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Invoke "gc --auto" from git commit

This feature was lost during the port of git commit to C.

---
 builtin-commit.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
builtin-commit.c +2 -0
index 591d16b..209805b 100644
@@ -947,6 +947,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
 	struct commit_list *parents = NULL, **pptr = &parents;
 	struct stat statbuf;
 	int allow_fast_forward = 1;
+	const char *argv_gc_auto[] = { "gc", "--auto", NULL };
 
 	git_config(git_commit_config, NULL);
 
@@ -1068,6 +1069,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
 		     "not exceeded, and then \"git reset HEAD\" to recover.");
 
 	rerere();
+	run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
 	run_hook(get_index_file(), "post-commit", NULL);
 	if (!quiet)
 		print_summary(prefix, commit_sha1);
Signature · 1 line
1.6.0.4
#2 lore raw
Quoted 4 lines · Johannes Schindelin
Quoted 1 line · Jean-Luc Herren

This feature was lost during the port of git commit to C.

See http://article.gmane.org/gmane.comp.version-control.git/82125

Oh, I missed that. But then the only commands ever invoking git gc --auto would be git rebase -i, git merge, git svn and git am. I don't know if some people have repositories where they never use any of those, but I certainly have repositories where I only ever use git rebase -i and never any of the other. 'git commit' is something everyone is bound to use and thus it would be the best place for running 'git gc --auto'.

As for the performance impact, on my machine 'git gc --auto' runs 500 times per second in a loop on the git repository (it won't call the hook unless repacking is necessary). I suppose any script calling git commit in a loop would do substantially more work than git gc --auto itself. And if that bit of performance really matters, it could be invoked by git commit only if (rand() % 20 == 0).

My two cents anyway.

jlh

#3 lore raw

Hi,

Quoted 3 lines · Jean-Luc Herren

As for the performance impact, on my machine 'git gc --auto' runs 500 times per second in a loop on the git repository (it won't call the hook unless repacking is necessary).

Ummm.

How many people do you think share your luck? git.git is _small_. Your machine is _fast_. It is the typical mistake in IT, not thinking about real-world cases...

Ciao,
Dscho