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>
This commit is contained in:
Thomas Wolf 2020-10-05 12:32:38 +02:00 committed by Matthias Sohn
parent b0b3250197
commit f37aa182e1
2 changed files with 38 additions and 2 deletions

View File

@ -13,7 +13,9 @@
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 void testMatchCaseSensitivity() throws Exception {
@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 void testMatchWithInvalidUriInConfig() throws Exception {
@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"));
@ -231,6 +235,31 @@ public void testUserAgent() throws Exception {
assertEquals("DummyAgent/4.0", http.getUserAgent());
}
@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"

View File

@ -121,6 +121,8 @@ public Integer get() {
}
}).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 @@ private void init(Config config, URIish uri) {
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;