All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: David Aguilar <davvid@gmail.com>
Cc: "Junio C Hamano" <gitster@pobox.com>,
	"Git Mailing List" <git@vger.kernel.org>,
	"Johannes Schindelin" <johannes.schindelin@gmx.de>,
	"Alan Blotz" <work@blotz.org>,
	"Đoàn Trần Công Danh" <congdanhqx@gmail.com>,
	"Jeff King" <peff@peff.net>
Subject: Re: [PATCH v4 1/3] difftool: fix symlink-file writing in dir-diff mode
Date: Mon, 20 Sep 2021 09:59:51 +0200	[thread overview]
Message-ID: <87bl4nbrnx.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <20210919203832.91207-2-davvid@gmail.com>


On Sun, Sep 19 2021, David Aguilar wrote:

> The difftool dir-diff mode handles symlinks by replacing them with their
> readlink(2) values. This allows diff tools to see changes to symlinks
> as if they were regular text diffs with the old and new path values.
> This is analogous to what "git diff" displays when symlinks change.
>
> The temporary diff directories that are created initially contain
> symlinks because they get checked-out using a temporary index that
> retains the original symlinks as checked-in to the repository.
>
> A bug was introduced when difftool was rewritten in C that made
> difftool write the readlink(2) contents into the pointed-to file rather
> than the symlink itself. The write was going through the symlink and
> writing to its target rather than writing to the symlink path itself.
>
> Replace symlinks with raw text files by unlinking the symlink path
> before writing the readlink(2) content into them.
>
> When 18ec800512eb0634a0bf5e86b36ed156fbee73f3 added handling for

Nit: Please format commits like this: 18ec800512e (difftool: handle
modified symlinks in dir-diff mode, 2017-03-15)

See "git show -s --pretty=reference" in Documentation/SubmittingPatches.

> modified symlinks this bug got recorded in the test suite. The tests
> included the pointed-to symlink target paths. These paths were being
> reported because difftool was erroneously writing to them, but they
> should have never been reported nor written.
>
> Correct the modified-symlinks test cases by removing the target files
> from the expected output.
>
> Add a test to ensure that symlinks are written with the readlink(2)
> values and that the target files contain their original content.
>
> Reported-by: Alan Blotz <work@blotz.org>
> Helped-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
> Signed-off-by: David Aguilar <davvid@gmail.com>
> ---
>  builtin/difftool.c  |  2 ++
>  t/t7800-difftool.sh | 68 +++++++++++++++++++++++++++++++++++++++++++--
>  2 files changed, 68 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/difftool.c b/builtin/difftool.c
> index bb9fe7245a..21e055d13a 100644
> --- a/builtin/difftool.c
> +++ b/builtin/difftool.c
> @@ -557,11 +557,13 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix,
>  		if (*entry->left) {
>  			add_path(&ldir, ldir_len, entry->path);
>  			ensure_leading_directories(ldir.buf);
> +			unlink(ldir.buf);
>  			write_file(ldir.buf, "%s", entry->left);
>  		}
>  		if (*entry->right) {
>  			add_path(&rdir, rdir_len, entry->path);
>  			ensure_leading_directories(rdir.buf);
> +			unlink(rdir.buf);
>  			write_file(rdir.buf, "%s", entry->right);
>  		}
>  	}
> diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
> index a173f564bc..07a52fb8e1 100755
> --- a/t/t7800-difftool.sh
> +++ b/t/t7800-difftool.sh
> @@ -674,7 +674,6 @@ test_expect_success SYMLINKS 'difftool --dir-diff handles modified symlinks' '
>  	rm c &&
>  	ln -s d c &&
>  	cat >expect <<-EOF &&
> -		b
>  		c
>  
>  		c
> @@ -710,7 +709,6 @@ test_expect_success SYMLINKS 'difftool --dir-diff handles modified symlinks' '
>  	# Deleted symlinks
>  	rm -f c &&
>  	cat >expect <<-EOF &&
> -		b
>  		c
>  
>  	EOF
> @@ -723,6 +721,72 @@ test_expect_success SYMLINKS 'difftool --dir-diff handles modified symlinks' '
>  	test_cmp expect actual
>  '
>  
> +test_expect_success SYMLINKS 'difftool --dir-diff writes symlinks as raw text' '
> +	# Start out on a branch called "branch-init".
> +	git init -b branch-init symlink-files &&
> +	(
> +		cd ./symlink-files &&

The "./" isn't needed

Neither of those small comments needs a re-roll I think, just reading
through & noting things I spotted...

I've omitted things that Eric mentioned in
<CAPig+cTBfP5_czsPiALcF3tODJmNfXvNkTjqVFRbHCS535d-ng@mail.gmail.com>.

  reply	other threads:[~2021-09-20  8:03 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-19 20:38 [PATCH v4 0/3] difftool dir-diff symlink bug fix and cleanup patches David Aguilar
2021-09-19 20:38 ` [PATCH v4 1/3] difftool: fix symlink-file writing in dir-diff mode David Aguilar
2021-09-20  7:59   ` Ævar Arnfjörð Bjarmason [this message]
2021-09-19 20:38 ` [PATCH v4 2/3] difftool: use a strbuf to create a tmpdir path without repeated slashes David Aguilar
2021-09-20  5:40   ` Eric Sunshine
2021-09-20 22:08     ` [PATCH v5] difftool: " David Aguilar
2021-09-19 20:38 ` [PATCH v4 3/3] difftool: add a missing space to the run_dir_diff() comments David Aguilar
2021-09-20 18:39 ` [PATCH v4 0/3] difftool dir-diff symlink bug fix and cleanup patches Junio C Hamano
2021-09-20 21:43   ` David Aguilar
2021-09-22 18:43     ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87bl4nbrnx.fsf@evledraar.gmail.com \
    --to=avarab@gmail.com \
    --cc=congdanhqx@gmail.com \
    --cc=davvid@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=johannes.schindelin@gmx.de \
    --cc=peff@peff.net \
    --cc=work@blotz.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.