summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Wolf <thomas.wolf@paranor.ch>2020-10-05 12:32:38 +0200
committerMatthias Sohn <matthias.sohn@sap.com>2020-10-06 19:03:36 -0400
commitf37aa182e14179479daf8a3a2a8240cd51912af1 (patch)
tree0c5ad12998b1aa6ac1c6c71a9cefc675c67f2da4
parentb0b32501978c00018c3a046a09e474a1d783275a (diff)
downloadjgit-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.java33
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/HttpConfig.java7
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;