commit: | cfc589e3b27bf405cafa3d613cf7b7b515e3f5c6 |
author: | Trevor Bentley |
committer: | Trevor Bentley |
date: | Fri Jan 13 17:29:00 2023 +0100 |
parents: | 10082c20965be1507ee0f51dc4b6eff7fa3ed7de |
diff --git a/config.toml b/config.toml line changes: +15/-0 index 68c111e..e048fd3 --- a/config.toml +++ b/config.toml
@@ -19,6 +19,20 @@ # This is accessible in all templates. #site_description = "" +# Which branch to use for generating history. +# +# Itsy-Gitsy currently only supports traversing the history of a single branch, +# which is the one named here. Common options are "master" and "main". +# Defaults to "master" if not specified. +# +# Note that this probably should not contain any remote prefix, like "origin/", +# though it may. Also note that the "default branch" is only a concept for +# remote repositories; local repositories do not have the concept, hence this +# must be explicitly specified. +# +# This can also be set per-repository. +#branch = "master" + # List of directories, each of which contains Git repositories to # index. #
@@ -457,6 +471,7 @@ generated_by = "Itsy-Gitsy" # Per-repository settings, same as the global versions described above: +#branch = "master" #render_markdown = false #syntax_highlighting = false #syntax_highlight_theme = "base16-ocean.dark"
diff --git a/src/git.rs b/src/git.rs line changes: +5/-3 index fd0ad3f..ff4adba --- a/src/git.rs +++ b/src/git.rs
@@ -192,6 +192,8 @@ pub fn parse_repo( let mut history_count = 0; let mut branch_count = 0; let mut tag_count = 0; + let branch_name = settings.branch.as_deref().unwrap_or("master"); + let branch_obj = repo.revparse_single(branch_name)?; // Cache the shortnames of all references let mut references: BTreeMap<String, Vec<String>> = BTreeMap::new();
@@ -213,7 +215,7 @@ pub fn parse_repo( loud!(); let mut revwalk = repo.revwalk()?; revwalk.set_sorting(git2::Sort::TOPOLOGICAL)?; - revwalk.push_head()?; + revwalk.push(branch_obj.id())?; loudest!(" - Parsing history:"); for oid in revwalk { let oid = oid?;
@@ -379,11 +381,11 @@ pub fn parse_repo( let max_depth = settings.limit_tree_depth.unwrap_or(usize::MAX); if max_depth > 0 { loudest!(" - Walking root files"); - walk_file_tree(&repo, "HEAD", &mut root_files, 0, usize::MAX, false, "")?; + walk_file_tree(&repo, branch_name, &mut root_files, 0, usize::MAX, false, "")?; // TODO: maybe this should be optional? Walking the whole tree // could be slow on huge repos. loudest!(" - Walking all files"); - walk_file_tree(&repo, "HEAD", &mut all_files, 0, max_depth, true, "")?; + walk_file_tree(&repo, branch_name, &mut all_files, 0, max_depth, true, "")?; } loud!(" - parsed {} files", all_files.len());
diff --git a/src/main.rs b/src/main.rs line changes: +0/-1 index 984fcb6..7f2659e --- a/src/main.rs +++ b/src/main.rs
@@ -10,7 +10,6 @@ use settings::{GitsyCli, GitsySettings}; // TODO: // // * basic, light, dark, and fancy default themes -// * specify default branch, use instead of HEAD // * better error propagation // * automated tests // * documentation + examples
diff --git a/src/settings.rs b/src/settings.rs line changes: +4/-0 index 9008229..889426c --- a/src/settings.rs +++ b/src/settings.rs
@@ -192,6 +192,7 @@ pub struct GitsySettingsRepo { pub name: Option<String>, pub description: Option<String>, pub website: Option<String>, + pub branch: Option<String>, pub asset_files: Option<Vec<String>>, pub render_markdown: Option<bool>, pub syntax_highlight: Option<bool>,
@@ -232,6 +233,7 @@ pub struct GitsySettings { pub site_url: Option<String>, pub site_description: Option<String>, pub asset_files: Option<Vec<String>>, + pub branch: Option<String>, #[serde(rename(deserialize = "gitsy_templates"))] pub templates: GitsySettingsTemplates, #[serde(rename(deserialize = "gitsy_outputs"))]
@@ -300,6 +302,7 @@ impl GitsySettings { if repo.name.is_none() { repo.name = Some(k.clone()); } + global_to_repo!(settings, repo, branch); global_to_repo!(settings, repo, render_markdown); global_to_repo!(settings, repo, syntax_highlight); global_to_repo!(settings, repo, syntax_highlight_theme);
@@ -332,6 +335,7 @@ impl GitsySettings { repo_descriptions.insert(GitsySettingsRepo { path: dir.path().clone(), name: Some(name), + branch: settings.branch.clone(), render_markdown: settings.render_markdown.clone(), syntax_highlight: settings.syntax_highlight.clone(), syntax_highlight_theme: settings.syntax_highlight_theme.clone(),