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