From 384790a9cc53d980ab9d0c9044a23c646c6fe7ba Mon Sep 17 00:00:00 2001 From: Colton Donnelly Date: Thu, 13 Apr 2023 12:04:15 -0700 Subject: [PATCH] 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 --- .github/config-schema.json | 5 ++++ docs/config/README.md | 1 + src/configs/git_metrics.rs | 2 ++ src/modules/git_metrics.rs | 56 ++++++++++++++++++++++++++++---------- 4 files changed, 50 insertions(+), 14 deletions(-) diff --git a/.github/config-schema.json b/.github/config-schema.json index a53e35a74a01..0ddb428e2272 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 3fdb9c162292..a6f4de02d173 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 928d982977fd..ea504c53b49c 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 b3d96dcb4746..b82784ad2793 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> { 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 { ModuleRenderer::new("git_metrics") .config(toml::toml! {