Skip to content

Commit b0bc2bd

Browse files
authored
Properly handle $STELLAR_CONFIG_HOME and $STELLAR_DATA_HOME. (#2311)
1 parent 82212a0 commit b0bc2bd

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

cmd/soroban-cli/src/config/data.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,16 @@ pub enum Error {
2222
Xdr(#[from] xdr::Error),
2323
}
2424

25-
pub const XDG_DATA_HOME: &str = "XDG_DATA_HOME";
26-
2725
pub fn project_dir() -> Result<directories::ProjectDirs, Error> {
28-
std::env::var(XDG_DATA_HOME)
29-
.map_or_else(
30-
|_| ProjectDirs::from("org", "stellar", "stellar-cli"),
31-
|data_home| {
32-
ProjectDirs::from_path(std::path::PathBuf::from(data_home).join("stellar-cli"))
33-
},
34-
)
35-
.ok_or(Error::FailedToFindProjectDirs)
26+
let dir = if let Ok(data_home) = std::env::var("STELLAR_DATA_HOME") {
27+
ProjectDirs::from_path(std::path::PathBuf::from(data_home))
28+
} else if let Ok(data_home) = std::env::var("XDG_DATA_HOME") {
29+
ProjectDirs::from_path(std::path::PathBuf::from(data_home).join("stellar-cli"))
30+
} else {
31+
ProjectDirs::from("org", "stellar", "stellar-cli")
32+
};
33+
34+
dir.ok_or(Error::FailedToFindProjectDirs)
3635
}
3736

3837
#[allow(clippy::module_name_repetitions)]
@@ -203,7 +202,7 @@ mod test {
203202
#[test]
204203
fn test_write_read() {
205204
let t = assert_fs::TempDir::new().unwrap();
206-
std::env::set_var(XDG_DATA_HOME, t.path().to_str().unwrap());
205+
std::env::set_var("XDG_DATA_HOME", t.path().to_str().unwrap());
207206
let rpc_uri = Url::from_str("http://localhost:8000").unwrap();
208207
let sim = SimulateTransactionResponse::default();
209208
let original_action: Action = sim.into();

cmd/soroban-cli/src/config/locator.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ pub enum Error {
6464
ConfigSerialization,
6565
// #[error("Config file failed write")]
6666
// CannotWriteConfigFile,
67+
#[error("STELLAR_CONFIG_HOME env variable is not a valid path. Got {0}")]
68+
StellarConfigDir(String),
6769
#[error("XDG_CONFIG_HOME env variable is not a valid path. Got {0}")]
6870
XdgConfigHome(String),
6971
#[error(transparent)]
@@ -625,6 +627,10 @@ impl KeyType {
625627
}
626628

627629
fn global_config_path() -> Result<PathBuf, Error> {
630+
if let Ok(config_home) = std::env::var("STELLAR_CONFIG_HOME") {
631+
return PathBuf::from_str(&config_home).map_err(|_| Error::StellarConfigDir(config_home));
632+
}
633+
628634
let config_dir = if let Ok(config_home) = std::env::var("XDG_CONFIG_HOME") {
629635
PathBuf::from_str(&config_home).map_err(|_| Error::XdgConfigHome(config_home))?
630636
} else {

0 commit comments

Comments
 (0)