Merge git://git.kernel.org/pub/scm/gitk/gitk
[gitweb.git] / git-reset.sh
index e028ff65dba75699580d47fbbe3fa6825774af83..6cb073cb16f8b8d8b923bd0cd77be00da0e169e3 100755 (executable)
@@ -1,7 +1,9 @@
 #!/bin/sh
-. git-sh-setup || die "Not a git archive"
 
-tmp=/var/tmp/reset.$$
+USAGE='[--mixed | --soft | --hard]  [<commit-ish>]'
+. git-sh-setup
+
+tmp=${GIT_DIR}/reset.$$
 trap 'rm -f $tmp-*' 0 1 2 3 15
 
 reset_type=--mixed
@@ -10,6 +12,8 @@ case "$1" in
        reset_type="$1"
        shift
        ;;
+-*)
+        usage ;;
 esac
 
 rev=$(git-rev-parse --verify --default HEAD "$@") || exit
@@ -60,7 +64,7 @@ then
 else
        rm -f "$GIT_DIR/ORIG_HEAD"
 fi
-echo "$rev" >"$GIT_DIR/HEAD"
+git-update-ref HEAD "$rev"
 
 case "$reset_type" in
 --hard )
@@ -81,10 +85,15 @@ case "$reset_type" in
                while (<$fh>) {
                        chomp;
                        if (! exists $keep{$_}) {
-                               print "$_\0";
+                               # it is ok if this fails -- it may already
+                               # have been culled by checkout-index.
+                               unlink $_;
+                               while (s|/[^/]*$||) {
+                                       rmdir($_) or last;
+                               }
                        }
                }
-       ' $tmp-exists | xargs -0 rm -f --
+       ' $tmp-exists
        ;;
 --soft )
        ;; # Nothing else to do
@@ -94,4 +103,4 @@ case "$reset_type" in
        ;;
 esac
 
-rm -f "$GIT_DIR/MERGE_HEAD"
+rm -f "$GIT_DIR/MERGE_HEAD" "$GIT_DIR/rr-cache/MERGE_RR"