private async ValueTask DoMain(CommandLineOptions options) { var logger = new Logger { TraceEnabled = options.TraceLog }; CmdUtil.NoCacheWarn(options.CacheFilePath); await using var mapping = new ObjectIdCache(options.CacheFilePath); using var rootdirRepo = CmdUtil.PrepareRepository(options.RootdirPath, "rootdir repository", maxDepth: 1, allowEmpty: false, allowRemote: options.PushAfterCommit, mustLocalTailingMessage: " if --push is not specified"); using var subdirRepo = CmdUtil.PrepareRepository(options.SubdirRepoPath, "subdir repository", maxDepth: options.MaxDepth, allowEmpty: false, allowRemote: true); var subdirDesc = CmdUtil.GetDescription( descriptionRepository: subdirRepo, descriptionByOption: options.SubdirRepoDesc, otherRepository: rootdirRepo, repositoryType: "subdir"); var backCopyOptions = new BackCopyOptions(subdirDesc: subdirDesc) { ObjectMapping = mapping, DirInSrcs = options.DirInSrcs, Branches = CmdUtil.Branches(options.BranchNames, subdirRepo), MaxDepth = options.MaxDepth, Logger = logger, }; using ICopyCommitProgressHandler progressHandler = options.TraceLog ? new NopProgressBarCopyCommitProgressHandler() : new ConsoleProgressBarCopyCommitProgressHandler(); var main = new BackCopyCommitMain(backCopyOptions); main.DoMain(rootdirRepo, subdirRepo, progressHandler); #if SUPPORT_REMOTE_REPOSITORY if (options.PushAfterCommit) { var branches = CmdUtil.Branches(options.BranchNames, rootdirRepo, notFoundError: false, remoteTrackingError: false); foreach (var branch in branches) { if (branch.RemoteName == null) { rootdirRepo.Config.Set($"branch.{branch.FriendlyName}.remote", $"origin"); } } rootdirRepo.Network.Push(branches, new PushOptions()); } #endif }
public void DoMain(Repository rootdirRepo, Repository subdirRepo, ICopyCommitProgressHandler progressHandler) { var copyContext = new CopyCommitContext(progressHandler, _objectMapping, new CopyCommitCallback(_options)); // ReSharper disable AccessToDisposedClosure RecursiveCaller.Call(async() => { progressHandler.OnFoundNewCommit(_options.Branches.Count); foreach (var convertBranch in _options.Branches) { await CopyBranch(rootdirRepo, subdirRepo, convertBranch, copyContext); } }); // ReSharper restore AccessToDisposedClosure }