From: Junio C Hamano <gitster@pobox.com>
To: Yurii Shevtsov <ungetch@gmail.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH/RFC][GSoC] make "git diff --no-index $directory $file" DWIM better.
Date: Sun, 15 Mar 2015 13:17:28 -0700 [thread overview]
Message-ID: <xmqqpp8at3qf.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <CAHLaBN+93mp6PQmtfjOHSvfW7iwDXwPitGQ5W1am9KBm9EZV2Q@mail.gmail.com> (Yurii Shevtsov's message of "Sun, 15 Mar 2015 17:35:27 +0200")
Yurii Shevtsov <ungetch@gmail.com> writes:
> Changes 'git diff --no-index $directory $file' behaviour.
> Now it is transformed to 'git diff --no-index $directory/&file $file'
> instead of throwing an error.
Is this asymmetric? Shouldn't "git diff --no-index $file $directory"
behave the same way, i.e. turned into "$file $directory/$file"?
If you intended the patch to do so, perhaps
"git diff --no-index directory/ file" used to error out, saying
that you cannot compare a directory and a file (with the
parameters swapped, "git diff --no-index file directory/" failed
the same way).
With normal "diff", "diff D/ F" acts as if it were told to
compare D/F and F (when D/F exists---if there isn't, then it
shows a creation of F), and behaving the same way would be more
natural to the users.
or something?
> Signed-off-by: Yurii Shevtsov <ungetch <at> gmail.com>
> ---
> diff-no-index.c | 21 +++++++++++++++++++--
> 1 files changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/diff-no-index.c b/diff-no-index.c
> index 265709b..4e71b36 100644
> --- a/diff-no-index.c
> +++ b/diff-no-index.c
> @@ -97,8 +97,25 @@ static int queue_diff(struct diff_options *o,
> if (get_mode(name1, &mode1) || get_mode(name2, &mode2))
> return -1;
>
> - if (mode1 && mode2 && S_ISDIR(mode1) != S_ISDIR(mode2))
> - return error("file/directory conflict: %s, %s", name1, name2);
> + if (mode1 && mode2 && S_ISDIR(mode1) != S_ISDIR(mode2)) {
> + struct strbuf dirnfile;
> + const char *dir, *file;
> + char *filename;
> + int ret = 0;
> +
> + dir = S_ISDIR(mode1) ? name1 : name2;
> + file = (dir == name1) ? name2 : name1;
> + strbuf_init(&dirnfile, strlen(name1) + strlen(name2) + 2);
> + strbuf_addstr(&dirnfile, dir);
> + if (dirnfile.buf[dirnfile.len - 1] != '/')
> + strbuf_addch(&dirnfile, '/');
> + filename = strrchr(file, '/');
> + strbuf_addstr(&dirnfile, filename ? (filename + 1) : file);
> + ret = queue_diff(o, dirnfile.buf, file);
Hmm, it appears that you are turning "diff F D/" into "diff D/F F",
which is the other way around here, or am I mis-reading queue_diff().
Does queue_diff() do the right thing when D/F does not exist (not a
rhetorical question; I just did not check it myself)?
prev parent reply other threads:[~2015-03-15 20:17 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-15 15:35 [PATCH/RFC][GSoC] make "git diff --no-index $directory $file" DWIM better Yurii Shevtsov
2015-03-15 17:30 ` Matthieu Moy
2015-03-16 3:50 ` Junio C Hamano
2015-03-16 16:23 ` Yurii Shevtsov
2015-03-16 17:14 ` Junio C Hamano
2015-03-16 17:47 ` Yurii Shevtsov
2015-03-16 19:20 ` Junio C Hamano
2015-03-15 17:34 ` t.gummerer
[not found] ` <CAHLaBNLQ8-JzEBjypvJDDzhW8SwfzujuOknC_QWar+cL18cR3A@mail.gmail.com>
2015-03-15 18:13 ` t.gummerer
2015-03-15 18:04 ` Eric Sunshine
[not found] ` <CAHLaBN+RVpDrG9OewUS7LCYaEOvVqsTY3znapgMj7VrMJWHaDw@mail.gmail.com>
2015-03-15 21:28 ` Eric Sunshine
2015-03-15 22:00 ` Junio C Hamano
2015-03-15 20:17 ` Junio C Hamano [this message]
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=xmqqpp8at3qf.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=ungetch@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 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.