8000 Add support for XDG_CONFIG_HOME in justfile search paths by pojknamn · Pull Request #2692 · casey/just · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Add support for XDG_CONFIG_HOME in justfile search paths #2692

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions src/search.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@ impl Search {
.join(DEFAULT_JUSTFILE_NAME),
);

if let Some(xdg_config_home) = std::env::var_os("XDG_CONFIG_HOME") {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the goal to add the option of XDG base directory specification-compliant path for global justfile, or only to use XDG_CONFIG_HOME literally as per documentation?

If the former, checking whether XDG_CONFIG_HOME is set is not the only condition to consider - see related discussion in #2536

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So if I understand the conversation from the linked PR, it doesn't seem like getting full XDG-compliant paths is that hard. The only two concrete examples I could find were relative paths which are not allowed, and empty paths (the environment variable is set, but to an empty value). So you just take the contents of the environment variable, filter out any non-absolute or empty paths, and then default to ~/.config if there's nothing left. Did I get that correct?

Just my $0.02 as the issue submitter, I don't really care either way about this. I love rigorous standards, and it seems good to follow the standard, but if we're not too strict about it, then I can still make sure that the environment variable is set correctly on my end, and everything still works just fine for me. As long as there's something I can fix with my environment, then I can deal with whatever. I just need the documented example to work on all platforms. :)

And thanks for @laniakea64 for doing this, I was going to see about patching this, but I have never done anything in rust, and I hadn't gotten around to it yet. ❤️

8000

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So if I understand the conversation from the linked PR, it doesn't seem like getting full XDG-compliant paths is that hard. ... So you just take the contents of the environment variable, filter out any non-absolute or empty paths, and then default to ~/.config if there's nothing left. Did I get that correct?

Yes, you are correct about full XDG spec compliance.

And thanks for @laniakea64 for doing this, I was going to see about patching this, but I have never done anything in rust, and I hadn't gotten around to it yet. ❤️

😕 I wasn't involved in authoring this PR

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My bad, lol... Thanks to @pojknamn for writing this!!! ❤️ You're a hero!

paths.push(
PathBuf::from(xdg_config_home)
.join("just")
.join(DEFAULT_JUSTFILE_NAME)
);
};

for justfile_name in JUSTFILE_NAMES {
paths.push(home_dir.join(justfile_name));
}
Expand Down Expand Up @@ -387,4 +395,34 @@ mod tests {
assert_eq!(have, Path::new(want));
}
}
#[test]
fn global_justfile_path_from_xdg_env(){
let old_value = std::env::var_os("XDG_CONFIG_HOME");

std::env::set_var("XDG_CONFIG_HOME", "/test/config");

let paths = Search::global_justfile_paths();
assert!(paths.contains(&PathBuf::from("/test/config/just/justfile")));

if let Some(old) = old_value {
std::env::set_var("XDG_CONFIG_HOME", old);
} else {
std::env::remove_var("XDG_CONFIG_HOME");
}
}
#[test]
fn global_justfile_path_when_xdg_env_not_set(){
let old_value = std::env::var_os("XDG_CONFIG_HOME");

std::env::set_var("XDG_CONFIG_HOME", "");

let paths = Search::global_justfile_paths();
assert!(!paths.contains(&PathBuf::from("/test/config/just/justfile")));

if let Some(old) = old_value {
std::env::set_var("XDG_CONFIG_HOME", old);
} else {
std::env::remove_var("XDG_CONFIG_HOME");
}
}
}
0