summary history branches tags files
commit:5191a96b14cc1b962370377b43e8535e5d3485bf
author:Trevor Bentley
committer:Trevor Bentley
date:Sat Jan 14 20:58:39 2023 +0100
parents:0899d5146cccceb375e04e87a0261dbc9377a9d3
add configurable git clone URL
diff --git a/config.toml b/config.toml
line changes: +8/-0
index da788dd..0c976f1
--- a/config.toml
+++ b/config.toml
@@ -19,6 +19,13 @@
 # This is accessible in all templates.
 #site_description = ""
 
+# URL where the repositories can be cloned from.
+#
+# Use the "%REPO%" variable to substitute the repository name.
+#
+# This can also be set per-repository.
+#clone_url = "https://github.com/your_user/%REPO%"
+
 # Which branch to use for generating history.
 #
 # Itsy-Gitsy currently only supports traversing the history of a single branch,
@@ -509,6 +516,7 @@ generated_by = "Itsy-Gitsy"
 
 # Per-repository settings, same as the global versions described above:
 
+#clone_url              = "https://github.com/your_user/%REPO%"
 #branch                 = "master"
 #render_markdown        = false
 #syntax_highlighting    = false

diff --git a/src/generate.rs b/src/generate.rs
line changes: +1/-1
index 16019c1..1cc6611
--- a/src/generate.rs
+++ b/src/generate.rs
@@ -319,7 +319,7 @@ impl GitsyGenerator {
                 full_name: repo_desc.name.clone(),
                 description: repo_desc.description.clone(),
                 website: repo_desc.website.clone(),
-                clone: None,
+                clone: repo_desc.clone_url.clone(),
                 attributes: repo_desc.attributes.clone().unwrap_or_default(),
             };
             let parsed_repo = parse_repo(&repo, &name, &repo_desc, metadata).expect("Failed to analyze repo HEAD.");

diff --git a/src/settings.rs b/src/settings.rs
line changes: +18/-0
index 5991b17..5133fc8
--- a/src/settings.rs
+++ b/src/settings.rs
@@ -228,6 +228,7 @@ pub struct GitsySettingsRepo {
     pub path: PathBuf,
     pub name: Option<String>,
     pub description: Option<String>,
+    pub clone_url: Option<String>,
     pub website: Option<String>,
     pub branch: Option<String>,
     pub asset_files: Option<Vec<String>>,
@@ -271,6 +272,7 @@ pub struct GitsySettings {
     pub site_name: Option<String>,
     pub site_url: Option<String>,
     pub site_description: Option<String>,
+    pub clone_url: Option<String>,
     pub asset_files: Option<Vec<String>>,
     pub branch: Option<String>,
     #[serde(rename(deserialize = "gitsy_templates"))]
@@ -347,6 +349,12 @@ impl GitsySettings {
                     if repo.name.is_none() {
                         repo.name = Some(k.clone());
                     }
+                    if repo.clone_url.is_none() {
+                        repo.clone_url = match settings.clone_url.as_ref() {
+                            Some(url) => Some(url.replace("%REPO%", repo.name.as_deref().unwrap_or_default())),
+                            _ => None,
+                        };
+                    }
                     global_to_repo!(settings, repo, branch);
                     global_to_repo!(settings, repo, render_markdown);
                     global_to_repo!(settings, repo, syntax_highlight);
@@ -379,9 +387,14 @@ impl GitsySettings {
                     for dir in read_dir(parent).expect("Repo directory not found.") {
                         let dir = dir.expect("Repo contains invalid entries");
                         let name: String = dir.file_name().to_string_lossy().to_string();
+                        let clone_url = match settings.clone_url.as_ref() {
+                            Some(url) => Some(url.replace("%REPO%", &name)),
+                            _ => None,
+                        };
                         repo_descriptions.insert(GitsySettingsRepo {
                             path: dir.path().clone(),
                             name: Some(name),
+                            clone_url,
                             branch: settings.branch.clone(),
                             render_markdown: settings.render_markdown.clone(),
                             syntax_highlight: settings.syntax_highlight.clone(),
@@ -413,9 +426,14 @@ impl GitsySettings {
                 let name: String = dir.file_name()
                     .expect(&format!("Invalid repository path: {}", dir.display()))
                     .to_string_lossy().to_string();
+                let clone_url = match settings.clone_url.as_ref() {
+                    Some(url) => Some(url.replace("%REPO%", &name)),
+                    _ => None,
+                };
                 repo_descriptions.insert(GitsySettingsRepo {
                     path: dir.clone(),
                     name: Some(name),
+                    clone_url,
                     branch: settings.branch.clone(),
                     render_markdown: settings.render_markdown.clone(),
                     syntax_highlight: settings.syntax_highlight.clone(),

diff --git a/templates/header.html b/templates/header.html
line changes: +1/-5
index bf761ea..08d1fb1
--- a/templates/header.html
+++ b/templates/header.html
@@ -1,13 +1,9 @@
 <div class="banner">
   {% if name -%}
   <div class="site-title">{{name | default(value="unnamed repository") }}</div>
-  {% else -%}
-  <div class="site-title">{{site_name | default(value="Itsy-Gitsy") }}</div>
-  {% endif -%}
-
-  {% if name -%}
   <div class="site-description">{{metadata.description | default(value="") }}</div>
   {% else -%}
+  <div class="site-title">{{site_name | default(value="Itsy-Gitsy") }}</div>
   <div class="site-description">{{site_description | default(value="A collection of Git repositories")}}</div>
   {% endif -%}
 </div>

diff --git a/templates/style.css b/templates/style.css
line changes: +10/-3
index aa541f6..00ad563
--- a/templates/style.css
+++ b/templates/style.css
@@ -218,9 +218,6 @@ div.summary-header {
     border-bottom: solid 1px var(--borderdark);
     border-radius: 10px 10px 0 0;
 }
-div.summary-header.commit {
-    margin-top: 0rem;
-}
 div.full-header {
     color: var(--offwhite);
     letter-spacing: 0.05em;
@@ -337,3 +334,13 @@ div.commit-page span.del {
         font-size: 0.9rem;
     }
 }
+table.clone-url {
+    width: 100%;
+}
+table.clone-url td.field {
+    font-weight: bold;
+    width: 8rem;
+}
+table.clone-url td.value {
+    text-align: left;
+}

diff --git a/templates/summary.html b/templates/summary.html
line changes: +15/-0
index 309a6af..5af5c59
--- a/templates/summary.html
+++ b/templates/summary.html
@@ -3,6 +3,21 @@
 {% block tab_summary_selected -%}selected{% endblock -%}
 
 {% block content %}
+<table class="clone-url">
+  <colgroup>
+    <col class="field" />
+    <col class="value" />
+  </colgroup>
+  <tr class="website">
+    <td class="field website">Website:</td>
+    <td class="value website">{{metadata.website | default(value="[none]")}}</td>
+  </tr>
+  <tr class="clone">
+    <td class="field clone">Clone URL:</td>
+    <td class="value clone">{{metadata.clone | default(value="[none]")}}</td>
+  </tr>
+</table>
+
 <div class="summary-header commit">Recent history</div>
 <table class="summary-table commits">
   <colgroup>