git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] filter-branch -d: Export GIT_DIR earlier

From
Lars Noschinski <lars@public.noschinski.de>
Date
Feb 16, 2009, 13:09 UTC
Message-ID
<20090216130951.GA3769@lars.home.noschinski.de>

The improved error handling catches a bug in filter-branch when using -d pointing to a path outside any git repository:

$ mkdir foo $ cd foo $ git init $ touch bar $ git add bar $ git commit -m bar $ cd .. $ git clone --bare foo $ cd foo.git $ git filter-branch -d /tmp/filter master fatal: Not a git repository (or any of the parent directories): .git

This error message comes from git for-each-ref in line 224. GIT_DIR is set correctly by git-sh-setup (to the foo.git repository), but not exported (yet). ---

This fix is not yet ready for commit, as it lacks a test case.

Writing a test case for this bug, I wonder about the preferred way to use a directory outside any git repository in a test: Using some directory below git/t/ will not work, as (in most cases) git is a git repository.

Using the system's temp directory via mktemp() or so directory would work most of the time - but not always. Any ideas?

  - Lars.
  git-filter-branch.sh |   12 ++++++------
  1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 27b57b8..9a09ba1 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -220,6 +220,12 @@ die ""
  # Remove tempdir on exit
  trap 'cd ../..; rm -rf "$tempdir"' 0
  
+ORIG_GIT_DIR="$GIT_DIR"
+ORIG_GIT_WORK_TREE="$GIT_WORK_TREE"
+ORIG_GIT_INDEX_FILE="$GIT_INDEX_FILE"
+GIT_WORK_TREE=.
+export GIT_DIR GIT_WORK_TREE
+
  # Make sure refs/original is empty
  git for-each-ref > "$tempdir"/backup-refs || exit
  while read sha1 type name
@@ -234,12 +240,6 @@ do
  	esac
  done < "$tempdir"/backup-refs
  
-ORIG_GIT_DIR="$GIT_DIR"
-ORIG_GIT_WORK_TREE="$GIT_WORK_TREE"
-ORIG_GIT_INDEX_FILE="$GIT_INDEX_FILE"
-GIT_WORK_TREE=.
-export GIT_DIR GIT_WORK_TREE
-
  # The refs should be updated if their heads were rewritten
  git rev-parse --no-flags --revs-only --symbolic-full-name \
  	--default HEAD "$@" > "$tempdir"/raw-heads || exit
-- 
1.6.2.rc0.90.g0753.dirty
Next: Johannes Schindelin
Message 1 of 5 in “filter-branch -d: Export GIT_DIR earlier”
  1. filter-branch -d: Export GIT_DIR earlierLars Noschinski, Feb 16, 2009
  2. Johannes SchindelinFeb 16, 2009
  3. Lars NoschinskiFeb 16, 2009
  4. Johannes SchindelinFeb 16, 2009
  5. Lars NoschinskiFeb 17, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.