Skip to content

Commit

Permalink
feat(git_metrics): add option to ignore submodules (starship#5052)
Browse files Browse the repository at this point in the history
* add docs

* update schema

* ok, actually update schema

* add test

* fix lint

* accidentally included my .devenv directory
  • Loading branch information
cdmistman authored and Indyandie committed Jul 26, 2023
1 parent 901fd93 commit 384790a
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 14 deletions.
5 changes: 5 additions & 0 deletions .github/config-schema.json
Expand Up @@ -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": [
Expand Down Expand Up @@ -3188,6 +3189,10 @@
"disabled": {
"default": true,
"type": "boolean"
},
"ignore_submodules": {
"default": false,
"type": "boolean"
}
},
"additionalProperties": false
Expand Down
1 change: 1 addition & 0 deletions docs/config/README.md
Expand Up @@ -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

Expand Down
2 changes: 2 additions & 0 deletions src/configs/git_metrics.rs
Expand Up @@ -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> {
Expand All @@ -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,
}
}
}
56 changes: 42 additions & 14 deletions src/modules/git_metrics.rs
Expand Up @@ -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);

Expand Down Expand Up @@ -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! {
Expand Down

0 comments on commit 384790a

Please sign in to comment.