Sep.Git.Tfs.Commands.InitBranch.InitBranchSupportingRename C# (CSharp) Method

InitBranchSupportingRename() private method

private InitBranchSupportingRename ( string tfsBranchPath, string gitBranchNameExpected, IList creationBranchData, IGitTfsRemote defaultRemote, IFetchResult &fetchResult ) : IGitTfsRemote
tfsBranchPath string
gitBranchNameExpected string
creationBranchData IList
defaultRemote IGitTfsRemote
fetchResult IFetchResult
return IGitTfsRemote
        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;
        }