From: John Keeping <john@keeping.me.uk>
To: Junio C Hamano <gitster@pobox.com>
Cc: Kenichi Saita <nitoyon@gmail.com>,
git@vger.kernel.org, David Aguilar <davvid@gmail.com>
Subject: Re: [PATCH v2] difftool --dir-diff: always use identical working tree file
Date: Tue, 28 May 2013 20:08:29 +0100 [thread overview]
Message-ID: <20130528190829.GB17475@serenity.lan> (raw)
In-Reply-To: <7v7gij0w6z.fsf@alter.siamese.dyndns.org>
On Tue, May 28, 2013 at 11:57:08AM -0700, Junio C Hamano wrote:
> John Keeping <john@keeping.me.uk> writes:
>
> > Yeah, the commit message is still quite focused on the end effect of
> > copying files back. But that's not what's being changed here.
> >
> > In my suggested commit message I tried to make it clear that we're
> > changing when we decide to copy a file across to the temporary tree.
> > This has the beneficial (side-)effect of changing the set of files we
> > consider for copying back into the working tree after the diff tool has
> > been run.
>
> I actually think the effect of copying files back _is_ the primary
> motivation of this change, and stressing that end effect is a much
> better description. After all, if the working tree files do not
> have any difference from the RHS of the comparison, copying from the
> working tree and stuffing the $rsha1 to the RHS temporary index and
> running "checkout -f" should produce identical temporary directory
> for the user to start viewing.
>
> The _only_ difference in behaviour before and after this patch that
> matters to the end user is if that path is in @working_tree, which
> is returned to @worktree of dir_diff sub to be later copied back,
> no? I would view this change as a mere means, an implementation
> detail, to achieve that end of stuffing more paths in the @worktree
> array.
I agree with this, but like you I found it confusing that the patch
touched code seemingly unrelated to copying files back. I went toward
describing the patch more literally and giving the motivation in the
final paragraph. Your message below is better, but I think it needs to
say that the set of files considered for copying back is the set that is
copied across to begin with.
> Perhaps
>
> difftool --dir-diff: allow changing any clean working tree file
>
> The temporary directory prepared by "difftool --dir-diff" to
> show the result of a change can be modified by the user via
> the tree diff program, and we try hard not to lose changes
> to them after tree diff program returns to us.
>
> However, the set of files to be copied back is computed
> differently between --symlinks and --no-symlinks modes. The
> former checks all paths that start out as identical to the
> working tree file, while the latter checks paths that
> already had a local modification in the working tree,
> allowing changes made in the tree diff program to paths that
> did not have any local change to be lost.
>
> or something. This invites a few questions, though.
>
> - By allowing these files in the temporary directory to be
> modified, aren't we making the user's life harder by forcing them
> to handle "working tree file was already modified, made different
> changes in the temporary directory, now these changes need to be
> consolidated" case?
>
> - When comparing two revisions, e.g. "--dir-diff HEAD^^ HEAD^",
> that checks out (via $rsha1 to "checkout -f" codepath) a blob
> that does not match what is in the working tree of HEAD to the
> temporary directory, we still allow modifications to the copy in
> the temporary directory, but what can the user do with these
> changes that are _not_ based on HEAD, short of checking out HEAD^
> and apply the difference first?
>
> I still cannot shake this nagging feeling that giving a writable
> temporary directory might have been a mistake in the first place.
> Perhaps it may be a better design to make the ones that the user
> shouldn't touch (or will lead to the above confusion) read-only,
> while the ones that match the working tree read-write?
My ideal scenario would be that we only allow users to edit files when
they are comparing against the working tree, but that would require
git-difftool to fully understand all git-diff options since it just
passes through any it doesn't recognise. I don't think there's an easy
way to do that, which leaves us with this confusing situation.
next prev parent reply other threads:[~2013-05-28 19:08 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-26 15:00 [PATCH] difftool --dir-diff: copy back all files matching the working tree Kenichi Saita
2013-05-26 15:44 ` John Keeping
2013-05-27 15:31 ` [PATCH v2] difftool --dir-diff: always use identical working tree file Kenichi Saita
2013-05-28 18:06 ` Junio C Hamano
2013-05-28 18:15 ` John Keeping
2013-05-28 18:57 ` Junio C Hamano
2013-05-28 19:08 ` John Keeping [this message]
2013-05-28 19:31 ` Junio C Hamano
2013-05-29 16:01 ` [PATCH v3] difftool --dir-diff: allow changing any clean " Kenichi Saita
2013-05-29 19:52 ` 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=20130528190829.GB17475@serenity.lan \
--to=john@keeping.me.uk \
--cc=davvid@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=nitoyon@gmail.com \
/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 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).