import java.io.File;
import java.util.Map;
+import java.util.concurrent.TimeUnit;
/**
* @author dmitry.neverov
public static final String PROVIDE_CRED_HELPER = "teamcity.git.provideCredentialHelper";
private static final String USE_DEFAULT_CHARSET = "teamcity.git.useDefaultCharset";
private static final String GIT_OUTPUT_CHARSET = "teamcity.git.outputCharset";
+ private static final String LS_REMOTE_TIMEOUT_SECONDS = "teamcity.git.lsRemoteTimeoutSeconds";
private final BuildAgentConfiguration myAgentConfig;
private final AgentRunningBuild myBuild;
return StringUtil.isNotEmpty(charsetName) ? charsetName : "UTF-8";
}
+ @Override
+ public int getLsRemoteTimeoutSeconds() {
+ int defaultTimeoutSeconds = 5 * 60;
+ String valueFromBuild = myBuild.getSharedConfigParameters().get(LS_REMOTE_TIMEOUT_SECONDS);
+ if (valueFromBuild != null) {
+ return parseTimeout(valueFromBuild, defaultTimeoutSeconds);
+ } else {
+ return defaultTimeoutSeconds;
+ }
+ }
+
private int parseTimeout(String valueFromBuild) {
return parseTimeout(valueFromBuild, DEFAULT_IDLE_TIMEOUT);
}
private int parseTimeout(String valueFromBuild, int defaultValue) {
+ if (valueFromBuild == null)
+ return defaultValue;
try {
int timeout = Integer.parseInt(valueFromBuild);
if (timeout > 0)
private AuthSettings myAuthSettings;
private boolean myUseNativeSsh = false;
private int myAttemptsLimit = 3;
+ private int myTimeoutSeconds;
public LsRemoteCommandImpl(@NotNull GitCommandLine cmd) {
super(cmd);
return this;
}
+ @NotNull
+ @Override
+ public LsRemoteCommand setTimeout(int timeoutSeconds) {
+ myTimeoutSeconds = timeoutSeconds;
+ return this;
+ }
+
@NotNull
public List<Ref> call() throws VcsException {
GitCommandLine cmd = getCmd();
while (true) {
try {
ExecResult result = cmd.run(with()
+ .timeout(myTimeoutSeconds)
.authSettings(myAuthSettings)
.useNativeSsh(myUseNativeSsh));
return parse(result.getStdout());