feat: Add option to control git directory truncation (#165)
This commit is contained in:
parent
d065dff695
commit
84c394e7b0
|
@ -13,6 +13,7 @@ Cargo.lock
|
||||||
|
|
||||||
# Intellij IDE configuration
|
# Intellij IDE configuration
|
||||||
.idea/
|
.idea/
|
||||||
|
/*.iml
|
||||||
|
|
||||||
# Compiled files for documentation
|
# Compiled files for documentation
|
||||||
docs/node_modules
|
docs/node_modules
|
||||||
|
|
|
@ -154,8 +154,9 @@ git repo that you're currently in.
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
| Variable | Default | Description |
|
| Variable | Default | Description |
|
||||||
| ------------------- | ------- | ------------------------------------------------------------------------------- |
|
| ------------------- | ------- | -------------------------------------------------------------------------------- |
|
||||||
| `truncation_length` | `3` | The number of parent folders that the current directory should be truncated to. |
|
| `truncation_length` | `3` | The number of parent folders that the current directory should be truncated to. |
|
||||||
|
| `truncate_to_repo` | `true` | Whether or not to truncate to the root of the git repo that you're currently in. |
|
||||||
| `disabled` | `false` | Disables the `directory` module. |
|
| `disabled` | `false` | Disables the `directory` module. |
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
|
@ -24,22 +24,26 @@ pub fn module<'a>(context: &'a Context) -> Option<Module<'a>> {
|
||||||
let truncation_length = module
|
let truncation_length = module
|
||||||
.config_value_i64("truncation_length")
|
.config_value_i64("truncation_length")
|
||||||
.unwrap_or(DIR_TRUNCATION_LENGTH);
|
.unwrap_or(DIR_TRUNCATION_LENGTH);
|
||||||
|
let truncate_to_repo = module.config_value_bool("truncate_to_repo").unwrap_or(true);
|
||||||
|
|
||||||
let current_dir = &context.current_dir;
|
let current_dir = &context.current_dir;
|
||||||
log::debug!("Current directory: {:?}", current_dir);
|
log::debug!("Current directory: {:?}", current_dir);
|
||||||
|
|
||||||
let dir_string;
|
let dir_string;
|
||||||
if let Some(repo_root) = &context.repo_root {
|
match &context.repo_root {
|
||||||
|
Some(repo_root) if truncate_to_repo => {
|
||||||
// Contract the path to the git repo root
|
// Contract the path to the git repo root
|
||||||
let repo_folder_name = repo_root.file_name().unwrap().to_str().unwrap();
|
let repo_folder_name = repo_root.file_name().unwrap().to_str().unwrap();
|
||||||
|
|
||||||
dir_string = contract_path(current_dir, repo_root, repo_folder_name);
|
dir_string = contract_path(current_dir, repo_root, repo_folder_name);
|
||||||
} else {
|
}
|
||||||
|
_ => {
|
||||||
// Contract the path to the home directory
|
// Contract the path to the home directory
|
||||||
let home_dir = dirs::home_dir().unwrap();
|
let home_dir = dirs::home_dir().unwrap();
|
||||||
|
|
||||||
dir_string = contract_path(current_dir, &home_dir, HOME_SYMBOL);
|
dir_string = contract_path(current_dir, &home_dir, HOME_SYMBOL);
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Truncate the dir string to the maximum number of path components
|
// Truncate the dir string to the maximum number of path components
|
||||||
let truncated_dir_string = truncate(dir_string, truncation_length as usize);
|
let truncated_dir_string = truncate(dir_string, truncation_length as usize);
|
||||||
|
|
|
@ -207,3 +207,65 @@ fn truncated_directory_in_git_repo() -> io::Result<()> {
|
||||||
assert_eq!(expected, actual);
|
assert_eq!(expected, actual);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore]
|
||||||
|
fn directory_in_git_repo_truncate_to_repo_false() -> io::Result<()> {
|
||||||
|
let tmp_dir = TempDir::new_in(dirs::home_dir().unwrap())?;
|
||||||
|
let repo_dir = tmp_dir.path().join("above-repo").join("rocket-controls");
|
||||||
|
let dir = repo_dir.join("src/meters/fuel-gauge");
|
||||||
|
fs::create_dir_all(&dir)?;
|
||||||
|
Repository::init(&repo_dir).unwrap();
|
||||||
|
|
||||||
|
let output = common::render_module("directory")
|
||||||
|
.use_config(toml::toml! {
|
||||||
|
[directory]
|
||||||
|
// Don't truncate the path at all.
|
||||||
|
truncation_length = 5
|
||||||
|
truncate_to_repo = false
|
||||||
|
})
|
||||||
|
.arg("--path")
|
||||||
|
.arg(dir)
|
||||||
|
.output()?;
|
||||||
|
let actual = String::from_utf8(output.stdout).unwrap();
|
||||||
|
|
||||||
|
let expected = format!(
|
||||||
|
"in {} ",
|
||||||
|
Color::Cyan
|
||||||
|
.bold()
|
||||||
|
.paint("above-repo/rocket-controls/src/meters/fuel-gauge")
|
||||||
|
);
|
||||||
|
assert_eq!(expected, actual);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[ignore]
|
||||||
|
fn directory_in_git_repo_truncate_to_repo_true() -> io::Result<()> {
|
||||||
|
let tmp_dir = TempDir::new_in(dirs::home_dir().unwrap())?;
|
||||||
|
let repo_dir = tmp_dir.path().join("above-repo").join("rocket-controls");
|
||||||
|
let dir = repo_dir.join("src/meters/fuel-gauge");
|
||||||
|
fs::create_dir_all(&dir)?;
|
||||||
|
Repository::init(&repo_dir).unwrap();
|
||||||
|
|
||||||
|
let output = common::render_module("directory")
|
||||||
|
.use_config(toml::toml! {
|
||||||
|
[directory]
|
||||||
|
// `truncate_to_repo = true` should display the truncated path
|
||||||
|
truncation_length = 5
|
||||||
|
truncate_to_repo = true
|
||||||
|
})
|
||||||
|
.arg("--path")
|
||||||
|
.arg(dir)
|
||||||
|
.output()?;
|
||||||
|
let actual = String::from_utf8(output.stdout).unwrap();
|
||||||
|
|
||||||
|
let expected = format!(
|
||||||
|
"in {} ",
|
||||||
|
Color::Cyan
|
||||||
|
.bold()
|
||||||
|
.paint("rocket-controls/src/meters/fuel-gauge")
|
||||||
|
);
|
||||||
|
assert_eq!(expected, actual);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue