Code

git-filter-branch.sh: Allow running in bare repositories
authorPetr Baudis <pasky@suse.cz>
Wed, 23 Jul 2008 22:15:36 +0000 (00:15 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 23 Jul 2008 23:57:04 +0000 (16:57 -0700)
Commit 46eb449c restricted git-filter-branch to non-bare repositories
unnecessarily; git-filter-branch can work on bare repositories just
fine.

Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-filter-branch.sh
t/t7003-filter-branch.sh

index d04c346e12fb73539e9910951744e9d5558ad4d3..182822a24e214fe7e93a2df68fdda3dd40b5896d 100755 (executable)
@@ -97,9 +97,11 @@ USAGE="[--env-filter <command>] [--tree-filter <command>] \
 OPTIONS_SPEC=
 . git-sh-setup
 
-git diff-files --quiet &&
+if [ "$(is_bare_repository)" = false ]; then
+       git diff-files --quiet &&
        git diff-index --cached --quiet HEAD -- ||
        die "Cannot rewrite branch(es) with a dirty working directory."
+fi
 
 tempdir=.git-rewrite
 filter_env=
@@ -434,18 +436,20 @@ rm -rf "$tempdir"
 
 trap - 0
 
-unset GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE
-test -z "$ORIG_GIT_DIR" || {
-       GIT_DIR="$ORIG_GIT_DIR" && export GIT_DIR
-}
-test -z "$ORIG_GIT_WORK_TREE" || {
-       GIT_WORK_TREE="$ORIG_GIT_WORK_TREE" &&
-       export GIT_WORK_TREE
-}
-test -z "$ORIG_GIT_INDEX_FILE" || {
-       GIT_INDEX_FILE="$ORIG_GIT_INDEX_FILE" &&
-       export GIT_INDEX_FILE
-}
-git read-tree -u -m HEAD
+if [ "$(is_bare_repository)" = false ]; then
+       unset GIT_DIR GIT_WORK_TREE GIT_INDEX_FILE
+       test -z "$ORIG_GIT_DIR" || {
+               GIT_DIR="$ORIG_GIT_DIR" && export GIT_DIR
+       }
+       test -z "$ORIG_GIT_WORK_TREE" || {
+               GIT_WORK_TREE="$ORIG_GIT_WORK_TREE" &&
+               export GIT_WORK_TREE
+       }
+       test -z "$ORIG_GIT_INDEX_FILE" || {
+               GIT_INDEX_FILE="$ORIG_GIT_INDEX_FILE" &&
+               export GIT_INDEX_FILE
+       }
+       git read-tree -u -m HEAD
+fi
 
 exit $ret
index e26f72693071ae1037ccf739b6ba2bb63ce95a21..a0ab096c8fdee153a89a1428f85c9bf107badada 100755 (executable)
@@ -38,6 +38,14 @@ test_expect_success 'result is really identical' '
        test $H = $(git rev-parse HEAD)
 '
 
+test_expect_success 'rewrite bare repository identically' '
+       (git config core.bare true && cd .git && git-filter-branch branch)
+'
+git config core.bare false
+test_expect_success 'result is really identical' '
+       test $H = $(git rev-parse HEAD)
+'
+
 test_expect_success 'rewrite, renaming a specific file' '
        git-filter-branch -f --tree-filter "mv d doh || :" HEAD
 '