import jetbrains.buildServer.buildTriggers.vcs.git.GitVcsRoot;
import jetbrains.buildServer.buildTriggers.vcs.git.PluginConfig;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
/**
* @author dmitry.neverov
boolean isProvideCredHelper();
+ /**
+ * Returns charset name for git output or null if the default charset should be used
+ */
+ @Nullable
+ String getGitOutputCharsetName();
+
/**
* Defines how progress output from git commands is written into build log
*/
import java.io.*;
import java.nio.charset.Charset;
+import java.nio.charset.UnsupportedCharsetException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
if (reason != null)
throw new CheckoutCanceledException(reason);
}
+
+ @Override
+ public Charset getCharset() {
+ // Override the method instead of using the setCharset(), because
+ // setCharset() adds the '-Dfile.encoding={charset}' parameter to
+ // the parameter list which makes git to fail.
+ AgentPluginConfig config = myCtx.getConfig();
+ if (config == null)
+ return super.getCharset();
+ String charsetName = config.getGitOutputCharsetName();
+ if (charsetName == null)
+ return super.getCharset();
+ try {
+ return Charset.forName(charsetName);
+ } catch (UnsupportedCharsetException e) {
+ return super.getCharset();
+ }
+ }
}
import jetbrains.buildServer.util.StringUtil;
import org.apache.log4j.Logger;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.Map;
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 static final String USE_DEFAULT_CHARSET = "teamcity.git.useDefaultCharset";
+ private static final String GIT_OUTPUT_CHARSET = "teamcity.git.outputCharset";
private final BuildAgentConfiguration myAgentConfig;
private final AgentRunningBuild myBuild;
return !"false".equals(value);
}
+ @Nullable
+ @Override
+ public String getGitOutputCharsetName() {
+ String useDefault = myBuild.getSharedConfigParameters().get(USE_DEFAULT_CHARSET);
+ if (Boolean.valueOf(useDefault))
+ return null;
+ String charsetName = myBuild.getSharedConfigParameters().get(GIT_OUTPUT_CHARSET);
+ return StringUtil.isNotEmpty(charsetName) ? charsetName : "UTF-8";
+ }
+
private int parseTimeout(String valueFromBuild) {
return parseTimeout(valueFromBuild, DEFAULT_IDLE_TIMEOUT);
}