threads / patch / 286

patchmake git-prune-script actually work

Subject: [PATCH] make git-prune-script actually work

## tl;dr

2 messages between Apr 24, 2005 and Apr 24, 2005. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

James Bottomley· Apr 24, 2005, 13:58 UTC · lore

I find this script very useful to get back to where I started from after test merges, and also for cloning trees from a non-current base. The functionality is altered so it now takes an optional commit argument (and a -q flag to make it be quiet).

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Show changes to git-prune-script +22 −1
--- a/git-prune-script
+++ b/git-prune-script
@@ -1,2 +1,23 @@
 #!/bin/sh
-fsck-cache --unreachable $(cat .git/HEAD ) | grep unreachable | cut -d' ' -f3 | sed 's:^\(..\):.git/objects/\1/:' | xargs rm
+verbose=true
+case $1 in 
+	-q)	verbose=false
+		shift;;
+esac
+head=$1
+if [ -z "$head" ]; then
+	head=$(cat .git/HEAD)
+fi
+f=$(fsck-cache --unreachable $head | awk '/^unreachable /{print $3}'| sed 's:^\(..\):.git/objects/\1/:')
+if [ -z "$f" ]; then
+	echo "Nothing to remove"
+	exit 0
+fi
+
+for g in $f; do
+	if $verbose; then
+		echo $g
+	fi
+	rm -f $g
+done
+echo $head > .git/HEAD
Linus Torvalds· Apr 24, 2005, 17:35 UTC · re: James Bottomley · lore

Re: [PATCH] make git-prune-script actually work

On Sun, 24 Apr 2005, James Bottomley wrote:
Show 5 quoted lines
>
> I find this script very useful to get back to where I started from after
> test merges, and also for cloning trees from a non-current base.  The
> functionality is altered so it now takes an optional commit argument
> (and a -q flag to make it be quiet).

Hmm.. You should probably rename it to "git-reset-script" or something, and any time you reset the head, you should also amke sure to reset the index, because otherwise your index file may actually be referencing objects that no longer even exist, and that's going to be very very painful.

So
> +echo $head > .git/HEAD
should probably be followed by
	read-tree -m $head
	update-cache --refresh

which will also tell the user what files he has that are now "dirty" (and he can decide whether he wants to commit his changes, or whether he wants to do a "checkout-cache -f -a" to just get rid of it all).

		Linus

← back to recent threads