]> source.dussan.org Git - jgit.git/commitdiff
Cygwin expects forward slashes for commands to be run via sh.exe 38/158538/2
authorThomas Wolf <thomas.wolf@paranor.ch>
Thu, 27 Feb 2020 19:04:47 +0000 (20:04 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Fri, 28 Feb 2020 22:18:23 +0000 (17:18 -0500)
FS_Win32_Cygwin replaces backslashes by / as a side-effect of
relativize(). When support for core.hooksPath was added, paths were
relativized in a different place using Path.resolve(), which doesn't
do that transformation. As a result hooks could not be run on Cygwin
in some cases.

Do the transformation in FS_Win32_Cygwin.runInShell(). In all other
places, File or Path objects are used, which give no guarantee about
the file separator (typically the system-dependent default separator),
so doing the transformation earlier still wouldn't guarantee that
sh.exe indeed gets a command string using forward slashes.

Bug: 558577
Change-Id: I3c07eb85f0ac7c5628a2e92f990e5cdb7ecf532f
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32_Cygwin.java

index 10be26f797ac7b9de1fad57bebc935cdd1536735..41c239f1ac30d528579857be90e680cc8b8a7f90 100644 (file)
@@ -150,7 +150,7 @@ public class FS_Win32_Cygwin extends FS_Win32 {
                argv.add("sh.exe"); //$NON-NLS-1$
                argv.add("-c"); //$NON-NLS-1$
                argv.add("$0 \"$@\""); //$NON-NLS-1$
-               argv.add(cmd);
+               argv.add(cmd.replace(File.separatorChar, '/'));
                argv.addAll(Arrays.asList(args));
                ProcessBuilder proc = new ProcessBuilder();
                proc.command(argv);