X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-reset.sh;h=6cb073cb16f8b8d8b923bd0cd77be00da0e169e3;hb=f527cb8c38964a90b1b13485f2ad46b72960d387;hp=04c1ac0fd2e9e147f89b92cdd831572d53bcfb88;hpb=215a7ad1ef790467a4cd3f0dcffbd6e5f04c38f7;p=git.git diff --git a/git-reset.sh b/git-reset.sh index 04c1ac0f..6cb073cb 100755 --- a/git-reset.sh +++ b/git-reset.sh @@ -1,7 +1,9 @@ #!/bin/sh -. git-sh-setup || die "Not a git archive" -tmp=/var/tmp/reset.$$ +USAGE='[--mixed | --soft | --hard] []' +. 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 -v -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"