diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfig.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfig.java index a3210b4f14..1ff338a7fd 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfig.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfig.java @@ -57,6 +57,17 @@ public class HgConfig extends SimpleRepositoryConfig //~--- get methods ---------------------------------------------------------- + /** + * Method description + * + * + * @return + */ + public String getEncoding() + { + return encoding; + } + /** * Method description * @@ -111,11 +122,22 @@ public class HgConfig extends SimpleRepositoryConfig public boolean isValid() { return super.isValid() && Util.isNotEmpty(hgBinary) - && Util.isNotEmpty(pythonBinary); + && Util.isNotEmpty(pythonBinary); } //~--- set methods ---------------------------------------------------------- + /** + * Method description + * + * + * @param encoding + */ + public void setEncoding(String encoding) + { + this.encoding = encoding; + } + /** * Method description * @@ -162,6 +184,9 @@ public class HgConfig extends SimpleRepositoryConfig //~--- fields --------------------------------------------------------------- + /** Field description */ + private String encoding = "UTF-8"; + /** Field description */ private String hgBinary; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java index 7c61381149..073cef716d 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java @@ -38,6 +38,11 @@ package sonia.scm.repository.spi; import com.aragost.javahg.Repository; import com.aragost.javahg.RepositoryConfiguration; +import com.google.common.base.Charsets; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import sonia.scm.repository.HgConfig; import sonia.scm.repository.spi.javahg.HgFileviewExtension; @@ -47,6 +52,8 @@ import java.io.Closeable; import java.io.File; import java.io.IOException; +import java.nio.charset.Charset; + /** * * @author Sebastian Sdorra @@ -54,6 +61,14 @@ import java.io.IOException; public class HgCommandContext implements Closeable { + /** + * the logger for HgCommandContext + */ + private static final Logger logger = + LoggerFactory.getLogger(HgCommandContext.class); + + //~--- constructors --------------------------------------------------------- + /** * Constructs ... * @@ -99,6 +114,22 @@ public class HgCommandContext implements Closeable repoConfiguration.addExtension(HgFileviewExtension.class); + try + { + Charset charset = Charset.forName(config.getEncoding()); + + if (logger.isTraceEnabled()) + { + logger.trace("set encoding {} for mercurial", config.getEncoding()); + } + + repoConfiguration.setEncoding(charset); + } + catch (IllegalArgumentException ex) + { + logger.error("could not set encoding for mercurial", ex); + } + repoConfiguration.setHgBin(config.getHgBinary()); repository = Repository.open(repoConfiguration, directory); } diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js index d7c6fe0950..8c6900fd74 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js +++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/hg.config.js @@ -43,6 +43,7 @@ Sonia.hg.ConfigPanel = Ext.extend(Sonia.config.ConfigForm, { useOptimizedBytecodeText: 'Optimized Bytecode (.pyo)', configWizardText: 'Start Configuration Wizard', configWizardLabelText: 'Start Configuration Wizard', + encodingText: 'Encoding', disabledText: 'Disabled', // helpText @@ -51,6 +52,7 @@ Sonia.hg.ConfigPanel = Ext.extend(Sonia.config.ConfigForm, { pythonPathHelpText: 'Python Module Search Path (PYTHONPATH).', repositoryDirectoryHelpText: 'Location of the Mercurial repositories.', useOptimizedBytecodeHelpText: 'Use the Python "-O" switch.', + encodingHelpText: 'Repository Encoding.', disabledHelpText: 'Enable or disable the Mercurial plugin. \n\ Note you have to reload the page, after changing this value.', @@ -81,6 +83,12 @@ Sonia.hg.ConfigPanel = Ext.extend(Sonia.config.ConfigForm, { fieldLabel: this.repositoryDirectoryText, helpText: this.repositoryDirectoryHelpText, allowBlank : false + },{ + xtype: 'textfield', + name: 'encoding', + fieldLabel: this.encodingText, + helpText: this.encodingHelpText, + allowBlank : false },{ xtype: 'checkbox', name: 'useOptimizedBytecode',