private IGitTfsRemote InitBranchSupportingRename(string tfsBranchPath, string gitBranchNameExpected, IList<RootBranch> creationBranchData, IGitTfsRemote defaultRemote, out IFetchResult fetchResult)
{
fetchResult = null;
RemoveAlreadyFetchedBranches(creationBranchData, defaultRemote);
Trace.TraceInformation("Branches to Initialize successively :");
foreach (var branch in creationBranchData)
Trace.TraceInformation("-" + branch.TfsBranchPath + " (" + branch.SourceBranchChangesetId + ")");
IGitTfsRemote branchTfsRemote = null;
var remoteToDelete = new List<IGitTfsRemote>();
foreach (var rootBranch in creationBranchData)
{
Trace.WriteLine("Processing " + (rootBranch.IsRenamedBranch ? "renamed " : string.Empty) + "branch :"
+ rootBranch.TfsBranchPath + " (" + rootBranch.SourceBranchChangesetId + ")");
var cbd = new BranchCreationDatas() { RootChangesetId = rootBranch.SourceBranchChangesetId, TfsRepositoryPath = rootBranch.TfsBranchPath };
if (cbd.TfsRepositoryPath == tfsBranchPath)
cbd.GitBranchNameExpected = gitBranchNameExpected;
branchTfsRemote = defaultRemote.InitBranch(_remoteOptions, cbd.TfsRepositoryPath, cbd.RootChangesetId, !NoFetch, cbd.GitBranchNameExpected, fetchResult);
if (branchTfsRemote == null)
{
throw new GitTfsException("error: Couldn't fetch parent branch\n");
}
// If this branch's branch point is past the first commit, indicate this so Fetch can start from that point
if (rootBranch.TargetBranchChangesetId > -1)
{
branchTfsRemote.SetInitialChangeset(rootBranch.TargetBranchChangesetId);
}
if (rootBranch.IsRenamedBranch || !NoFetch)
{
fetchResult = FetchRemote(branchTfsRemote, false, !DontCreateGitBranch && !rootBranch.IsRenamedBranch, fetchResult, rootBranch.TargetBranchChangesetId);
if (fetchResult.IsSuccess && rootBranch.IsRenamedBranch)
remoteToDelete.Add(branchTfsRemote);
}
else
Trace.WriteLine("Not fetching changesets, --no-fetch option specified");
}
foreach (var gitTfsRemote in remoteToDelete)
{
_globals.Repository.DeleteTfsRemote(gitTfsRemote);
}
return RemoteCreated = branchTfsRemote;
}