Ability to disable credential helper provided by TeamCity
authorDmitry Neverov <dmitry.neverov@gmail.com>
Thu, 27 Jul 2017 18:56:09 +0000 (20:56 +0200)
committerDmitry Neverov <dmitry.neverov@gmail.com>
Thu, 27 Jul 2017 18:56:09 +0000 (20:56 +0200)
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/AgentPluginConfig.java
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/BuildContext.java
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/Context.java
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/GitAgentVcsSupport.java
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/GitCommandLine.java
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/NoBuildContext.java
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/PluginConfigImpl.java
git-agent/src/jetbrains/buildServer/buildTriggers/vcs/git/agent/UpdaterImpl.java

index 57e801d2dccf6f0eb5dd8e6fa70a58e3f91fcba2..6d2f37e098d9e9115d2ab9aefdc50e3b1251f339 100644 (file)
@@ -66,6 +66,8 @@ public interface AgentPluginConfig extends PluginConfig {
 
   boolean isCleanCredHelperScript();
 
+  boolean isProvideCredHelper();
+
   /**
    * Defines how progress output from git commands is written into build log
    */
index 32f4b5c4249d184b0c611532a5494bf7bb435fa5..704c936f32a1a706fa2309da5261ac66f87b5a0d 100644 (file)
@@ -25,9 +25,12 @@ import org.jetbrains.annotations.Nullable;
 public class BuildContext implements Context {
 
   private final AgentRunningBuild myBuild;
+  private final AgentPluginConfig myConfig;
 
-  public BuildContext(@NotNull AgentRunningBuild build) {
+  public BuildContext(@NotNull AgentRunningBuild build,
+                      @NotNull AgentPluginConfig config) {
     myBuild = build;
+    myConfig = config;
   }
 
   @Nullable
@@ -43,4 +46,9 @@ public class BuildContext implements Context {
       return value;
     return null;
   }
+
+  @Override
+  public boolean isProvideCredHelper() {
+    return myConfig.isProvideCredHelper();
+  }
 }
index 47726d2e200c8b637d07467bfc7792d827ea942c..c214f8fb9374e95cc5a2945c5082d7e04888ca10 100644 (file)
@@ -27,4 +27,6 @@ public interface Context {
   @Nullable
   String getSshMacType();
 
+  boolean isProvideCredHelper();
+
 }
index 972082eca00b1167516b1ff46fc97544a59b92a5..0c560d00bd6d1bfc1ee105e35c5ee113ecbc35a7 100644 (file)
@@ -94,7 +94,7 @@ public class GitAgentVcsSupport extends AgentVcsSupport implements UpdateByCheck
                             boolean cleanCheckoutRequested) throws VcsException {
     AgentPluginConfig config = myConfigFactory.createConfig(build, root);
     Map<String, String> env = getGitCommandEnv(config, build);
-    GitFactory gitFactory = myGitMetaFactory.createFactory(mySshService, config, getLogger(build, config), build.getBuildTempDirectory(), env, new BuildContext(build));
+    GitFactory gitFactory = myGitMetaFactory.createFactory(mySshService, config, getLogger(build, config), build.getBuildTempDirectory(), env, new BuildContext(build, config));
     Pair<CheckoutMode, File> targetDirAndMode = getTargetDirAndMode(config, rules, checkoutDirectory);
     CheckoutMode mode = targetDirAndMode.first;
     File targetDir = targetDirAndMode.second;
index 4a50385c13fb40bd2357d42ae4efb83de08291eb..ecd8886f081932d9ff5e9e041c4d8ac3d8c94ffc 100644 (file)
@@ -77,7 +77,7 @@ public class GitCommandLine extends GeneralCommandLine {
 
   public ExecResult run(@NotNull GitCommandSettings settings) throws VcsException {
     AuthSettings authSettings = settings.getAuthSettings();
-    if (!getParametersList().getParametersString().contains("credential.helper") && !myGitVersion.isLessThan(UpdaterImpl.EMPTY_CRED_HELPER)) {
+    if (myCtx.isProvideCredHelper() && !getParametersList().getParametersString().contains("credential.helper") && !myGitVersion.isLessThan(UpdaterImpl.EMPTY_CRED_HELPER)) {
       //Disable credential helper if it wasn't specified by us, as default
       //helper can require a user input. Do that even if our repository doesn't
       //require any auth, auth can be required by submodules or git lfs.
index 57bf0c834b28715ceb0625246bb312e6268d34c6..437250a22dd350535b3af657b5db005bc6040f55 100644 (file)
@@ -32,4 +32,9 @@ public class NoBuildContext implements Context {
   public String getSshMacType() {
     return null;
   }
+
+  @Override
+  public boolean isProvideCredHelper() {
+    return false;
+  }
 }
index 0c99fd5b7c17c727455715882b2ef9e4c00223cf..8b1206e5d968c53a3b1b7c73f4e27aa68c244a8d 100644 (file)
@@ -50,6 +50,7 @@ public class PluginConfigImpl implements AgentPluginConfig {
   public static final String FETCH_TAGS = "teamcity.git.fetchTags";
   public static final String EXCLUDE_USERNAME_FROM_HTTP_URL = "teamcity.git.excludeUsernameFromHttpUrl";
   public static final String CLEAN_CRED_HELPER_SCRIPT = "teamcity.git.cleanCredHelperScript";
+  public static final String PROVIDE_CRED_HELPER = "teamcity.git.provideCredentialHelper";
 
   private final BuildAgentConfiguration myAgentConfig;
   private final AgentRunningBuild myBuild;
@@ -254,6 +255,12 @@ public class PluginConfigImpl implements AgentPluginConfig {
     return !"false".equals(value);
   }
 
+  @Override
+  public boolean isProvideCredHelper() {
+    String value = myBuild.getSharedConfigParameters().get(PROVIDE_CRED_HELPER);
+    return !"false".equals(value);
+  }
+
   private int parseTimeout(String valueFromBuild) {
     return parseTimeout(valueFromBuild, DEFAULT_IDLE_TIMEOUT);
   }
index 40e2ae3f3a013a23388a0cdaba602dcea30207de..cc1b13c2c21bb8f5faa7aa980ab32e665e6e4382 100644 (file)
@@ -863,6 +863,8 @@ public class UpdaterImpl implements Updater {
 
 
   private void configureLFS(@NotNull BaseCommand command) {
+    if (!myPluginConfig.isProvideCredHelper())
+      return;
     Trinity<String, String, String> lfsAuth = getLfsAuth();
     if (lfsAuth == null)
       return;