git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Daniel Lyubomirov <daniel@digitalus.bg>, git@vger.kernel.org
Subject: Re: Bug: problem with file named with dash character
Date: Wed, 27 Jun 2012 18:41:29 -0400	[thread overview]
Message-ID: <20120627224129.GA27566@sigill.intra.peff.net> (raw)
In-Reply-To: <7v7gus7625.fsf@alter.siamese.dyndns.org>

On Wed, Jun 27, 2012 at 03:17:54PM -0700, Junio C Hamano wrote:

> > I think that's bad. I wonder if it should have "*" attributes applied to
> > it or not. While I can see it being convenient in some cases, I think it
> > makes the rules confusingly complex.
> 
> It is likely that the crlf conversion on Dos systems wants to be
> applied regardless.

Yeah, that's specifically the case I was thinking of. I would say "well,
we don't need to care about path at all, they can just use
core.autocrlf", but I think autocrlf is discouraged these days in favor
of using attributes.

> This is unrelated to the "standard input confusion" issue, but there
> are two more things coming either from the way the no-index code is
> done or from the way it is bolted onto git.
> 
> With the current code, this:
> 
> 	mkdir foo bar
>         echo hello >foo/1
>         echo bye >bar/2
>         git diff --no-index foo bar
> 
> shows differences between a/foo/1 and b/bar/1, as the no-index code
> records foo/1 and bar/1 as the paths in the filespec for them.
> 
> But if you are comparing two directory hierarchies, it is a lot more
> likely that you would want to see corresponding files in these two
> directories.  In other words, the patch is better shown as
> differences between a/1 and b/1 (the code makes the core compare
> foo/1 and bar/2 after all).  This of course requires no-index to
> differentiate the logical pathname (i.e. "this is the path inside
> collection a/ (or b/)") and the physical location from which the
> contents are read.  Such a differentiation would allow us to also do
> renames and rename classifications much more sanely.  We had to add
> DIFF_PAIR_RENAME() and filepair->renamed_pair only to support this
> codepath because of this misdesign.  We could have just run strcmp()
> between the logical pathname of one/two members of the filepair to
> see if the pair was renamed if it was done that way.

Yeah, that makes sense. Really you want to split the idea of
diff_filespec into a logical unit of "the thing I am diffing" and a
source struct of "here is where I get the data from". And the latter
could be a union of blob information, filesystem path, and stdin flag,
all contained inside the filespec.

> And the way diff-no-index.c::queue_diff() walks two directories to
> grab paths from them in parallel and incrementally means that the
> filesystem walking code cannot be reused for something like this:
> 
> 	git diff master:Documentation /var/tmp/docs
> 
> to compare a hierarchy represented with a tree object with another
> hierarchy stored in the filesystem outside git's control.  A natural
> way to do so would be to grab a set of paths from /var/tmp/docs and
> have that set compared against the other set that comes from the tree,
> and the "grab a set of paths from /var/tmp/docs" machinery can be
> used twice to implement the current
> 
> 	git diff --no-index /var/tmp/foo /var/tmp/bar
> 
> which would have been a lot cleaner implementation.

Agreed. I have occasionally wanted to do something like the tree
comparison you mentioned above, and I think I resorted to actually
making a git tree out of it.

All of that is nice, and if you feel like working on it, great. But I
admit I don't care too much about the --no-index code path. The key
thing to me is fixing the "-" path in the regular code path without
regressing the no-index stdin code-path too badly. And I think your
patches already do that, so it might be a good stopping point.

-Peff

      reply	other threads:[~2012-06-27 22:41 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <52ae7682-3e9a-4b52-bec1-08ba3aadffc0@office.digitalus.nl>
2012-06-27  7:32 ` Bug: problem with file named with dash character Daniel Lyubomirov -|- Digitalus Bulgaria
2012-06-27  9:57   ` faux
2012-06-27 18:28   ` Junio C Hamano
2012-06-27 19:52     ` Jeff King
2012-06-27 20:25       ` Jeff King
2012-06-27 20:27       ` Junio C Hamano
2012-06-27 20:33         ` Junio C Hamano
2012-06-27 20:35           ` Junio C Hamano
2012-06-27 20:39             ` Junio C Hamano
2012-06-27 20:48               ` Junio C Hamano
2012-06-27 21:00                 ` Jeff King
2012-06-27 22:17                   ` Junio C Hamano
2012-06-27 22:41                     ` Jeff King [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=20120627224129.GA27566@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=daniel@digitalus.bg \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.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).