summary refs log tree commit diff stats
path: root/pkgs/by-name/ba/back/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/ba/back/src/main.rs')
-rw-r--r--pkgs/by-name/ba/back/src/main.rs49
1 files changed, 49 insertions, 0 deletions
diff --git a/pkgs/by-name/ba/back/src/main.rs b/pkgs/by-name/ba/back/src/main.rs
new file mode 100644
index 0000000..d0b0f81
--- /dev/null
+++ b/pkgs/by-name/ba/back/src/main.rs
@@ -0,0 +1,49 @@
+// Back - An extremely simple git issue tracking system. Inspired by tvix's
+// panettone
+//
+// Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+// SPDX-License-Identifier: AGPL-3.0-or-later
+//
+// This file is part of Back.
+//
+// You should have received a copy of the License along with this program.
+// If not, see <https://www.gnu.org/licenses/agpl.txt>.
+
+use std::{env::args, path::PathBuf, process, sync::OnceLock};
+
+use gix::ThreadSafeRepository;
+use rocket::{launch, routes};
+
+use crate::issues::{closed, open, show_issue, styles};
+
+mod issues;
+
+static REPOSITORY: OnceLock<ThreadSafeRepository> = OnceLock::new();
+
+#[launch]
+fn rocket() -> _ {
+    let repository_path = {
+        let maybe_path = args().skip(1).rev().last();
+        if let Some(path) = maybe_path {
+            PathBuf::from(path)
+        } else {
+            eprintln!("Usage: back <issue repoitory>");
+            process::exit(1);
+        }
+    };
+
+    REPOSITORY
+        .set(
+            ThreadSafeRepository::open(&repository_path).unwrap_or_else(|err| {
+                eprintln!(
+                    "Error while opening repository ('{}'): {} ",
+                    repository_path.display(),
+                    err
+                );
+                process::exit(1);
+            }),
+        )
+        .expect("There should be only one thread accessing this right now");
+
+    rocket::build().mount("/", routes![open, closed, show_issue, styles])
+}