[PATCH] filter-branch: do not consider diverging submodules a 'dirty worktree'

Subsystems: the rest

STALE3757d

4 messages, 3 authors, 2016-06-15 · open the first message on its own page

[PATCH] filter-branch: do not consider diverging submodules a 'dirty worktree'

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:46:05

As filter-branch could not care less about submodules' actual contents,
it does not make sense to check if the checked-out submodules are
up-to-date before running filter-branch.  So do not do it.

Signed-off-by: Johannes Schindelin <redacted>
---
 git-filter-branch.sh |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 8cbce4e..066f9c3 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -108,8 +108,8 @@ OPTIONS_SPEC=
 . git-sh-setup
 
 if [ "$(is_bare_repository)" = false ]; then
-	git diff-files --quiet &&
-	git diff-index --cached --quiet HEAD -- ||
+	git diff-files --ignore-submodules --quiet &&
+	git diff-index --ignore-submodules --cached --quiet HEAD -- ||
 	die "Cannot rewrite branch(es) with a dirty working directory."
 fi
 
-- 
1.6.1.2.582.g3fdd5

Re: [PATCH] filter-branch: do not consider diverging submodules a 'dirty worktree'

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:46:05

Johannes Schindelin [off-list ref] writes:
As filter-branch could not care less about submodules' actual contents,
it does not make sense to check if the checked-out submodules are
up-to-date before running filter-branch.  So do not do it.
Sorry, but I am confused.  Is that because even the tree-filter does not
use the actual work tree but works in the temporary area .git-rewrite, and
a diverged submodule cannot possibly matter (and index-filter works solely
on the index anyway)?

If so, why do we even check dirtiness of anything at all?

This is not a "wouldn't this better?" proposal patch, but a "why isn't the
patch like this?" question patch.

 git-filter-branch.sh |    6 ------
 1 files changed, 0 insertions(+), 6 deletions(-)
diff --git i/git-filter-branch.sh w/git-filter-branch.sh
index eb62f71..dda32e0 100755
--- i/git-filter-branch.sh
+++ w/git-filter-branch.sh
@@ -107,12 +107,6 @@ USAGE="[--env-filter <command>] [--tree-filter <command>] \
 OPTIONS_SPEC=
 . git-sh-setup
 
-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=
 filter_tree=

Re: [PATCH] filter-branch: do not consider diverging submodules a 'dirty worktree'

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:46:05

Hi,

On Wed, 4 Feb 2009, Junio C Hamano wrote:
Johannes Schindelin [off-list ref] writes:
quoted
As filter-branch could not care less about submodules' actual 
contents, it does not make sense to check if the checked-out 
submodules are up-to-date before running filter-branch.  So do not do 
it.
Sorry, but I am confused.  Is that because even the tree-filter does not 
use the actual work tree but works in the temporary area .git-rewrite, 
and a diverged submodule cannot possibly matter (and index-filter works 
solely on the index anyway)?

If so, why do we even check dirtiness of anything at all?
I guess it is because we could update the working directory with read-tree 
-u -m HEAD at the end.  Actually, that is exactly what we do.

Submodules do not matter much here, as nothing will be overwritten, 
really, but a dirty working directory matters.

Ciao,
Dscho

Re: [PATCH] filter-branch: do not consider diverging submodules a 'dirty worktree'

From: Johannes Sixt <hidden>
Date: 2016-06-15 22:46:06

Junio C Hamano schrieb:
quoted hunk
If so, why do we even check dirtiness of anything at all?

This is not a "wouldn't this better?" proposal patch, but a "why isn't the
patch like this?" question patch.

 git-filter-branch.sh |    6 ------
 1 files changed, 0 insertions(+), 6 deletions(-)
diff --git i/git-filter-branch.sh w/git-filter-branch.sh
index eb62f71..dda32e0 100755
--- i/git-filter-branch.sh
+++ w/git-filter-branch.sh
@@ -107,12 +107,6 @@ USAGE="[--env-filter <command>] [--tree-filter <command>] \
 OPTIONS_SPEC=
 . git-sh-setup
 
-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=
 filter_tree=
Because if the repository is non-bare, then filter-branch updates the
work-tree at the end of the run; we don't want to overwrite uncommitted
work in this case.

This behavior is a relic from cg-admin-rewritehist, I think. I've never
found it useful.

-- Hannes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help