Skip to content
  • Torsten Bögershausen's avatar
    git clone <url> C:\cygwin\home\USER\repo' is working (again) · 1cadad6f
    Torsten Bögershausen authored and Junio C Hamano's avatar Junio C Hamano committed
    A regression for cygwin users was introduced with commit 05b458c1
    
    ,
     "real_path: resolve symlinks by hand".
    
    In the the commit message we read:
      The current implementation of real_path uses chdir() in order to resolve
        symlinks.  Unfortunately this isn't thread-safe as chdir() affects a
          process as a whole...
    
    The old (and non-thread-save) OS calls chdir()/pwd() had been
    replaced by a string operation.
    The cygwin layer "knows" that "C:\cygwin" is an absolute path,
    but the new string operation does not.
    
    "git clone <url> C:\cygwin\home\USER\repo" fails like this:
    fatal: Invalid path '/home/USER/repo/C:\cygwin\home\USER\repo'
    
    The solution is to implement has_dos_drive_prefix(), skip_dos_drive_prefix()
    is_dir_sep(), offset_1st_component() and convert_slashes() for cygwin
    in the same way as it is done in 'Git for Windows' in compat/mingw.[ch]
    
    Extract the needed code into compat/win32/path-utils.[ch] and use it
    for cygwin as well.
    
    Reported-by: default avatarSteven Penny <svnpenn@gmail.com>
    Helped-by: default avatarJohannes Schindelin <johannes.schindelin@gmx.de>
    Signed-off-by: default avatarTorsten Bögershausen <tboegi@web.de>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    1cadad6f