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

Re: git fails with control characters in trunk directory name

From
HMHugo Mildenberger <hugo.mildenberger@namir.de>
Date
May 12, 2009, 16:59 UTC
Message-ID
<200905121900.00625.Hugo.Mildenberger@namir.de>
In-Reply-To
<81b0412b0905120759u15f1ec73k73625a7904515792@mail.gmail.com>
Show 63 quoted lines
> > I looked into guess_dir_name().
> 
> That's not the right place. The place I meant is right below the call
> to this function (you have to parse the names given in the command-line
> too).
> 
> The automatically generated (that's the case with guess_dir_name)
> directory name certainly shouldn't contain any unexpected characters.
> 
> > A regex call would be easy to fit, but
> > currently the git binary does not depend on libpcre. Is it generally
> > considered to be acceptable to add such a dependency?
> 
> No. And pcre is not the only regex lib in the world. And we prefer
> shell patterns, if any at all.
> 
> > While I like the idea to make use of a configurable regular expression, such
> > an expression had to be a command line parameter with a reasonable default
> > value, because .git/config still would not exist when the value would be
> > needed.
> 
> That's where _default_ policy plays its role. "Default" like in "it is compiled
> into the git executable and needs no configuration present".
> 
> > Last not least, I managed to reproduce the problem almost exactly:
> >
> > 1.) hm@localhost git
> > clone "git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-testing.git
> > "
> >        (Note the trailing linefeed)
> 
> That's all the command printed? No "Initialized empty Git repository" line?
> 
> > 2.) hm@localhost ~/tmp/bluetooth-testing.git $ make
> 
> Hmm... At this point the clone may have worked (at least partially).
> It named "bluetooth-testing.git", which it shouldn't (but explainable:
> the repo url suffix is not .git anymore, but ".git\r\n"). But it looks like
> the post-clone checkout failed (silently? which would be bad):
> 
> >        Makefile:313: /home/hm/tmp/bluetooth-testing.git
> >        /scripts/Kbuild.include: No such file or directory
> >        make[1]: /home/hm/tmp/bluetooth-testing.git: No such file or directory
> >        make[1]: *** No rule to make target `/home/hm/tmp/bluetooth-testing.git'.
> >        Stop.
> >        make: *** No rule to make target `include/config/auto.conf', needed by
> >        `include/config/kernel.release'.  Stop.
> 
> Assuming the files must be present, of course.
> 
> > 3.) hm@localhost ~/tmp/bluetooth-testing.git $ git pull
> >        fatal: Error in line 2:
> >
> > 4.) ".git/config" now contains
> >
> > url =
> > git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-testing.git\n
> >
> > I particulary liked the git message "fatal: Error in line 2:" ...
> >
> 
> Separate issue. Will look at it later.
> --

You really want to use shell patterns to match against a string from within a binary? Although git already makes use of regexec from glibc or compat/regex directory in numerous places?

Regarding the procedure above, sorry for keeping it much too short. Here comes a complete sequence (I will put some comments within square brackets):

hm@localhost /var/tmp $ git --version git version 1.6.0.6

hm@localhost /var/tmp $ git clone "git://git.kernel.org/pub/scm/linux/kernel/git/holtmann/bluetooth-testing.git " Initialized empty Git repository in /mnt/hda1/tmp/bluetooth-testing.git /.git/ remote: Counting objects: 1177836, done. remote: Compressing objects: 100% (189467/189467), done. remote: Total 1177836 (delta 982785), reused 1176855 (delta 981880) Receiving objects: 100% (1177836/1177836), 288.16 MiB | 1288 KiB/s, done. Resolving deltas: 100% (982785/982785), done. Checking out files: 100% (27842/27842), done.

hm@localhost /var/tmp $ ls bluetooth-testing.git? [Note that question mark replacing \n in repository's name]

hm@localhost /var/tmp $ cd blue bluetooth-testing.git^J/ bluez-utils-2.25-r1.new/ [I typed cd blue<TAB> here, and there is the "^J" I remembered to have seen elsewhere]

hm@localhost /var/tmp $ cd 'bluetooth-testing.git '/ [bash puts the directory name automatically within single quotes in this case]

hm@localhost /var/tmp/bluetooth-testing.git $ make defconfig *** Default configuration is based on 'i386_defconfig' # # configuration written to .config #

hm@localhost /var/tmp/bluetooth-testing.git $ make make[1]: /mnt/hda1/tmp/bluetooth-testing.git: No such file or directory make[1]: *** No rule to make target `/mnt/hda1/tmp/bluetooth-testing.git'. Stop. make: *** No rule to make target `include/config/auto.conf', needed by `include/config/kernel.release'. Stop. [The problem is simply the odd directory name, while make tries to use the real one]

hm@localhost /var/tmp/bluetooth-testing.git $ git pull fatal: Error in line 2:

Previous: Alex RiesenNext: Alex Riesen
Message 7 of 30 in “git fails with control characters in trunk directory name”
  1. Hugo MildenbergerMay 11, 2009
  2. Alex RiesenMay 12, 2009
  3. Hugo MildenbergerMay 12, 2009
  4. Alex RiesenMay 12, 2009
  5. Hugo MildenbergerMay 12, 2009
  6. Alex RiesenMay 12, 2009
  7. Hugo MildenbergerMay 12, 2009
  8. Alex RiesenMay 12, 2009
  9. Quote LF in urls git fetch saves in FETCH_HEADAlex Riesen, May 12, 2009
  10. Junio C HamanoMay 12, 2009
  11. Alex RiesenMay 13, 2009
  12. Hugo MildenbergerMay 13, 2009
  13. Daniel BarkalowMay 13, 2009
  14. Alex RiesenMay 13, 2009
  15. Alex RiesenMay 13, 2009
  16. Daniel BarkalowMay 13, 2009
  17. Alex RiesenMay 13, 2009
  18. Junio C HamanoMay 13, 2009
  19. 1/2 Quote LF in urls git fetch saves in FETCH_HEADAlex Riesen, May 13, 2009
  20. 2/2 Improve the naming of guessed target repository for git cloneAlex Riesen, May 13, 2009
  21. Junio C HamanoMay 14, 2009
  22. Alex RiesenMay 14, 2009
  23. Junio C HamanoMay 14, 2009
  24. Alex RiesenMay 14, 2009
  25. Hugo MildenbergerMay 14, 2009
  26. Alex RiesenMay 14, 2009
  27. Junio C HamanoMay 16, 2009
  28. Alex RiesenMay 12, 2009
  29. Alex RiesenMay 13, 2009
  30. Hugo MildenbergerMay 13, 2009

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.