Skip to content
Open
Changes from 2 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. ❤️

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");
}
}
}