Пример #1
0
        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
        }
Пример #2
0
        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
        }