private void goButton_Click(object sender, EventArgs e)
{
try
{
OpenLog(logTextBox.Text);
logger.WriteLine("VSS2Git version {0}", Assembly.GetExecutingAssembly().GetName().Version);
WriteSettings();
Encoding encoding = Encoding.Default;
EncodingInfo encodingInfo;
if (codePages.TryGetValue(encodingComboBox.SelectedIndex, out encodingInfo))
{
encoding = encodingInfo.GetEncoding();
}
logger.WriteLine("VSS encoding: {0} (CP: {1}, IANA: {2})",
encoding.EncodingName, encoding.CodePage, encoding.WebName);
logger.WriteLine("Comment transcoding: {0}",
transcodeCheckBox.Checked ? "enabled" : "disabled");
logger.WriteLine("Ignore errors: {0}",
ignoreErrorsCheckBox.Checked ? "enabled" : "disabled");
var df = new VssDatabaseFactory(vssDirTextBox.Text);
df.Encoding = encoding;
var db = df.Open();
var path = vssProjectTextBox.Text;
VssItem item;
try
{
item = db.GetItem(path);
}
catch (VssPathException ex)
{
MessageBox.Show(ex.Message, "Invalid project path",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
var project = item as VssProject;
if (project == null)
{
MessageBox.Show(path + " is not a project", "Invalid project path",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
revisionAnalyzer = new RevisionAnalyzer(workQueue, logger, db);
if (!string.IsNullOrEmpty(excludeTextBox.Text))
{
revisionAnalyzer.ExcludeFiles = excludeTextBox.Text;
}
revisionAnalyzer.AddItem(project);
changesetBuilder = new ChangesetBuilder(workQueue, logger, revisionAnalyzer);
changesetBuilder.AnyCommentThreshold = TimeSpan.FromSeconds((double)anyCommentUpDown.Value);
changesetBuilder.SameCommentThreshold = TimeSpan.FromSeconds((double)sameCommentUpDown.Value);
changesetBuilder.BuildChangesets();
if (!string.IsNullOrEmpty(outDirTextBox.Text))
{
var gitExporter = new GitExporter(workQueue, logger,
revisionAnalyzer, changesetBuilder);
if (!string.IsNullOrEmpty(domainTextBox.Text))
{
gitExporter.EmailDomain = domainTextBox.Text;
}
if (!transcodeCheckBox.Checked)
{
gitExporter.CommitEncoding = encoding;
}
gitExporter.IgnoreErrors = ignoreErrorsCheckBox.Checked;
gitExporter.ExportToGit(outDirTextBox.Text);
}
workQueue.Idle += delegate
{
logger.Dispose();
logger = Logger.Null;
};
statusTimer.Enabled = true;
goButton.Enabled = false;
}
catch (Exception ex)
{
ShowException(ex);
}
}