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

[PATCH] Fix git svn dcommit to work with touched files

From
David D. Kilzer <ddkilzer@kilzer.net>
Date
Aug 2, 2010, 19:58 UTC
Message-ID
<1280779099-29742-1-git-send-email-ddkilzer@kilzer.net>

The dcommit command fails if an otherwise unmodified file has been touched in the working directory:

    Cannot dcommit with a dirty index.  Commit your changes
    first, or stash them with `git stash'.

This happens because "git diff-index" reports a difference between the index and the filesystem:

    :100644 100644 d00491...... 000000...... M      file

The fix is to run "git update-index --refresh" before "git diff-index" as is done in git-rebase and git-rebase--interactive before "git diff-files".

This changes dcommit to display a list of modified files before exiting.

Also add a similar test case for "git svn rebase".
Signed-off-by: David D. Kilzer <ddkilzer@kilzer.net>
---
 git-svn.perl             |    1 +
 t/t9100-git-svn-basic.sh |   11 +++++++++++
 2 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/git-svn.perl b/git-svn.perl
index c416358..b8a98d4 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -494,6 +494,7 @@ sub cmd_set_tree {
 
 sub cmd_dcommit {
 	my $head = shift;
+	command_noisy(qw/update-index --refresh/);
 	git_cmd_try { command_oneline(qw/diff-index --quiet HEAD/) }
 		'Cannot dcommit with a dirty index.  Commit your changes first, '
 		. "or stash them with `git stash'.\n";
diff --git a/t/t9100-git-svn-basic.sh b/t/t9100-git-svn-basic.sh
index 13766ab..d5adae6 100755
--- a/t/t9100-git-svn-basic.sh
+++ b/t/t9100-git-svn-basic.sh
@@ -271,6 +271,17 @@ test_expect_success 'able to dcommit to a subdirectory' "
 	test -z \"\`git diff refs/heads/my-bar refs/remotes/bar\`\"
 	"
 
+test_expect_success 'dcommit should not fail with a touched file' '
+	test_commit "commit-new-file-foo2" foo2 &&
+	test-chmtime =-60 foo &&
+	git svn dcommit
+'
+
+test_expect_success 'rebase should not fail with a touched file' '
+	test-chmtime =-60 foo &&
+	git svn rebase
+'
+
 test_expect_success 'able to set-tree to a subdirectory' "
 	echo cba > d &&
 	git update-index d &&
-- 
1.7.2.1.9.g74fb9
Next: Eric Wong
Message 1 of 2 in “Fix git svn dcommit to work with touched files”
  1. Fix git svn dcommit to work with touched filesDavid D. Kilzer, Aug 2, 2010
  2. Eric WongAug 2, 2010

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.