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

[PATCH] prune: heed --expire for stale packs, add a test

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Feb 5, 2008, 20:06 UTC
Message-ID
<alpine.LSU.1.00.0802052005200.8543@racer.site>
In-Reply-To
<alpine.LFD.1.00.0802051357420.2732@xanadu.home>

Follow the same logic as for loose objects when removing stale packs: they might be in use (for example when fetching, or repacking in a cron job), so give the user a chance to say (via --expire) what is considered too young an age to die for stale packs.

Also add a simple test to verify that the stale packs are actually expired.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
	On Tue, 5 Feb 2008, Nicolas Pitre wrote:
	> On Tue, 5 Feb 2008, David Steven Tweed wrote:
	> 
	> > @@ -115,5 +139,6 @@ int cmd_prune(int argc, const char **argv, 
	> > const char *prefix)
	> > 
	> >  	sync();
	> >  	prune_packed_objects(show_only);
	> > +	remove_temporary_files();
	> 
	> Maybe you could implement the "show_only" mode for 
	> remove_temporary_files() as well?  Otherwise the -n option would 
	> not be respected.
	> 
	> Also you should consider honoring the --expire option as well.
	How about this on top of David's patch?
 builtin-prune.c  |    9 ++++++++-
 t/t5304-prune.sh |   32 ++++++++++++++++++++++++++++++++
 2 files changed, 40 insertions(+), 1 deletions(-)
 create mode 100644 t/t5304-prune.sh
diff --git a/builtin-prune.c b/builtin-prune.c
index 9152984..d5a3b60 100644
--- a/builtin-prune.c
+++ b/builtin-prune.c
@@ -100,7 +100,14 @@ static void remove_temporary_files(void)
 		if (strncmp(de->d_name, "tmp_", 4) == 0) {
 			char name[4096];
 			sprintf(name, "%s/%s", dirname, de->d_name);
-			printf("Removing abandoned pack %s\n", name);
+			if (expire) {
+				struct stat st;
+				if (stat(name, &st) || st.st_mtime >= expire)
+					continue;
+			}
+			printf("Removing stale pack %s\n", name);
+			if (show_only)
+				continue;
 			unlink(name);
 		}
 	}
diff --git a/t/t5304-prune.sh b/t/t5304-prune.sh
new file mode 100644
index 0000000..6560af7
--- /dev/null
+++ b/t/t5304-prune.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+#
+# Copyright (c) 2008 Johannes E. Schindelin
+#
+
+test_description='prune'
+. ./test-lib.sh
+
+test_expect_success setup '
+
+	: > file &&
+	git add file &&
+	test_tick &&
+	git commit -m initial &&
+	git gc
+
+'
+
+test_expect_success 'prune stale packs' '
+
+	orig_pack=$(echo .git/objects/pack/*.pack) &&
+	: > .git/objects/tmp_1.pack &&
+	: > .git/objects/tmp_2.pack &&
+	test-chmtime -86501 .git/objects/tmp_1.pack &&
+	git prune --expire 1.day &&
+	test -f $orig_pack &&
+	test -f .git/objects/tmp_2.pack &&
+	! test -f .git/objects/tmp_1.pack
+
+'
+
+test_done
-- 
1.5.4.1230.g4ecf8
Previous: Nicolas PitreNext: Nicolas Pitre
Message 3 of 20 in “Make git prune remove temporary packs that look like write failures”
  1. Make git prune remove temporary packs that look like write failuresDavid Steven Tweed, Feb 5, 2008
  2. Nicolas PitreFeb 5, 2008
  3. prune: heed --expire for stale packs, add a testJohannes Schindelin, Feb 5, 2008
  4. Nicolas PitreFeb 5, 2008
  5. Junio C HamanoFeb 6, 2008
  6. Johannes SchindelinFeb 6, 2008
  7. Nicolas PitreFeb 6, 2008
  8. Junio C HamanoFeb 6, 2008
  9. Brandon CaseyFeb 6, 2008
  10. David TweedFeb 6, 2008
  11. Brandon CaseyFeb 6, 2008
  12. David TweedFeb 6, 2008
  13. Nicolas PitreFeb 6, 2008
  14. Brandon CaseyFeb 6, 2008
  15. David TweedFeb 6, 2008
  16. Nicolas PitreFeb 6, 2008
  17. David TweedFeb 6, 2008
  18. Nicolas PitreFeb 6, 2008
  19. David TweedFeb 6, 2008
  20. Junio C HamanoFeb 6, 2008

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.