From 964973d8f76df2502e1163fc3cc82e62a6654f00 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 30 May 2017 09:48:12 +0200 Subject: [PATCH] added jgit detection to GitUserAgentProvider, to fix integration tests --- .../sonia/scm/web/GitUserAgentProvider.java | 92 +++++++++++-------- .../scm/web/GitUserAgentProviderTest.java | 1 + 2 files changed, 57 insertions(+), 36 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java index 7d4111fa16..c75bbb1c9c 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java @@ -35,6 +35,8 @@ package sonia.scm.web; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Charsets; +import com.google.common.base.Strings; +import java.util.Locale; import sonia.scm.plugin.ext.Extension; @@ -46,57 +48,75 @@ import sonia.scm.plugin.ext.Extension; @Extension public class GitUserAgentProvider implements UserAgentProvider { + + private static final String PREFIX_JGIT = "jgit/"; + private static final String PREFIX_REGULAR = "git/"; + private static final String PREFIX_LFS = "git-lfs/"; + private static final String SUFFIX_MSYSGIT = "msysgit"; - /** Field description */ @VisibleForTesting - static final UserAgent GIT = UserAgent.builder("Git").browser( - false).basicAuthenticationCharset( - Charsets.UTF_8).build(); + static final UserAgent JGIT = UserAgent.builder("JGit") + .browser(false) + .basicAuthenticationCharset(Charsets.UTF_8) + .build(); + + @VisibleForTesting + static final UserAgent GIT = UserAgent.builder("Git") + .browser(false) + .basicAuthenticationCharset(Charsets.UTF_8) + .build(); @VisibleForTesting static final UserAgent GIT_LFS = UserAgent.builder("Git Lfs") - .browser(false) - .basicAuthenticationCharset(Charsets.UTF_8) - .build(); + .browser(false) + .basicAuthenticationCharset(Charsets.UTF_8) + .build(); - /** Field description */ @VisibleForTesting - static final UserAgent MSYSGIT = UserAgent.builder("msysGit").browser( - false).basicAuthenticationCharset( - Charsets.UTF_8).build(); + static final UserAgent MSYSGIT = UserAgent.builder("msysGit") + .browser(false) + .basicAuthenticationCharset(Charsets.UTF_8) + .build(); - /** Field description */ - private static final String PREFIX_REGULAR = "git/"; - private static final String PREFIX_LFS = "git-lfs/"; - /** Field description */ - private static final String SUFFIX_MSYSGIT = "msysgit"; //~--- methods -------------------------------------------------------------- - /** - * Method description - * - * - * @param userAgentString - * - * @return - */ @Override public UserAgent parseUserAgent(String userAgentString) { - UserAgent ua = null; - - if (userAgentString.startsWith(PREFIX_REGULAR)) { - if (userAgentString.contains(SUFFIX_MSYSGIT)) { - ua = MSYSGIT; - } else { - ua = GIT; - } - } else if (userAgentString.startsWith(PREFIX_LFS)) { - ua = GIT_LFS; + String lowerUserAgent = toLower(userAgentString); + + if (isJGit(lowerUserAgent)) { + return JGIT; + } else if (isMsysGit(lowerUserAgent)) { + return MSYSGIT; + } else if (isGitLFS(lowerUserAgent)) { + return GIT_LFS; + } else if (isGit(lowerUserAgent)) { + return GIT; + } else { + return null; } - - return ua; + } + + private String toLower(String value) { + return Strings.nullToEmpty(value).toLowerCase(Locale.ENGLISH); + } + + private boolean isJGit(String userAgent) { + return userAgent.startsWith(PREFIX_JGIT); + } + + private boolean isMsysGit(String userAgent) { + return userAgent.startsWith(PREFIX_REGULAR) && userAgent.contains(SUFFIX_MSYSGIT); + } + + private boolean isGitLFS(String userAgent) { + return userAgent.startsWith(PREFIX_LFS); + } + + private boolean isGit(String userAgent) { + return userAgent.startsWith(PREFIX_REGULAR); } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitUserAgentProviderTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitUserAgentProviderTest.java index 67c2be69de..bdb607ecb1 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitUserAgentProviderTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitUserAgentProviderTest.java @@ -58,6 +58,7 @@ public class GitUserAgentProviderTest public void testParseUserAgent() { assertEquals(GitUserAgentProvider.GIT, parse("git/1.7.9.5")); + assertEquals(GitUserAgentProvider.JGIT, parse("jgit/4.5.2")); assertEquals(GitUserAgentProvider.GIT_LFS, parse("git-lfs/2.0.1 (GitHub; windows amd64; go 1.8; git 678cdbd4)")); assertEquals(GitUserAgentProvider.MSYSGIT, parse("git/1.8.3.msysgit.0")); assertNull(parse("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36"));