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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxx>
---


	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

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux