diff --git a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties index 9695e5742..33087d762 100644 --- a/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties +++ b/org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties @@ -139,6 +139,7 @@ configHandleMayBeLocked=config file handle may be locked by other process, {0}. connectionFailed=connection failed connectionTimeOut=Connection time out: {0} contextMustBeNonNegative=context must be >= 0 +cookieFilePathRelative=git config http.cookieFile contains a relative path, should be absolute: {0} corruptionDetectedReReadingAt=Corruption detected re-reading at {0} corruptObjectBadDate=bad date corruptObjectBadEmail=bad email diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java index 95265feb4..3eef49b1c 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java @@ -167,6 +167,7 @@ public static JGitText get() { /***/ public String connectionFailed; /***/ public String connectionTimeOut; /***/ public String contextMustBeNonNegative; + /***/ public String cookieFilePathRelative; /***/ public String corruptionDetectedReReadingAt; /***/ public String corruptObjectBadDate; /***/ public String corruptObjectBadEmail; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java index 2e5d18dc1..0710d3fdf 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/TransportHttp.java @@ -35,6 +35,7 @@ import java.io.BufferedInputStream; import java.io.BufferedReader; +import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -53,8 +54,6 @@ import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.nio.file.InvalidPathException; -import java.nio.file.Path; -import java.nio.file.Paths; import java.security.GeneralSecurityException; import java.security.cert.CertPathBuilderException; import java.security.cert.CertPathValidatorException; @@ -101,6 +100,7 @@ import org.eclipse.jgit.transport.http.HttpConnection; import org.eclipse.jgit.transport.http.HttpConnectionFactory; import org.eclipse.jgit.transport.http.HttpConnectionFactory2; +import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.HttpSupport; import org.eclipse.jgit.util.IO; import org.eclipse.jgit.util.RawParseUtils; @@ -1157,17 +1157,28 @@ IOException wrongContentType(String expType, String actType) { return new TransportException(uri, why); } - private static NetscapeCookieFile getCookieFileFromConfig( + private NetscapeCookieFile getCookieFileFromConfig( HttpConfig config) { - if (!StringUtils.isEmptyOrNull(config.getCookieFile())) { + String path = config.getCookieFile(); + if (!StringUtils.isEmptyOrNull(path)) { try { - Path cookieFilePath = Paths.get(config.getCookieFile()); + FS fs = local != null ? local.getFS() : FS.DETECTED; + File f; + if (path.startsWith("~/")) { //$NON-NLS-1$ + f = fs.resolve(fs.userHome(), path.substring(2)); + } else { + f = new File(path); + if (!f.isAbsolute()) { + f = fs.resolve(null, path); + LOG.warn(MessageFormat.format( + JGitText.get().cookieFilePathRelative, f)); + } + } return NetscapeCookieFileCache.getInstance(config) - .getEntry(cookieFilePath); + .getEntry(f.toPath()); } catch (InvalidPathException e) { LOG.warn(MessageFormat.format( - JGitText.get().couldNotReadCookieFile, - config.getCookieFile()), e); + JGitText.get().couldNotReadCookieFile, path), e); } } return null;