diff --git a/GitTfs.VsCommon/TfsHelper.PostVs2010.Common.cs b/GitTfs.VsCommon/TfsHelper.PostVs2010.Common.cs index 374a337e..e58f9ee7 100644 --- a/GitTfs.VsCommon/TfsHelper.PostVs2010.Common.cs +++ b/GitTfs.VsCommon/TfsHelper.PostVs2010.Common.cs @@ -87,6 +87,7 @@ namespace Sep.Git.Tfs.VsCommon private void GetRootChangesetForBranch(IList rootBranches, string tfsPathBranchToCreate, string tfsPathParentBranch = null) { + Trace.WriteLine("Looking for root changeset for branch:" + tfsPathBranchToCreate); try { if (!CanGetBranchInformation) @@ -201,14 +202,37 @@ namespace Sep.Git.Tfs.VsCommon { renameFromBranch = null; merges = (merges ?? new ExtendedMerge[] {}).ToArray(); - var merge = merges.LastOrDefault(m => m.SourceItem.Item.ServerItem.Equals(tfsPathParentBranch, StringComparison.InvariantCultureIgnoreCase)) - ?? merges.LastOrDefault(); + var merge = merges.LastOrDefault(m => m.SourceItem.Item.ServerItem.Equals(tfsPathParentBranch, StringComparison.InvariantCultureIgnoreCase)); + if (merge == null) + { + Trace.WriteLine("Took last merge found because no one satisfying conditions!"); + merge = merges.LastOrDefault(); + } if (merge == null) { throw new GitTfsException("An unexpected error occured when trying to find the root changeset.\nFailed to find root changeset for " + tfsPathBranchToCreate + " branch in " + tfsPathParentBranch + " branch"); } + var changes = "Merge changetype:"; + bool first = true; + foreach (ChangeType changeType in Enum.GetValues(typeof(ChangeType))) + { + if (merge.SourceItem.ChangeType.HasFlag(changeType)) + { + if (first) + first = false; + else + changes += " | "; + changes += changeType.ToString("G"); + } + } + Trace.WriteLine("Merge ChangesetId:" + merge.SourceChangeset.ChangesetId); + Trace.WriteLine(changes); + Trace.WriteLine("Merge ServerItem:" + merge.SourceItem.Item.ServerItem); + if (merge.TargetItem.Item != null) + Trace.WriteLine("Merge TargetItem:" + merge.TargetItem.Item); + if (merge.SourceItem.ChangeType.HasFlag(ChangeType.Rename)) renameFromBranch = merge.TargetItem.Item; diff --git a/GitTfs/Commands/InitBranch.cs b/GitTfs/Commands/InitBranch.cs index ba57b27d..86e9b071 100644 --- a/GitTfs/Commands/InitBranch.cs +++ b/GitTfs/Commands/InitBranch.cs @@ -88,8 +88,14 @@ namespace Sep.Git.Tfs.Commands creationBranchData = defaultRemote.Tfs.GetRootChangesetForBranch(tfsBranchPath, tfsRepositoryPathParentBranchFound.TfsRepositoryPath); } + + _stdout.WriteLine("Branches to Initialize successively :"); + foreach (var branch in creationBranchData) + _stdout.WriteLine("-" + branch.TfsBranchPath + " (" + branch.RootChangeset + ")"); + foreach (var rootBranch in creationBranchData) { + Trace.WriteLine("Processing " + (rootBranch.IsRenamedBranch ? "renamed " : string.Empty) + "branch :" + rootBranch.TfsBranchPath + " (" + rootBranch.RootChangeset + ")"); var cbd = new BranchCreationDatas() { RootChangesetId = rootBranch.RootChangeset, TfsRepositoryPath = rootBranch.TfsBranchPath }; if (cbd.TfsRepositoryPath == tfsBranchPath) cbd.GitBranchNameExpected = gitBranchNameExpected; @@ -98,6 +104,9 @@ namespace Sep.Git.Tfs.Commands if (string.IsNullOrWhiteSpace(cbd.Sha1RootCommit)) throw new GitTfsException("error: The root changeset " + cbd.RootChangesetId + " have not be found in the Git repository. The branch containing the changeset should not have been created. Please do it before retrying!!\n"); + + Trace.WriteLine("Found commit " + cbd.Sha1RootCommit + " for changeset :" + cbd.RootChangesetId); + var tfsRemote = CreateBranch(defaultRemote, cbd.TfsRepositoryPath, cbd.Sha1RootCommit, cbd.GitBranchNameExpected); RemoteCreated = tfsRemote; if (rootBranch.IsRenamedBranch || !NoFetch)