diff options
Diffstat (limited to 'pkgs/by-name/ba/back/src/main.rs')
-rw-r--r-- | pkgs/by-name/ba/back/src/main.rs | 49 |
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]) +} |