git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Cannot rewrite branch(es) with a dirty working directory
@ 2011-09-01 15:52 James Blackburn
  2011-09-01 17:14 ` Matthieu Moy
  0 siblings, 1 reply; 5+ messages in thread
From: James Blackburn @ 2011-09-01 15:52 UTC (permalink / raw)
  To: git

Hi All,

I get a spurious:
"Cannot rewrite branch(es) with a dirty working directory."
trying to filter-branch in a clean git repo (having done a reset). The
error disappears when I do git status.

Log of the shell commands:
bash:jamesb:xl-cbga-20:33083> mkdir org.eclipse.cdt.core.linux.ia64
bash:jamesb:xl-cbga-20:33084> cp -r
../../../CDT_HEAD_GIT/org.eclipse.cdt/.git
org.eclipse.cdt.core.linux.ia64/
bash:jamesb:xl-cbga-20:33085> cd org.eclipse.cdt.core.linux.ia64/
mbash:jamesb:xl-cbga-20:33086> git reset --hard
Checking out files: 100% (11879/11879), done.
HEAD is now at a03d454 Build against a local mirror of the 3.7 p2 repo
bash:jamesb:xl-cbga-20:33087> git filter-branch --subdirectory-filter
core/org.eclipse.cdt.core.linux.ia64 -- master
Cannot rewrite branch(es) with a dirty working directory.
bash:jamesb:xl-cbga-20:33088> git status
# On branch master
nothing to commit (working directory clean)
bash:jamesb:xl-cbga-20:33089> git filter-branch --subdirectory-filter
core/org.eclipse.cdt.core.linux.ia64 -- master
Rewrite d7092b12c93925f6f7c4725a5abc72e55650621c (16/16)
Ref 'refs/heads/master' was rewritten
bash:jamesb:xl-cbga-20:33090> git --version
git version 1.7.3.2

Is there a particular reason why filter-branch thinks the tree is
dirty, and status magically fixes this?

Cheers,
James

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

* Re: Cannot rewrite branch(es) with a dirty working directory
  2011-09-01 15:52 Cannot rewrite branch(es) with a dirty working directory James Blackburn
@ 2011-09-01 17:14 ` Matthieu Moy
  2011-09-01 21:50   ` Jeff King
  0 siblings, 1 reply; 5+ messages in thread
From: Matthieu Moy @ 2011-09-01 17:14 UTC (permalink / raw)
  To: James Blackburn; +Cc: git

James Blackburn <jamesblackburn@gmail.com> writes:

> Is there a particular reason why filter-branch thinks the tree is
> dirty,

No idea. It comes after a "git reset --hard", so it's supposed to be
clean.

> and status magically fixes this?

The index is considered dirty if the stat information (timestamp) is
different. "git status" updates the stat-cache to consider unmodified
content as up-to-date. So, it's normal that a "git status" repairs the
dirty index.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

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

* Re: Cannot rewrite branch(es) with a dirty working directory
  2011-09-01 17:14 ` Matthieu Moy
@ 2011-09-01 21:50   ` Jeff King
  2011-09-01 21:53     ` Jeff King
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff King @ 2011-09-01 21:50 UTC (permalink / raw)
  To: Matthieu Moy; +Cc: James Blackburn, git

On Thu, Sep 01, 2011 at 07:14:30PM +0200, Matthieu Moy wrote:

> James Blackburn <jamesblackburn@gmail.com> writes:
> 
> > Is there a particular reason why filter-branch thinks the tree is
> > dirty,
> 
> No idea. It comes after a "git reset --hard", so it's supposed to be
> clean.

I wonder if there are racily clean entries[1] in the index, and
diff-index reports them as potential changes.

At any rate, filter-branch should probably be refreshing the index
before checking for dirtiness, which would give the correct answer
either way.

-Peff

[1] See Documentation/technical/racy-git.txt for more information.

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

* Re: Cannot rewrite branch(es) with a dirty working directory
  2011-09-01 21:50   ` Jeff King
@ 2011-09-01 21:53     ` Jeff King
  2011-09-02  5:52       ` Matthieu Moy
  0 siblings, 1 reply; 5+ messages in thread
From: Jeff King @ 2011-09-01 21:53 UTC (permalink / raw)
  To: Matthieu Moy; +Cc: Junio C Hamano, James Blackburn, git

On Thu, Sep 01, 2011 at 05:50:03PM -0400, Jeff King wrote:

> > No idea. It comes after a "git reset --hard", so it's supposed to be
> > clean.
> 
> I wonder if there are racily clean entries[1] in the index, and
> diff-index reports them as potential changes.
> 
> At any rate, filter-branch should probably be refreshing the index
> before checking for dirtiness, which would give the correct answer
> either way.

Actually, we've already factored this logic out, so let's use it.

-- >8 --
Subject: filter-branch: use require_clean_work_tree

Filter-branch already requires that we have a clean work
tree before starting. However, it failed to refresh the
index before checking, which means it could be wrong in the
case of stat-dirtiness.

Instead of simply adding a call to refresh the index, let's
switch to using the require_clean_work_tree function
provided by git-sh-setup. It does exactly what we want, and
with fewer lines of code and more specific output messages.

Signed-off-by: Jeff King <peff@peff.net>
---
 git-filter-branch.sh |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 804a7f4..add2c02 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -108,9 +108,7 @@ OPTIONS_SPEC=
 . git-sh-setup
 
 if [ "$(is_bare_repository)" = false ]; then
-	git diff-files --ignore-submodules --quiet &&
-	git diff-index --cached --quiet HEAD -- ||
-	die "Cannot rewrite branch(es) with a dirty working directory."
+	require_clean_work_tree 'rewrite branches'
 fi
 
 tempdir=.git-rewrite
-- 
1.7.6.10.g62f04

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

* Re: Cannot rewrite branch(es) with a dirty working directory
  2011-09-01 21:53     ` Jeff King
@ 2011-09-02  5:52       ` Matthieu Moy
  0 siblings, 0 replies; 5+ messages in thread
From: Matthieu Moy @ 2011-09-02  5:52 UTC (permalink / raw)
  To: Jeff King; +Cc: Junio C Hamano, James Blackburn, git

Jeff King <peff@peff.net> writes:

> --- a/git-filter-branch.sh
> +++ b/git-filter-branch.sh
> @@ -108,9 +108,7 @@ OPTIONS_SPEC=
>  . git-sh-setup
>  
>  if [ "$(is_bare_repository)" = false ]; then
> -	git diff-files --ignore-submodules --quiet &&
> -	git diff-index --cached --quiet HEAD -- ||
> -	die "Cannot rewrite branch(es) with a dirty working directory."
> +	require_clean_work_tree 'rewrite branches'
>  fi
>  
>  tempdir=.git-rewrite

Sounds good, yes.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

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

end of thread, other threads:[~2011-09-02  5:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-01 15:52 Cannot rewrite branch(es) with a dirty working directory James Blackburn
2011-09-01 17:14 ` Matthieu Moy
2011-09-01 21:50   ` Jeff King
2011-09-01 21:53     ` Jeff King
2011-09-02  5:52       ` Matthieu Moy

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