private int CreateLabelsForTfsBranch(IGitTfsRemote tfsRemote)
{
if (string.IsNullOrWhiteSpace(NameFilter))
NameFilter = null;
else
NameFilter = NameFilter.Trim();
UpdateRemote(tfsRemote);
Trace.TraceInformation("Looking for label on " + tfsRemote.TfsRepositoryPath + "...");
var labels = tfsRemote.Tfs.GetLabels(tfsRemote.TfsRepositoryPath, NameFilter);
Trace.TraceInformation(labels.Count() + " labels found!");
Regex exludeRegex = null;
if (ExcludeNameFilter != null)
exludeRegex = new Regex(ExcludeNameFilter);
foreach (var label in labels)
{
if (ExcludeNameFilter != null && exludeRegex.IsMatch(label.Name))
continue;
Trace.WriteLine("LabelId:" + label.Id + "/ChangesetId:" + label.ChangesetId + "/LabelName:" + label.Name + "/Owner:" + label.Owner);
Trace.WriteLine("Try to find changeset in git repository...");
string sha1TagCommit = _globals.Repository.FindCommitHashByChangesetId(label.ChangesetId);
if (string.IsNullOrWhiteSpace(sha1TagCommit))
{
Trace.WriteLine("This label does not match an existing commit...");
continue;
}
Trace.WriteLine("Commit found! sha1 : " + sha1TagCommit);
string ownerName;
string ownerEmail;
if (_authors.Authors.ContainsKey(label.Owner))
{
var author = _authors.Authors[label.Owner];
ownerName = author.Name;
ownerEmail = author.Email;
}
else
{
ownerName = label.Owner;
ownerEmail = label.Owner;
}
var labelName = (label.IsTransBranch ? label.Name + "(" + tfsRemote.Id + ")" : label.Name).ToGitRefName();
Trace.TraceInformation("Writing label '" + labelName + "'...");
_globals.Repository.CreateTag(labelName, sha1TagCommit, label.Comment, ownerName, ownerEmail, label.Date);
}
return GitTfsExitCodes.OK;
}