git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH 0/2] Demonstrate and partially work around a gitattributes problem
@ 2017-05-15 15:23 Johannes Schindelin
  2017-05-15 15:23 ` [PATCH 1/2] gitattributes: demonstrate that Git tries to read a bogus file Johannes Schindelin
                   ` (2 more replies)
  0 siblings, 3 replies; 33+ messages in thread
From: Johannes Schindelin @ 2017-05-15 15:23 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Nguyễn Thái Ngọc Duy

Granted, it is a bit of a less common use case to call

	git diff <commit1>:<file1> <commit2>:<file2>

There are valid scenarios for such calls, of course.

And sometimes, one may want to compare even files that are stored in
subdirectories instead of the top-level directory. Example:

	git diff cafebabe:t/README bee7e55:t/README

Now, the surprising part is that Git tries to read a .gitattributes
files interpreting the *entire* prefix `cafebabe:t/` as a *directory
path*. I.e. it will try to read the *file* (not the blob)
`cafebabe:t/.gitattributes`.

A remarkable side effect prevents this from happening for files in the
top-level directory: there is no slash in the argument, therefore the
top-level .gitattributes (which have been read from the index/worktree
already) is used.

Unless, of course, one specifies the commit via a ref whose name
contains slashes.

As mentioned in the commit message of the patch demonstrating the
problem, I fear that this issue is *really* hard to fix. Certainly too
complicated for me alone.

Side note: I was really, really surprised, in a very positive way, that
Git handled the scenario gracefully where I *created* files with the
actual file paths <commit1>:<file1> and <commit2>:<file2>, i.e. where
`git diff <commit1>:<file1> <commit2>:<file2>` is ambiguous because it
could refer to two objects or to two files. In this case, Git warns
about the ambiguity (it is *slightly* misleading that it says to
separate *revisions* using `--`, as we do not want to compare
revisions... but it is definitely better than picking one side of the
ambiguity and running with it).

Git for Windows carries the second patch for ages already, and I would
have contributed it much earlier if I had not been busy with other
patches. The reason I submit it now is that it conflicts with Duy's
fopen_or_warn() patch series.


Johannes Schindelin (2):
  gitattributes: demonstrate that Git tries to read a bogus file
  mingw: Suppress warning that <commit>:.gitattributes does not exist

 attr.c                |  2 +-
 t/t0003-attributes.sh | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)


base-commit: b06d3643105c8758ed019125a4399cb7efdcce2c
Published-As: https://github.com/dscho/git/releases/tag/no-commit-colon-gitattributes-v1
Fetch-It-Via: git fetch https://github.com/dscho/git no-commit-colon-gitattributes-v1
-- 
2.13.0.windows.1


^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2017-05-24  9:57 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-15 15:23 [PATCH 0/2] Demonstrate and partially work around a gitattributes problem Johannes Schindelin
2017-05-15 15:23 ` [PATCH 1/2] gitattributes: demonstrate that Git tries to read a bogus file Johannes Schindelin
2017-05-15 15:24 ` [PATCH 2/2] mingw: Suppress warning that <commit>:.gitattributes does not exist Johannes Schindelin
2017-05-16  7:54 ` [PATCH 0/2] Demonstrate and partially work around a gitattributes problem Jeff King
2017-05-16  8:10   ` Jeff King
2017-05-17  1:38     ` Junio C Hamano
2017-05-17  2:05       ` Jeff King
2017-05-18 19:23         ` Johannes Schindelin
2017-05-19  0:00           ` Jeff King
2017-05-19 12:46         ` [PATCH 0/15] retain blob info for git diff HEAD:foo HEAD:bar Jeff King
2017-05-19 12:48           ` [PATCH 01/15] handle_revision_arg: reset "dotdot" consistently Jeff King
2017-05-20 14:56             ` Philip Oakley
2017-05-23 19:51               ` Jeff King
2017-05-23 23:47                 ` Philip Oakley
2017-05-19 12:48           ` [PATCH 02/15] handle_revision_arg: simplify commit reference lookups Jeff King
2017-05-19 12:50           ` [PATCH 03/15] handle_revision_arg: stop using "dotdot" as a generic pointer Jeff King
2017-05-24  2:45             ` Junio C Hamano
2017-05-24  9:55               ` Jeff King
2017-05-19 12:51           ` [PATCH 04/15] handle_revision_arg: hoist ".." check out of range parsing Jeff King
2017-05-19 12:52           ` [PATCH 05/15] handle_revision_arg: add handle_dotdot() helper Jeff King
2017-05-24  2:30             ` Junio C Hamano
2017-05-19 12:52           ` [PATCH 06/15] sha1_name: consistently refer to object_context as "oc" Jeff King
2017-05-19 12:52           ` [PATCH 07/15] get_sha1_with_context: always initialize oc->symlink_path Jeff King
2017-05-19 12:54           ` [PATCH 08/15] get_sha1_with_context: dynamically allocate oc->path Jeff King
2017-05-19 12:54           ` [PATCH 09/15] t4063: add tests of direct blob diffs Jeff King
2017-05-19 12:55           ` [PATCH 10/15] handle_revision_arg: record modes for "a..b" endpoints Jeff King
2017-05-19 12:55           ` [PATCH 11/15] handle_revision_arg: record paths for pending objects Jeff King
2017-05-19 12:57           ` [PATCH 12/15] diff: pass whole pending entry in blobinfo Jeff King
2017-05-19 12:58           ` [PATCH 13/15] diff: use the word "path" instead of "name" for blobs Jeff King
2017-05-19 12:59           ` [PATCH 14/15] diff: use pending "path" if it is available Jeff King
2017-05-19 12:59           ` [PATCH 15/15] diff: use blob path for blob/file diffs Jeff King
2017-05-24  2:44           ` [PATCH 0/15] retain blob info for git diff HEAD:foo HEAD:bar Junio C Hamano
2017-05-24  9:57             ` Jeff King

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).