diff options
author | Thomas Wolf <thomas.wolf@paranor.ch> | 2020-10-05 12:32:38 +0200 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2020-10-06 19:03:36 -0400 |
commit | f37aa182e14179479daf8a3a2a8240cd51912af1 (patch) | |
tree | 0c5ad12998b1aa6ac1c6c71a9cefc675c67f2da4 | |
parent | b0b32501978c00018c3a046a09e474a1d783275a (diff) | |
download | jgit-f37aa182e14179479daf8a3a2a8240cd51912af1.tar.gz jgit-f37aa182e14179479daf8a3a2a8240cd51912af1.zip |
Override config http.userAgent from environment GIT_HTTP_USER_AGENT
According to [1], environment variable GIT_HTTP_USER_AGENT can
override a git config http.userAgent.
[1] https://git-scm.com/docs/git-config#Documentation/git-config.txt-httpuserAgent
Change-Id: I996789dc49faf96339cd7b4e0a682b9bcafb6f70
Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/HttpConfigTest.java | 33 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/transport/HttpConfig.java | 7 |
2 files changed, 38 insertions, 2 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/HttpConfigTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/HttpConfigTest.java index a5f98ee23e..5336dd73c6 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/HttpConfigTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/HttpConfigTest.java @@ -13,7 +13,9 @@ package org.eclipse.jgit.transport; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import org.eclipse.jgit.junit.MockSystemReader; import org.eclipse.jgit.lib.Config; +import org.eclipse.jgit.util.SystemReader; import org.junit.Before; import org.junit.Test; @@ -96,7 +98,8 @@ public class HttpConfigTest { @Test public void testMatchWithInvalidUriInConfig() throws Exception { config.fromText( - DEFAULT + "[http \"///\"]\n" + "\tpostBuffer = 1024\n"); + DEFAULT + "[http \"///#expectedWarning\"]\n" + + "\tpostBuffer = 1024\n"); HttpConfig http = new HttpConfig(config, new URIish("http://example.com/path/repo.git")); assertEquals(1, http.getPostBuffer()); @@ -104,7 +107,8 @@ public class HttpConfigTest { @Test public void testMatchWithInvalidAndValidUriInConfig() throws Exception { - config.fromText(DEFAULT + "[http \"///\"]\n" + "\tpostBuffer = 1024\n" + config.fromText(DEFAULT + "[http \"///#expectedWarning\"]\n" + + "\tpostBuffer = 1024\n" + "[http \"http://example.com\"]\n" + "\tpostBuffer = 2048\n"); HttpConfig http = new HttpConfig(config, new URIish("http://example.com/path/repo.git")); @@ -232,6 +236,31 @@ public class HttpConfigTest { } @Test + public void testUserAgentEnvOverride() throws Exception { + String mockAgent = "jgit-test/5.10.0"; + SystemReader originalReader = SystemReader.getInstance(); + SystemReader.setInstance(new MockSystemReader() { + + @Override + public String getenv(String variable) { + if ("GIT_HTTP_USER_AGENT".equals(variable)) { + return mockAgent; + } + return super.getenv(variable); + } + }); + try { + config.fromText(DEFAULT + "[http \"http://example.com\"]\n" + + "\tuserAgent=DummyAgent/4.0\n"); + HttpConfig http = new HttpConfig(config, + new URIish("http://example.com/")); + assertEquals(mockAgent, http.getUserAgent()); + } finally { + SystemReader.setInstance(originalReader); + } + } + + @Test public void testUserAgentNonAscii() throws Exception { config.fromText(DEFAULT + "[http \"http://example.com\"]\n" + "\tuserAgent= d ümmy Agent -5.10\n"); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/HttpConfig.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/HttpConfig.java index 58fc250255..dc82f46197 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/HttpConfig.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/HttpConfig.java @@ -121,6 +121,8 @@ public class HttpConfig { } }).get().intValue(); + private static final String ENV_HTTP_USER_AGENT = "GIT_HTTP_USER_AGENT"; //$NON-NLS-1$ + /** * Config values for http.followRedirect. */ @@ -364,6 +366,11 @@ public class HttpConfig { saveCookies = config.getBoolean(HTTP, match, SAVE_COOKIES_KEY, saveCookies); } + // Environment overrides config + agent = SystemReader.getInstance().getenv(ENV_HTTP_USER_AGENT); + if (!StringUtils.isEmptyOrNull(agent)) { + userAgent = UserAgent.clean(agent); + } postBuffer = postBufferSize; sslVerify = sslVerifyFlag; followRedirects = followRedirectsMode; |