summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColton Donnelly <colton@donn.io>2023-04-13 12:04:15 -0700
committerGitHub <noreply@github.com>2023-04-13 21:04:15 +0200
commitce014231521c981260ff7c1018acf694c65c97fe (patch)
tree7eb5a647d8af5a3e985ab92efa01c523daba73ba
parent27ffa37cfdf2eff9874e543f88fa389bf5c2dae3 (diff)
feat(git_metrics): add option to ignore submodules (#5052)
* add docs * update schema * ok, actually update schema * add test * fix lint * accidentally included my .devenv directory
-rw-r--r--.github/config-schema.json5
-rw-r--r--docs/config/README.md1
-rw-r--r--src/configs/git_metrics.rs2
-rw-r--r--src/modules/git_metrics.rs56
4 files changed, 50 insertions, 14 deletions
diff --git a/.github/config-schema.json b/.github/config-schema.json
index a53e35a74..0ddb428e2 100644
--- a/.github/config-schema.json
+++ b/.github/config-schema.json
@@ -576,6 +576,7 @@
"deleted_style": "bold red",
"disabled": true,
"format": "([+$added]($added_style) )([-$deleted]($deleted_style) )",
+ "ignore_submodules": false,
"only_nonzero_diffs": true
},
"allOf": [
@@ -3188,6 +3189,10 @@
"disabled": {
"default": true,
"type": "boolean"
+ },
+ "ignore_submodules": {
+ "default": false,
+ "type": "boolean"
}
},
"additionalProperties": false
diff --git a/docs/config/README.md b/docs/config/README.md
index 3fdb9c162..a6f4de02d 100644
--- a/docs/config/README.md
+++ b/docs/config/README.md
@@ -1820,6 +1820,7 @@ To enable it, set `disabled` to `false` in your configuration file.
| `only_nonzero_diffs` | `true` | Render status only for changed items. |
| `format` | `'([+$added]($added_style) )([-$deleted]($deleted_style) )'` | The format for the module. |
| `disabled` | `true` | Disables the `git_metrics` module. |
+| `ignore_submodules` | `false` | Ignore changes to submodules |
### Variables
diff --git a/src/configs/git_metrics.rs b/src/configs/git_metrics.rs
index 928d98297..ea504c53b 100644
--- a/src/configs/git_metrics.rs
+++ b/src/configs/git_metrics.rs
@@ -13,6 +13,7 @@ pub struct GitMetricsConfig<'a> {
pub only_nonzero_diffs: bool,
pub format: &'a str,
pub disabled: bool,
+ pub ignore_submodules: bool,
}
impl<'a> Default for GitMetricsConfig<'a> {
@@ -23,6 +24,7 @@ impl<'a> Default for GitMetricsConfig<'a> {
only_nonzero_diffs: true,
format: "([+$added]($added_style) )([-$deleted]($deleted_style) )",
disabled: true,
+ ignore_submodules: false,
}
}
}
diff --git a/src/modules/git_metrics.rs b/src/modules/git_metrics.rs
index b3d96dcb4..b82784ad2 100644
--- a/src/modules/git_metrics.rs
+++ b/src/modules/git_metrics.rs
@@ -23,20 +23,21 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
let repo = context.get_repo().ok()?;
let repo_root = repo.workdir.as_ref()?;
- let diff = context
- .exec_cmd(
- "git",
- &[
- OsStr::new("--git-dir"),
- repo.path.as_os_str(),
- OsStr::new("--work-tree"),
- repo_root.as_os_str(),
- OsStr::new("--no-optional-locks"),
- OsStr::new("diff"),
- OsStr::new("--shortstat"),
- ],
- )?
- .stdout;
+ let mut args = vec![
+ OsStr::new("--git-dir"),
+ repo.path.as_os_str(),
+ OsStr::new("--work-tree"),
+ repo_root.as_os_str(),
+ OsStr::new("--no-optional-locks"),
+ OsStr::new("diff"),
+ OsStr::new("--shortstat"),
+ ];
+
+ if config.ignore_submodules {
+ args.push(OsStr::new("--ignore-submodules"));
+ }
+
+ let diff = context.exec_cmd("git", &args)?.stdout;
let stats = GitDiff::parse(&diff);
@@ -228,6 +229,33 @@ mod tests {
repo_dir.close()
}
+ #[test]
+ fn shows_all_changes_with_ignored_submodules() -> io::Result<()> {
+ let repo_dir = create_repo_with_commit()?;
+ let path = repo_dir.path();
+
+ let file_path = path.join("the_file");
+ write_file(file_path, "\nSecond Line\n\nModified\nAdded\n")?;
+
+ let actual = ModuleRenderer::new("git_metrics")
+ .config(toml::toml! {
+ [git_metrics]
+ disabled = false
+ ignore_submodules = true
+ })
+ .path(path)
+ .collect();
+
+ let expected = Some(format!(
+ "{} {} ",
+ Color::Green.bold().paint("+4"),
+ Color::Red.bold().paint("-2")
+ ));
+
+ assert_eq!(expected, actual);
+ repo_dir.close()
+ }
+
fn render_metrics(path: &Path) -> Option<String> {
ModuleRenderer::new("git_metrics")
.config(toml::toml! {