summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--pkgs/by-name/ba/back/Cargo.lock1
-rw-r--r--pkgs/by-name/ba/back/Cargo.toml1
-rw-r--r--pkgs/by-name/ba/back/src/issues/issue/mod.rs4
-rw-r--r--pkgs/by-name/ba/back/src/issues/mod.rs11
-rw-r--r--pkgs/by-name/ba/back/src/main.rs21
5 files changed, 35 insertions, 3 deletions
diff --git a/pkgs/by-name/ba/back/Cargo.lock b/pkgs/by-name/ba/back/Cargo.lock
index 4803593..ed7f120 100644
--- a/pkgs/by-name/ba/back/Cargo.lock
+++ b/pkgs/by-name/ba/back/Cargo.lock
@@ -146,6 +146,7 @@ dependencies = [
  "rocket",
  "serde",
  "serde_json",
+ "url",
 ]
 
 [[package]]
diff --git a/pkgs/by-name/ba/back/Cargo.toml b/pkgs/by-name/ba/back/Cargo.toml
index 3e81ec8..f697511 100644
--- a/pkgs/by-name/ba/back/Cargo.toml
+++ b/pkgs/by-name/ba/back/Cargo.toml
@@ -28,6 +28,7 @@ markdown = "1.0.0-alpha.21"
 rocket = "0.5.1"
 serde = "1.0.216"
 serde_json = "1.0.134"
+url = "2.5.4"
 
 [profile.release]
 lto = true
diff --git a/pkgs/by-name/ba/back/src/issues/issue/mod.rs b/pkgs/by-name/ba/back/src/issues/issue/mod.rs
index ada7593..b78f473 100644
--- a/pkgs/by-name/ba/back/src/issues/issue/mod.rs
+++ b/pkgs/by-name/ba/back/src/issues/issue/mod.rs
@@ -16,6 +16,8 @@ use gix::{bstr::ByteSlice, Commit, Id, ObjectId, Repository};
 use raw::{Operation, RawIssue};
 use rocket::response::content::RawHtml;
 
+use crate::SOURCE_CODE_REPOSITORY;
+
 use super::format::{BackString, Markdown};
 
 mod raw;
@@ -315,6 +317,7 @@ impl<'a> Issue<'a> {
          <footer>
             <nav>
             <a href="/issues/open">Open Issues</a>
+            <a href="{}">Source code</a>
             <a href="/issues/closed">Closed Issues</a>
             </nav>
          </footer>
@@ -322,6 +325,7 @@ impl<'a> Issue<'a> {
    </body>
 </html>
 "#,
+                SOURCE_CODE_REPOSITORY.get().expect("This should be set")
             ))
         }
     }
diff --git a/pkgs/by-name/ba/back/src/issues/mod.rs b/pkgs/by-name/ba/back/src/issues/mod.rs
index df3e57e..744d5ba 100644
--- a/pkgs/by-name/ba/back/src/issues/mod.rs
+++ b/pkgs/by-name/ba/back/src/issues/mod.rs
@@ -11,7 +11,11 @@
 
 use std::path::Path;
 
-use crate::issues::issue::{Issue, Status};
+use crate::{
+    issues::issue::{Issue, Status},
+    SOURCE_CODE_REPOSITORY,
+};
+use format::BackString;
 use gix::{refs::Target, Repository};
 use issue_show::BackPrefix;
 use rocket::{
@@ -74,6 +78,7 @@ pub fn issue_list_boilerplate(wanted_status: Status, counter_status: Status) ->
          <main>
             <div class="issue-links">
                <a href="/issues/{counter_status_lower}/">View {counter_status} issues</a>
+               <a href="{}">Source code</a>
                <!--
                <form class="issue-search" method="get">
                    <input name="search" title="Issue search query" type="search">
@@ -82,14 +87,14 @@ pub fn issue_list_boilerplate(wanted_status: Status, counter_status: Status) ->
                -->
             </div>
             <ol class="issue-list">
-            {}
+            {issue_list}
             </ol>
          </main>
       </div>
    </body>
 </html>
 "#,
-        issue_list
+        SOURCE_CODE_REPOSITORY.get().expect("This should be set")
     ))
 }
 
diff --git a/pkgs/by-name/ba/back/src/main.rs b/pkgs/by-name/ba/back/src/main.rs
index d0b0f81..86fe196 100644
--- a/pkgs/by-name/ba/back/src/main.rs
+++ b/pkgs/by-name/ba/back/src/main.rs
@@ -13,12 +13,14 @@ use std::{env::args, path::PathBuf, process, sync::OnceLock};
 
 use gix::ThreadSafeRepository;
 use rocket::{launch, routes};
+use url::Url;
 
 use crate::issues::{closed, open, show_issue, styles};
 
 mod issues;
 
 static REPOSITORY: OnceLock<ThreadSafeRepository> = OnceLock::new();
+static SOURCE_CODE_REPOSITORY: OnceLock<Url> = OnceLock::new();
 
 #[launch]
 fn rocket() -> _ {
@@ -31,6 +33,25 @@ fn rocket() -> _ {
             process::exit(1);
         }
     };
+    let source_code_url = {
+        match std::env::var("BACK_SOURCE_CODE_REPOSITORY_URL") {
+            Ok(value) => match Url::parse(&value) {
+                Ok(url) => url,
+                Err(err) => {
+                    eprintln!("Can't parse `BACK_SOURCE_CODE_REPOSITORY_URL` value as url: {err}");
+                    process::exit(1);
+                }
+            },
+            Err(err) => {
+                eprintln!("back needs you to specify a source code repositiory as `BACK_SOURCE_CODE_REPOSITORY_URL`: {err}");
+                process::exit(1);
+            }
+        }
+    };
+
+    SOURCE_CODE_REPOSITORY
+        .set(source_code_url)
+        .expect("This should be unset by this stage");
 
     REPOSITORY
         .set(