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

[PATCH v2] difftool --dir-diff: always use identical working tree file

From
Kenichi Saita <nitoyon@gmail.com>
Date
May 27, 2013, 15:31 UTC
Message-ID
<1369668697-1016-1-git-send-email-nitoyon@gmail.com>
In-Reply-To
<20130526154429.GK27005@serenity.lan>

When deciding whether or not we should link a working tree file into the temporary right-hand directory for a directory diff, we currently behave differently in the --symlink and --no-symlink cases. If using symlinks any identical files are linked across but with --no-symlink only files that contain unstaged changes are copied back into the working tree.

Change this so that identical files are copied back as well. This is beneficial because it widens the set of circumstances in which we copy changes made by the user back into the working tree.

Signed-off-by: Kenichi Saita <nitoyon@gmail.com>
---
 git-difftool.perl   |    9 ++-------
 t/t7800-difftool.sh |   19 +++++++++++++++++++
 2 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/git-difftool.perl b/git-difftool.perl
index 8a75205..e57d3d1 100755
--- a/git-difftool.perl
+++ b/git-difftool.perl
@@ -85,13 +85,9 @@ sub exit_cleanup
 
 sub use_wt_file
 {
-	my ($repo, $workdir, $file, $sha1, $symlinks) = @_;
+	my ($repo, $workdir, $file, $sha1) = @_;
 	my $null_sha1 = '0' x 40;
 
-	if ($sha1 ne $null_sha1 and not $symlinks) {
-		return 0;
-	}
-
 	if (! -e "$workdir/$file") {
 		# If the file doesn't exist in the working tree, we cannot
 		# use it.
@@ -213,8 +209,7 @@ EOF
 
 		if ($rmode ne $null_mode) {
 			my ($use, $wt_sha1) = use_wt_file($repo, $workdir,
-							  $dst_path, $rsha1,
-							  $symlinks);
+							  $dst_path, $rsha1);
 			if ($use) {
 				push @working_tree, $dst_path;
 				$wtindex .= "$rmode $wt_sha1\t$dst_path\0";
diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
index d46f041..2418528 100755
--- a/t/t7800-difftool.sh
+++ b/t/t7800-difftool.sh
@@ -385,6 +385,25 @@ test_expect_success PERL,SYMLINKS 'difftool --dir-diff --symlink without unstage
 	test_cmp actual expect
 '
 
+write_script modify-right-file <<\EOF
+echo "new content" >"$2/file"
+EOF
+
+run_dir_diff_test 'difftool --dir-diff syncs worktree with unstaged change' '
+	test_when_finished git reset --hard &&
+	echo "orig content" >file &&
+	git difftool -d $symlinks --extcmd "$(pwd)/modify-right-file" branch &&
+	echo "new content" >expect &&
+	test_cmp expect file
+'
+
+run_dir_diff_test 'difftool --dir-diff syncs worktree without unstaged change' '
+	test_when_finished git reset --hard &&
+	git difftool -d $symlinks --extcmd "$(pwd)/modify-right-file" branch &&
+	echo "new content" >expect &&
+	test_cmp expect file
+'
+
 write_script modify-file <<\EOF
 echo "new content" >file
 EOF
-- 
1.7.1
Previous: John KeepingNext: Junio C Hamano
Message 3 of 10 in “difftool --dir-diff: copy back all files matching the working tree”
  1. difftool --dir-diff: copy back all files matching the working treeKenichi Saita, May 26, 2013
  2. John KeepingMay 26, 2013
  3. difftool --dir-diff: always use identical working tree fileKenichi Saita, May 27, 2013
  4. Junio C HamanoMay 28, 2013
  5. John KeepingMay 28, 2013
  6. Junio C HamanoMay 28, 2013
  7. John KeepingMay 28, 2013
  8. Junio C HamanoMay 28, 2013
  9. difftool --dir-diff: allow changing any clean working tree fileKenichi Saita, May 29, 2013
  10. Junio C HamanoMay 29, 2013

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.