git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/1] mingw: only test index entries for backslashes, not tree entries

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Dec 26, 2019, 21:23 UTC
Message-ID
<nycvar.QRO.7.76.6.1912262221000.46@tvgsbejvaqbjf.bet>
In-Reply-To
<20191226200316.GD170890@google.com>
Hi Jonathan,
On Thu, 26 Dec 2019, Jonathan Nieder wrote:
Show 26 quoted lines
> Johannes Schindelin wrote:
>
> > During a clone of a repository that contained a file with a backslash in
> > its name in the past, as of v2.24.1(2), Git for Windows prints errors
> > like this:
> >
> > 	error: filename in tree entry contains backslash: '\'
> >
> > While the clone still succeeds, a similar error prevents the equivalent
> > `git fetch` operation, which is inconsistent.
> >
> > Arguably, this is the wrong layer for that error, anyway: As long as the
> > user never checks out the files whose names contain backslashes, there
> > should not be any problem in the first place.
>
> Hm.  The choice of right layer depends on what repositories in the wild
> contain.  If there are none containing filenames with '\', then fsck et
> al would be an appropriate layer for this.  With hindsight, it was not
> a good idea to support this kind of filename.
>
> However, between the lines of this commit messages I sense that there
> *are* repositories in the wild using these kinds of filenames.
>
> Can you say more about that?  What repositories are affected?  Do they
> contain such filenames at HEAD or only in their history?  If someone
> wants to check out a revision with such filenames, what should happen?
Yes: https://github.com/zephyrproject-rtos/civetweb contains history where
at some stage, by mistake, a directory was called `\`. It has been fixed a
long time ago, but users obviously still want to be able to clone it ;-)
Show 34 quoted lines
> > --- a/read-cache.c
> > +++ b/read-cache.c
> > @@ -1278,6 +1278,11 @@ static int add_index_entry_with_check(struct index_state *istate, struct cache_e
> >  	int skip_df_check = option & ADD_CACHE_SKIP_DFCHECK;
> >  	int new_only = option & ADD_CACHE_NEW_ONLY;
> >
> > +#ifdef GIT_WINDOWS_NATIVE
> > +	if (protect_ntfs && strchr(ce->name, '\\'))
> > +		return error(_("filename in tree entry contains backslash: '%s'"), ce->name);
> > +#endif
> > +
>
> Why is this specific to the GIT_WINDOWS_NATIVE case?  Wouldn't it affect
> ntfs usage on other platforms as well?
>
> [...]
> > --- a/tree-walk.c
> > +++ b/tree-walk.c
> > @@ -43,12 +43,6 @@ static int decode_tree_entry(struct tree_desc *desc, const char *buf, unsigned l
> >  		strbuf_addstr(err, _("empty filename in tree entry"));
> >  		return -1;
> >  	}
> > -#ifdef GIT_WINDOWS_NATIVE
> > -	if (protect_ntfs && strchr(path, '\\')) {
> > -		strbuf_addf(err, _("filename in tree entry contains backslash: '%s'"), path);
> > -		return -1;
> > -	}
> > -#endif
>
> Ah, it's inherited from there, so orthogonal to this patch.
>
> To summarize: I think the commit message and docs could use some work
> to describe what invariants we're trying to maintain and what
> real-world usage motivates them.
I added this paragraph to the commit message:
    Note: just as before, the check is guarded by `core.protectNTFS` (to
    allow overriding the check by toggling that config setting), and it
    is _only_ performed on Windows, as the backslash is not a directory
    separator elsewhere, even when writing to NTFS-formatted volumes.

Does that clarify the issue enough? Dscho

Show 5 quoted lines
>
> Thanks and hope that helps,
> Jonathan
>
>
Previous: Jonathan NiederNext: Jonathan Nieder
Message 8 of 19 in “Disallow writing, but not fetching commits with file names containing backslashes”
  1. 0/1 Disallow writing, but not fetching commits with file names containing backslashesJohannes Schindelin via GitGitGadget, Dec 26, 2019
  2. 1/1 mingw: only test index entries for backslashes, not tree entriesJohannes Schindelin via GitGitGadget, Dec 26, 2019
  3. Junio C HamanoDec 26, 2019
  4. Johannes SchindelinDec 26, 2019
  5. Junio C HamanoDec 30, 2019
  6. Johannes SchindelinJan 2, 2020
  7. Jonathan NiederDec 26, 2019
  8. Johannes SchindelinDec 26, 2019
  9. Jonathan NiederDec 26, 2019
  10. Junio C HamanoDec 26, 2019
  11. Junio C HamanoDec 26, 2019
  12. Johannes SchindelinDec 31, 2019
  13. Johannes SchindelinJan 2, 2020
  14. Jonathan NiederJan 4, 2020
  15. Johannes SchindelinJan 4, 2020
  16. Junio C HamanoDec 26, 2019
  17. Johannes SchindelinDec 26, 2019
  18. 0/1 Disallow writing, but not fetching commits with file names containing backslashesJohannes Schindelin via GitGitGadget, Dec 31, 2019
  19. 1/1 mingw: only test index entries for backslashes, not tree entriesJohannes Schindelin via GitGitGadget, Dec 31, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.