repomgr/Program.cs

151 lines
3.8 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace repomgr {
public static class Program {
public static RepoMgr Repo;
public static void Main(string[] args) {
if (args.Length < 2 || args[1].Equals("help"))
PrintHelp();
if (File.Exists("/tmp/repomgr.lock") && args[1] != "daemon") {
Console.WriteLine("/tmp/repomgr.lock exists, delete it if you are sure no other process is running");
Environment.Exit(1);
}
else if (args[1] != "daemon") {
File.Create("/tmp/repomgr.lock");
}
Repo = new RepoMgr(args[0]);
if (File.Exists(Path.Combine(args[0], "repomgr.index.json")))
Repo.ReadIndex();
switch (args[1]) {
case "daemon":
CreateHostBuilder(args).Build().Run();
break;
case "init":
if (args.Length != 4)
PrintHelp();
try {
Repo.Init(args[2], args[3]);
}
catch (Exception e) {
Console.WriteLine("Init failed with error: " + e);
}
break;
case "add":
if (args.Length < 3)
PrintHelp();
try {
foreach (var package in args[Range.StartAt(2)]) {
Repo.Add(package);
}
}
catch (Exception e) {
Console.WriteLine("Add failed with error: " + e);
}
break;
case "autoadd":
if (args.Length < 3)
PrintHelp();
try {
foreach (var package in args[Range.StartAt(2)]) {
Repo.Add(package);
}
foreach (var package in args[Range.StartAt(2)]) {
Repo.Build(package);
}
}
catch (Exception e) {
Console.WriteLine("AutoAdd failed with error: " + e);
}
break;
case "update":
if (args.Length < 3)
PrintHelp();
try {
foreach (var package in args[Range.StartAt(2)].Where(p => p != "-f")) {
Repo.Build(package, args.Contains("-f"), args.Contains("--skip-checks"));
}
}
catch (Exception e) {
Console.WriteLine("Update failed with error: " + e);
}
break;
case "update-all":
if (args.Length != 2)
PrintHelp();
try {
Repo.BuildAll();
}
catch (Exception e) {
Console.WriteLine("UpdateAll failed with error: " + e);
}
break;
case "remove":
if (args.Length < 3)
PrintHelp();
try {
foreach (var package in args[Range.StartAt(2)]) {
Repo.Remove(package);
}
}
catch (Exception e) {
Console.WriteLine("Remove failed with error: " + e);
}
break;
case "list":
if (args.Length != 2)
PrintHelp();
try {
Repo.List();
}
catch (Exception e) {
Console.WriteLine("List failed with error " + e);
}
break;
default:
PrintHelp();
break;
}
if (File.Exists("/tmp/repomgr.lock"))
File.Delete("/tmp/repomgr.lock");
}
private static void PrintHelp() {
Console.WriteLine("Usage:");
Console.WriteLine("repomgr <data-path> init <repo-path> <reponame>");
Console.WriteLine("repomgr <data-path> list");
Console.WriteLine("repomgr <data-path> add <package> [...]");
Console.WriteLine("repomgr <data-path> autoadd <package> [...]");
Console.WriteLine("repomgr <data-path> remove <package> [...]");
Console.WriteLine("repomgr <data-path> update <package> [...] [-f] [--skip-checks]");
Console.WriteLine("repomgr <data-path> update-all");
Console.WriteLine("repomgr <data-path> daemon");
if (File.Exists("/tmp/repomgr.lock"))
File.Delete("/tmp/repomgr.lock");
Environment.Exit(0);
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
}
}