git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] filter-branch -d: Export GIT_DIR earlier
@ 2009-02-17  8:31 Lars Noschinski
  2009-02-17  8:53 ` Lars Noschinski
  2009-02-17 12:44 ` Johannes Schindelin
  0 siblings, 2 replies; 10+ messages in thread
From: Lars Noschinski @ 2009-02-17  8:31 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

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).
---

The tests copies backup-ref into another directory and checks
that it contains a branch from the rewritten repository.

  git-filter-branch.sh     |   12 ++++++------
  t/t7003-filter-branch.sh |    9 +++++++++
  2 files changed, 15 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
diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh
index 56b5ecc..446700b 100755
--- a/t/t7003-filter-branch.sh
+++ b/t/t7003-filter-branch.sh
@@ -48,6 +48,15 @@ test_expect_success 'result is really identical' '
  	test $H = $(git rev-parse HEAD)
  '
  
+TRASHDIR=$(pwd)
+test_expect_success 'correct GIT_DIR while using -d' '
+        mkdir drepo && cd drepo && git init && make_commit drepo &&
+        git filter-branch -d "$TRASHDIR/dfoo" \
+            --index-filter "cp \"$TRASHDIR\"/dfoo/backup-refs \"$TRASHDIR\"" &&
+        cd .. &&
+        grep drepo "$TRASHDIR/backup-refs"
+'
+
  test_expect_success 'Fail if commit filter fails' '
  	test_must_fail git filter-branch -f --commit-filter "exit 1" HEAD
  '
-- 
1.6.1.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] filter-branch -d: Export GIT_DIR earlier
  2009-02-17  8:31 [PATCH v2] filter-branch -d: Export GIT_DIR earlier Lars Noschinski
@ 2009-02-17  8:53 ` Lars Noschinski
  2009-02-17 12:44 ` Johannes Schindelin
  1 sibling, 0 replies; 10+ messages in thread
From: Lars Noschinski @ 2009-02-17  8:53 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

* Lars Noschinski <lars@public.noschinski.de> [09-02-17 09:31]:
>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).

Ops, forgot the

Signed-off-by: Lars Noschinski <lars@public.noschinski.de>

Feel free to add it. I can also resend the patch.

   - Lars

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] filter-branch -d: Export GIT_DIR earlier
  2009-02-17  8:31 [PATCH v2] filter-branch -d: Export GIT_DIR earlier Lars Noschinski
  2009-02-17  8:53 ` Lars Noschinski
@ 2009-02-17 12:44 ` Johannes Schindelin
  2009-02-17 17:59   ` Lars Noschinski
  1 sibling, 1 reply; 10+ messages in thread
From: Johannes Schindelin @ 2009-02-17 12:44 UTC (permalink / raw)
  To: Lars Noschinski; +Cc: git

Hi,

On Tue, 17 Feb 2009, Lars Noschinski wrote:

> 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 could be written as

	$ cd .git
	$ git filter-branch -d /tmp/bla master

Right?

	
>  git-filter-branch.sh     |   12 ++++++------
>  t/t7003-filter-branch.sh |    9 +++++++++
>  2 files changed, 15 insertions(+), 6 deletions(-)

Funny, git am -3 reports:

	Did you hand edit your patch?
	It does not apply to blobs recorded in its index.
	Cannot fall back to three-way merge.

After realizing that the common lines were prefixed with a double space, 
and applying my l33t patch m0nkey ski77z, I could verify that it works as 
expected (in addition to looking at the patch and deeming it correct).

> diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh
> index 56b5ecc..446700b 100755
> --- a/t/t7003-filter-branch.sh
> +++ b/t/t7003-filter-branch.sh
> @@ -48,6 +48,15 @@ test_expect_success 'result is really identical' '
>  	test $H = $(git rev-parse HEAD)
>  '
>  
> +TRASHDIR=$(pwd)
> +test_expect_success 'correct GIT_DIR while using -d' '
> +        mkdir drepo && cd drepo && git init && make_commit drepo &&

I usually prefer those to be on one line, each.

> +        git filter-branch -d "$TRASHDIR/dfoo" \
> +            --index-filter "cp \"$TRASHDIR\"/dfoo/backup-refs \"$TRASHDIR\""
> &&
> +        cd .. &&

We try to avoid cd'ing back, by using constructs like this:

	(cd drepo &&
	 ...
	) &&

After those two (maybe three) changes and your SOB: ACK.

BTW the reason I wanted to test this thing is that I suspected that you 
meant test_commit instead of make_commit.  But then, I realized that there 
exists a make_commit in t7003... which shares the shortcoming of our 
previous implementation of test_commit in that it adds ambiguities on 
case-insensitive filesystems.

So I _had_ to look who introduced make_commit:

	$ git blame -L '/make_commit/,/}/' t/t7003*

Making a fool out of yourself -- priceless.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] filter-branch -d: Export GIT_DIR earlier
  2009-02-17 12:44 ` Johannes Schindelin
@ 2009-02-17 17:59   ` Lars Noschinski
  2009-02-17 18:05     ` [PATCH v3] " Lars Noschinski
  2009-02-17 23:01     ` [PATCH v2] " Johannes Schindelin
  0 siblings, 2 replies; 10+ messages in thread
From: Lars Noschinski @ 2009-02-17 17:59 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

* Johannes Schindelin <Johannes.Schindelin@gmx.de> [09-02-17 16:08]:
>On Tue, 17 Feb 2009, Lars Noschinski wrote:
>> 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 could be written as
>
>	$ cd .git
>	$ git filter-branch -d /tmp/bla master

Does not work, as we get another (slightly misleading) error message:

/tmp/foo/.git$ git filter-branch -d /tmp/bar master
fatal: This operation must be run in a work tree
Cannot rewrite branch(es) with a dirty working directory.

But we do not need a bare repository at all to demonstrate this bug, so
we can skip even the 'cd .git'.

>Funny, git am -3 reports:
>
>	Did you hand edit your patch?
>	It does not apply to blobs recorded in its index.
>	Cannot fall back to three-way merge.

Hm, for some reason, format=flowed was enabled. I wonder, that it has
not bitten me earlier.

>We try to avoid cd'ing back, by using constructs like this:
>
>	(cd drepo &&
>	 ...
>	) &&

Ok, can do.

>After those two (maybe three) changes and your SOB: ACK.
>
>BTW the reason I wanted to test this thing is that I suspected that you 
>meant test_commit instead of make_commit.  But then, I realized that there 
>exists a make_commit in t7003... which shares the shortcoming of our 
>previous implementation of test_commit in that it adds ambiguities on 
>case-insensitive filesystems.

Yeah, I used make_commit to stay consistent with the rest of the file.
I'll change it to test_commit. I think as it does not bite us, it would
be unnecessary code churn to remove the remaining usage of make_commit?

>So I _had_ to look who introduced make_commit:
>
>	$ git blame -L '/make_commit/,/}/' t/t7003*
>
>Making a fool out of yourself -- priceless.

:)

  - Lars.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3] filter-branch -d: Export GIT_DIR earlier
  2009-02-17 17:59   ` Lars Noschinski
@ 2009-02-17 18:05     ` Lars Noschinski
  2009-02-17 23:03       ` Johannes Schindelin
  2009-02-17 23:01     ` [PATCH v2] " Johannes Schindelin
  1 sibling, 1 reply; 10+ messages in thread
From: Lars Noschinski @ 2009-02-17 18:05 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

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
$ 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).

Signed-off-by: Lars Noschinski <lars@public.noschinski.de>
---
  git-filter-branch.sh     |   12 ++++++------
  t/t7003-filter-branch.sh |   12 ++++++++++++
  2 files changed, 18 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
diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh
index 56b5ecc..329c851 100755
--- a/t/t7003-filter-branch.sh
+++ b/t/t7003-filter-branch.sh
@@ -48,6 +48,18 @@ test_expect_success 'result is really identical' '
  	test $H = $(git rev-parse HEAD)
  '
  
+TRASHDIR=$(pwd)
+test_expect_success 'correct GIT_DIR while using -d' '
+	mkdir drepo &&
+	( cd drepo &&
+	git init &&
+	test_commit drepo &&
+	git filter-branch -d "$TRASHDIR/dfoo" \
+		--index-filter "cp \"$TRASHDIR\"/dfoo/backup-refs \"$TRASHDIR\"" \
+	) &&
+	grep drepo "$TRASHDIR/backup-refs"
+'
+
  test_expect_success 'Fail if commit filter fails' '
  	test_must_fail git filter-branch -f --commit-filter "exit 1" HEAD
  '
-- 
1.6.2.rc0.91.g0bb0.dirty

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] filter-branch -d: Export GIT_DIR earlier
  2009-02-17 17:59   ` Lars Noschinski
  2009-02-17 18:05     ` [PATCH v3] " Lars Noschinski
@ 2009-02-17 23:01     ` Johannes Schindelin
  1 sibling, 0 replies; 10+ messages in thread
From: Johannes Schindelin @ 2009-02-17 23:01 UTC (permalink / raw)
  To: Lars Noschinski; +Cc: git

Hi,

On Tue, 17 Feb 2009, Lars Noschinski wrote:

> I'll change [make_commit] to test_commit.

Oops, sorry, I actually was not trying to suggest that, but relate a story 
that I found funny ;-)

> I think as it does not bite us, it would be unnecessary code churn to 
> remove the remaining usage of make_commit?

Probably.  I mean, every cleanup bears a very real possibility of 
introducing a regression, so it better be worth it.  As t7003 seems to 
work on (case) insensitive filesystems, let's leave it.

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v3] filter-branch -d: Export GIT_DIR earlier
  2009-02-17 18:05     ` [PATCH v3] " Lars Noschinski
@ 2009-02-17 23:03       ` Johannes Schindelin
  2009-02-18  8:35         ` [PATCH v4] " Lars Noschinski
  0 siblings, 1 reply; 10+ messages in thread
From: Johannes Schindelin @ 2009-02-17 23:03 UTC (permalink / raw)
  To: Lars Noschinski; +Cc: git

Hi,

On Tue, 17 Feb 2009, Lars Noschinski wrote:

> 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
> $ 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).
> 
> Signed-off-by: Lars Noschinski <lars@public.noschinski.de>
> ---

Let me quickly add my ACK before Junio can apply the patch without it.  
(Even I had the impression that you wanted to trim down the commit 
message, but it really does not matter to me all that much.)

Ciao,
Dscho

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4] filter-branch -d: Export GIT_DIR earlier
  2009-02-17 23:03       ` Johannes Schindelin
@ 2009-02-18  8:35         ` Lars Noschinski
  2009-02-18 10:25           ` Johannes Schindelin
  0 siblings, 1 reply; 10+ messages in thread
From: Lars Noschinski @ 2009-02-18  8:35 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

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

$ git filter-branch -d /tmp/foo 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).

Signed-off-by: Lars Noschinski <lars@public.noschinski.de>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
---

Last iteration :)

 git-filter-branch.sh     |   12 ++++++------
 t/t7003-filter-branch.sh |   12 ++++++++++++
 2 files changed, 18 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
diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh
index 56b5ecc..329c851 100755
--- a/t/t7003-filter-branch.sh
+++ b/t/t7003-filter-branch.sh
@@ -48,6 +48,18 @@ test_expect_success 'result is really identical' '
 	test $H = $(git rev-parse HEAD)
 '
 
+TRASHDIR=$(pwd)
+test_expect_success 'correct GIT_DIR while using -d' '
+	mkdir drepo &&
+	( cd drepo &&
+	git init &&
+	test_commit drepo &&
+	git filter-branch -d "$TRASHDIR/dfoo" \
+		--index-filter "cp \"$TRASHDIR\"/dfoo/backup-refs \"$TRASHDIR\"" \
+	) &&
+	grep drepo "$TRASHDIR/backup-refs"
+'
+
 test_expect_success 'Fail if commit filter fails' '
 	test_must_fail git filter-branch -f --commit-filter "exit 1" HEAD
 '
-- 
1.6.1.3

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v4] filter-branch -d: Export GIT_DIR earlier
  2009-02-18  8:35         ` [PATCH v4] " Lars Noschinski
@ 2009-02-18 10:25           ` Johannes Schindelin
  2009-02-19  0:53             ` Junio C Hamano
  0 siblings, 1 reply; 10+ messages in thread
From: Johannes Schindelin @ 2009-02-18 10:25 UTC (permalink / raw)
  To: Lars Noschinski; +Cc: git

Hi,

On Wed, 18 Feb 2009, Lars Noschinski wrote:

> The improved error handling catches a bug in filter-branch when using
> -d pointing to a path outside any git repository:
> 
> $ git filter-branch -d /tmp/foo 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).
> 
> Signed-off-by: Lars Noschinski <lars@public.noschinski.de>
> Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
> ---
> 
> Last iteration :)

Yep, I like it.

Thanks,
Dscho

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v4] filter-branch -d: Export GIT_DIR earlier
  2009-02-18 10:25           ` Johannes Schindelin
@ 2009-02-19  0:53             ` Junio C Hamano
  0 siblings, 0 replies; 10+ messages in thread
From: Junio C Hamano @ 2009-02-19  0:53 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Lars Noschinski, git

Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:

>> Last iteration :)
>
> Yep, I like it.

Thanks.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2009-02-19  0:55 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-17  8:31 [PATCH v2] filter-branch -d: Export GIT_DIR earlier Lars Noschinski
2009-02-17  8:53 ` Lars Noschinski
2009-02-17 12:44 ` Johannes Schindelin
2009-02-17 17:59   ` Lars Noschinski
2009-02-17 18:05     ` [PATCH v3] " Lars Noschinski
2009-02-17 23:03       ` Johannes Schindelin
2009-02-18  8:35         ` [PATCH v4] " Lars Noschinski
2009-02-18 10:25           ` Johannes Schindelin
2009-02-19  0:53             ` Junio C Hamano
2009-02-17 23:01     ` [PATCH v2] " Johannes Schindelin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).