Exemplo n.º 1
0
        static async Task <int> Main(string[] args)
        {
            var app = new CommandLineApplication
            {
                Name        = "SmartBackup",
                Description = "A simple and secure backup tool"
            };

            app.HelpOption(inherited: true);

            app.Command("backup", backupCmd =>
            {
                backupCmd.Description = "Create a backup of specified directory";

                var sourceDirOption = backupCmd
                                      .Option("-s|--source-dir <PATH>", "Source directory to create backup", CommandOptionType.MultipleValue)
                                      .IsRequired()
                                      .Accepts(v => v.ExistingDirectory());

                var targetDirOption = backupCmd
                                      .Option("-t|--target-dir <PATH>", "Target directory to put backup", CommandOptionType.SingleValue)
                                      .IsRequired()
                                      .Accepts(v => v.LegalFilePath());

                var passwordOption = backupCmd
                                     .Option("-p|--password <PASSWORD>", "Password to encrypt backup files", CommandOptionType.SingleValue);

                var maxBackupSetsOption = backupCmd
                                          .Option <int>("-m|--max-backup <COUNT>", "Keep max backup sets and delete the oldest ones", CommandOptionType.SingleValue)
                                          .Accepts(v => v.Range(0, 1000));

                backupCmd.OnExecuteAsync((cancellationToken) =>
                {
                    var param = new BackupParam(sourceDirOption.Values, targetDirOption.Value(), passwordOption.Value(), maxBackupSetsOption.ParsedValue);
                    return(RunHostAsync <BackupCommand, BackupParam>(args, param, cancellationToken));
                });
            });

            app.VersionOption("-v|--version", typeof(Program).Assembly.GetCustomAttribute <AssemblyInformationalVersionAttribute>().InformationalVersion);

            app.OnExecute(() =>
            {
                app.Error.WriteLine("Specify a subcommand");
                app.ShowHelp();
                return(1);
            });

            try
            {
                return(await app.ExecuteAsync(args));
            }
            catch (CommandParsingException ex)
            {
                app.Error.WriteLine(ex.Message);
                return(-1);
            }
        }
Exemplo n.º 2
0
 public BackupCommand(
     IHostApplicationLifetime hostApplicationLifetime,
     ILogger <BackupCommand> logger,
     SHA256Generator hashGenerator,
     BackupParam backupParam,
     RecursiveFileEnumerator recursiveFileEnumerator,
     SevenZipCli sevenZipCli,
     IFileSystem fileSystem)
 {
     _hostApplicationLifetime = hostApplicationLifetime;
     _logger                  = logger;
     _hashGenerator           = hashGenerator;
     _backupParam             = backupParam;
     _recursiveFileEnumerator = recursiveFileEnumerator;
     _sevenZipCli             = sevenZipCli;
     _fileSystem              = fileSystem;
 }