git clone <url> C:\cygwin\home\USER\repo' is working (again)
commit1cadad6f658bfb3ab54b25dd04bac372253473b6
authorTorsten Bögershausen <tboegi@web.de>
Sat, 15 Dec 2018 04:33:30 +0000 (15 05:33 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 26 Dec 2018 23:26:17 +0000 (26 15:26 -0800)
tree78a76cdc3a651aeef35138b750c43beea1f8154a
parent98cdfbb84ad2ed6a2eb43dafa357a70a4b0a0fad
git clone <url> C:\cygwin\home\USER\repo' is working (again)

A regression for cygwin users was introduced with commit 05b458c,
 "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: Steven Penny <svnpenn@gmail.com>
Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/cygwin.c [deleted file]
compat/cygwin.h [deleted file]
compat/mingw.c
compat/mingw.h
compat/win32/path-utils.c [new file with mode: 0644]
compat/win32/path-utils.h [new file with mode: 0644]
config.mak.uname
git-compat-util.h
t/t5601-clone.sh