From 6e3e1ea88b3cb8e5e49623b6bb6d186b66456748 Mon Sep 17 00:00:00 2001 From: arkpar Date: Tue, 13 Dec 2016 23:38:29 +0100 Subject: [PATCH] XDG paths --- Cargo.lock | 81 ++++++++++++++++++++++++++++++----------- Cargo.toml | 1 + parity/blockchain.rs | 12 +++--- parity/cli/mod.rs | 3 +- parity/configuration.rs | 13 ++++--- parity/dapps.rs | 4 +- parity/dir.rs | 24 ++++++++---- parity/helpers.rs | 2 +- parity/main.rs | 1 + parity/rpc.rs | 4 +- parity/run.rs | 6 +-- parity/signer.rs | 4 +- parity/upgrade.rs | 8 +++- sync/src/api.rs | 2 +- 14 files changed, 114 insertions(+), 51 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index c15b82879..d782040b9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3,6 +3,7 @@ name = "parity" version = "1.5.0" dependencies = [ "ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", + "app_dirs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", "clippy 0.0.103 (registry+https://github.com/rust-lang/crates.io-index)", "ctrlc 1.1.1 (git+https://github.com/ethcore/rust-ctrlc.git)", "daemonize 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -42,7 +43,7 @@ dependencies = [ "serde_json 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -58,6 +59,17 @@ name = "ansi_term" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "app_dirs" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "ole32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "shell32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "xdg 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "arrayvec" version = "0.3.16" @@ -196,7 +208,7 @@ source = "git+https://github.com/ethcore/rust-ctrlc.git#f4927770f89eca80ec250911 dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -844,7 +856,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -915,7 +927,7 @@ name = "kernel32-sys" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1016,7 +1028,7 @@ dependencies = [ "nix 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1032,7 +1044,7 @@ dependencies = [ "nix 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1047,7 +1059,7 @@ dependencies = [ "net2 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", "nix 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.2.0 (git+https://github.com/carllerche/slab?rev=5476efcafb)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1063,7 +1075,7 @@ dependencies = [ "net2 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", "nix 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1073,7 +1085,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "net2 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1084,7 +1096,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "time 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1113,7 +1125,7 @@ dependencies = [ "cfg-if 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1252,6 +1264,15 @@ name = "odds" version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "ole32-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "owning_ref" version = "0.2.2" @@ -1303,7 +1324,7 @@ dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1324,7 +1345,7 @@ dependencies = [ "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1547,7 +1568,7 @@ dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", "termios 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1651,6 +1672,15 @@ dependencies = [ "gcc 0.3.35 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "shell32-sys" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "siphasher" version = "0.1.1" @@ -1786,7 +1816,7 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1795,7 +1825,7 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1830,7 +1860,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1926,7 +1956,7 @@ name = "vecio" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1957,7 +1987,7 @@ dependencies = [ [[package]] name = "winapi" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -1985,10 +2015,15 @@ name = "ws2_32-sys" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "xdg" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "xml-rs" version = "0.3.4" @@ -2019,6 +2054,7 @@ dependencies = [ [metadata] "checksum aho-corasick 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "67077478f0a03952bed2e6786338d400d40c25e9836e08ad50af96607317fd03" "checksum ansi_term 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1f46cd5b1d660c938e3f92dfe7a73d832b3281479363dd0cd9c1c2fbf60f7962" +"checksum app_dirs 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b7d1c0d48a81bbb13043847f957971f4d87c81542d80ece5e84ba3cba4058fd4" "checksum arrayvec 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)" = "16e3bdb2f54b3ace0285975d59a97cf8ed3855294b2b6bc651fcf22a9c352975" "checksum aster 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "07d344974f0a155f091948aa389fb1b912d3a58414fbdb9c8d446d193ee3496a" "checksum aster 0.25.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4df293303e8a52e1df7984ac1415e195f5fcbf51e4bb7bda54557861a3954a08" @@ -2104,6 +2140,7 @@ dependencies = [ "checksum num_cpus 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "51fedae97a05f7353612fe017ab705a37e6db8f4d67c5c6fe739a9e70d6eed09" "checksum number_prefix 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "084d05f4bf60621a9ac9bde941a410df548f4de9545f06e5ee9d3aef4b97cd77" "checksum odds 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "b28c06e81b0f789122d415d6394b5fe849bde8067469f4c2980d3cdc10c78ec1" +"checksum ole32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2c49021782e5233cd243168edfa8037574afed4eba4bbaf538b3d8d1789d8c" "checksum owning_ref 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8d91377085359426407a287ab16884a0111ba473aa6844ff01d4ec20ce3d75e7" "checksum parity-dapps-glue 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "98378dec0a185da2b7180308752f0bad73aaa949c3e0a3b0528d0e067945f7ab" "checksum parity-ui-precompiled 1.4.0 (git+https://github.com/ethcore/js-precompiled.git)" = "" @@ -2146,6 +2183,7 @@ dependencies = [ "checksum serde_codegen_internals 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f877e2781ed0a323295d1c9f0e26556117b5a11489fc47b1848dfb98b3173d21" "checksum serde_json 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0e10f8a9d94b06cf5d3bef66475f04c8ff90950f1be7004c357ff9472ccbaebc" "checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c" +"checksum shell32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72f20b8f3c060374edb8046591ba28f62448c369ccbdc7b02075103fb3a9e38d" "checksum siphasher 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c44e42fa187b5a8782489cf7740cc27c3125806be2bf33563cf5e02e9533fcd" "checksum slab 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d807fd58c4181bbabed77cb3b891ba9748241a552bcc5be698faaebefc54f46e" "checksum slab 0.2.0 (git+https://github.com/carllerche/slab?rev=5476efcafb)" = "" @@ -2186,10 +2224,11 @@ dependencies = [ "checksum vergen 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "56b639f935488eb40f06d17c3e3bcc3054f6f75d264e187b1107c8d1cba8d31c" "checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" "checksum webpki 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "813503a5985585e0812d430cd1328ee322f47f66629c8ed4ecab939cf9e92f91" -"checksum winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "4dfaaa8fbdaa618fa6914b59b2769d690dd7521920a18d84b42d254678dd5fd4" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" "checksum ws 0.5.3 (git+https://github.com/ethcore/ws-rs.git?branch=mio-upstream-stable)" = "" "checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +"checksum xdg 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "77b831a5ba77110f438f0ac5583aafeb087f70432998ba6b7dcb1d32185db453" "checksum xml-rs 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "65e74b96bd3179209dc70a980da6df843dff09e46eee103a0376c0949257e3ef" "checksum xmltree 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "472a9d37c7c53ab2391161df5b89b1f3bf76dab6ab150d7941ecbdd832282082" "checksum zip 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "3ceb33a75b3d0608942302eed325b59d2c3ed777cc6c01627ae14e5697c6a31c" diff --git a/Cargo.toml b/Cargo.toml index c3a44e1cc..a08486217 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ isatty = "0.1" toml = "0.2" serde = "0.8.0" serde_json = "0.8.0" +app_dirs = "1.1.1" hyper = { version = "0.9", default-features = false } ctrlc = { git = "https://github.com/ethcore/rust-ctrlc.git" } fdlimit = "0.1" diff --git a/parity/blockchain.rs b/parity/blockchain.rs index 9cc81796d..2998e0812 100644 --- a/parity/blockchain.rs +++ b/parity/blockchain.rs @@ -149,9 +149,6 @@ fn execute_import(cmd: ImportBlockchain) -> Result { // Setup panic handler let panic_handler = PanicHandler::new_in_arc(); - // create dirs used by parity - try!(cmd.dirs.create_dirs(false, false)); - // load spec file let spec = try!(cmd.spec.spec()); @@ -185,6 +182,9 @@ fn execute_import(cmd: ImportBlockchain) -> Result { // execute upgrades try!(execute_upgrades(&db_dirs, algorithm, cmd.compaction.compaction_profile(db_dirs.db_root_path().as_path()))); + // create dirs used by parity + try!(cmd.dirs.create_dirs(false, false)); + // prepare client config let mut client_config = to_client_config( &cmd.cache_config, @@ -320,9 +320,6 @@ fn start_client( wal: bool, cache_config: CacheConfig) -> Result { - // create dirs used by parity - try!(dirs.create_dirs(false, false)); - // load spec file let spec = try!(spec.spec()); @@ -356,6 +353,9 @@ fn start_client( // execute upgrades try!(execute_upgrades(&db_dirs, algorithm, compaction.compaction_profile(db_dirs.db_root_path().as_path()))); + // create dirs used by parity + try!(dirs.create_dirs(false, false)); + // prepare client config let client_config = to_client_config(&cache_config, Mode::Active, tracing, fat_db, compaction, wal, VMType::default(), "".into(), algorithm, pruning_history, true); diff --git a/parity/cli/mod.rs b/parity/cli/mod.rs index 6ea9c3fc3..1d5049e06 100644 --- a/parity/cli/mod.rs +++ b/parity/cli/mod.rs @@ -16,6 +16,7 @@ #[macro_use] mod usage; +use dir::default_data_path; usage! { { @@ -82,7 +83,7 @@ usage! { flag_mode_timeout: u64 = 300u64, or |c: &Config| otry!(c.parity).mode_timeout.clone(), flag_mode_alarm: u64 = 3600u64, or |c: &Config| otry!(c.parity).mode_alarm.clone(), flag_chain: String = "homestead", or |c: &Config| otry!(c.parity).chain.clone(), - flag_db_path: String = "$HOME/.parity", or |c: &Config| otry!(c.parity).db_path.clone(), + flag_db_path: String = default_data_path(), or |c: &Config| otry!(c.parity).db_path.clone(), flag_keys_path: String = "$DATA/keys", or |c: &Config| otry!(c.parity).keys_path.clone(), flag_identity: String = "", or |c: &Config| otry!(c.parity).identity.clone(), diff --git a/parity/configuration.rs b/parity/configuration.rs index 0190de939..0b262de5b 100644 --- a/parity/configuration.rs +++ b/parity/configuration.rs @@ -739,8 +739,9 @@ mod tests { use ethcore_rpc::NetworkSettings; use ethcore::client::{VMType, BlockId}; use ethcore::miner::{MinerOptions, PrioritizationStrategy}; - use helpers::{replace_home, default_network_config}; + use helpers::{default_network_config}; use run::RunCmd; + use dir::Directories; use signer::{Configuration as SignerConfiguration}; use blockchain::{BlockchainCmd, ImportBlockchain, ExportBlockchain, DataFormat, ExportState}; use presale::ImportWallet; @@ -772,7 +773,7 @@ mod tests { let conf = parse(&args); assert_eq!(conf.into_command().unwrap().cmd, Cmd::Account(AccountCmd::New(NewAccount { iterations: 10240, - path: replace_home("", "$HOME/.parity/keys"), + path: Directories::default().keys, password_file: None, spec: SpecType::default(), }))); @@ -784,7 +785,7 @@ mod tests { let conf = parse(&args); assert_eq!(conf.into_command().unwrap().cmd, Cmd::Account( AccountCmd::List(ListAccounts { - path: replace_home("", "$HOME/.parity/keys"), + path: Directories::default().keys, spec: SpecType::default(), }) )); @@ -796,7 +797,7 @@ mod tests { let conf = parse(&args); assert_eq!(conf.into_command().unwrap().cmd, Cmd::Account(AccountCmd::Import(ImportAccounts { from: vec!["my_dir".into(), "another_dir".into()], - to: replace_home("", "$HOME/.parity/keys"), + to: Directories::default().keys, spec: SpecType::default(), }))); } @@ -807,7 +808,7 @@ mod tests { let conf = parse(&args); assert_eq!(conf.into_command().unwrap().cmd, Cmd::ImportPresaleWallet(ImportWallet { iterations: 10240, - path: replace_home("", "$HOME/.parity/keys"), + path: Directories::default().keys, wallet_path: "my_wallet.json".into(), password_file: Some("pwd".into()), spec: SpecType::default(), @@ -909,7 +910,7 @@ mod tests { fn test_command_signer_new_token() { let args = vec!["parity", "signer", "new-token"]; let conf = parse(&args); - let expected = replace_home("", "$HOME/.parity/signer"); + let expected = Directories::default().signer; assert_eq!(conf.into_command().unwrap().cmd, Cmd::SignerToken(SignerConfiguration { enabled: true, signer_path: expected, diff --git a/parity/dapps.rs b/parity/dapps.rs index b064a2efb..fb06f9df5 100644 --- a/parity/dapps.rs +++ b/parity/dapps.rs @@ -20,6 +20,7 @@ use rpc_apis; use ethcore::client::Client; use ethsync::SyncProvider; use helpers::replace_home; +use dir::default_data_path; #[derive(Debug, PartialEq, Clone)] pub struct Configuration { @@ -34,6 +35,7 @@ pub struct Configuration { impl Default for Configuration { fn default() -> Self { + let data_dir = default_data_path(); Configuration { enabled: true, interface: "127.0.0.1".into(), @@ -41,7 +43,7 @@ impl Default for Configuration { hosts: Some(Vec::new()), user: None, pass: None, - dapps_path: replace_home("", "$HOME/.parity/dapps"), + dapps_path: replace_home(&data_dir, "$DATA/dapps"), } } } diff --git a/parity/dir.rs b/parity/dir.rs index e0d70fb02..c7e664823 100644 --- a/parity/dir.rs +++ b/parity/dir.rs @@ -19,6 +19,7 @@ use std::path::{PathBuf, Path}; use util::{H64, H256}; use util::journaldb::Algorithm; use helpers::replace_home; +use app_dirs::{AppInfo, get_app_root, AppDataType}; // this const is irrelevent cause we do have migrations now, // but we still use it for backwards compatibility @@ -34,11 +35,12 @@ pub struct Directories { impl Default for Directories { fn default() -> Self { + let data_dir = default_data_path(); Directories { - data: replace_home("", "$HOME/.parity"), - keys: replace_home("", "$HOME/.parity/keys"), - signer: replace_home("", "$HOME/.parity/signer"), - dapps: replace_home("", "$HOME/.parity/dapps"), + data: replace_home(&data_dir, "$DATA"), + keys: replace_home(&data_dir, "$DATA/keys"), + signer: replace_home(&data_dir, "$DATA/signer"), + dapps: replace_home(&data_dir, "$DATA/dapps"), } } } @@ -188,6 +190,11 @@ impl DatabaseDirectories { } } +pub fn default_data_path() -> String { + let app_info = AppInfo { name: "parity", author: "parity" }; + get_app_root(AppDataType::UserData, &app_info).map(|p| p.to_string_lossy().into_owned()).unwrap_or_else(|_| "$HOME/.parity".to_owned()) +} + #[cfg(test)] mod tests { use super::Directories; @@ -195,11 +202,12 @@ mod tests { #[test] fn test_default_directories() { + let data_dir = super::default_data_path(); let expected = Directories { - data: replace_home("", "$HOME/.parity"), - keys: replace_home("", "$HOME/.parity/keys"), - signer: replace_home("", "$HOME/.parity/signer"), - dapps: replace_home("", "$HOME/.parity/dapps"), + data: replace_home(&data_dir, "$DATA"), + keys: replace_home(&data_dir, "$DATA/keys"), + signer: replace_home(&data_dir, "$DATA/signer"), + dapps: replace_home(&data_dir, "$DATA/dapps"), }; assert_eq!(expected, Directories::default()); } diff --git a/parity/helpers.rs b/parity/helpers.rs index e2260f405..b2ec9cb8e 100644 --- a/parity/helpers.rs +++ b/parity/helpers.rs @@ -188,7 +188,7 @@ pub fn to_bootnodes(bootnodes: &Option) -> Result, String> { pub fn default_network_config() -> ::ethsync::NetworkConfiguration { use ethsync::{NetworkConfiguration, AllowIP}; NetworkConfiguration { - config_path: Some(replace_home("", "$HOME/.parity/network")), + config_path: Some(replace_home(&::dir::default_data_path(), "$DATA/network")), net_config_path: None, listen_address: Some("0.0.0.0:30303".into()), public_address: None, diff --git a/parity/main.rs b/parity/main.rs index 17f5ed74b..004415aa8 100644 --- a/parity/main.rs +++ b/parity/main.rs @@ -54,6 +54,7 @@ extern crate ansi_term; extern crate regex; extern crate isatty; extern crate toml; +extern crate app_dirs; #[macro_use] extern crate ethcore_util as util; diff --git a/parity/rpc.rs b/parity/rpc.rs index 18487b427..0ae6e950e 100644 --- a/parity/rpc.rs +++ b/parity/rpc.rs @@ -23,6 +23,7 @@ use ethcore_rpc::{RpcServerError, RpcServer as Server, IpcServerError}; use rpc_apis; use rpc_apis::ApiSet; use helpers::parity_ipc_path; +use dir::default_data_path; pub use ethcore_rpc::{IpcServer, Server as HttpServer}; @@ -58,9 +59,10 @@ pub struct IpcConfiguration { impl Default for IpcConfiguration { fn default() -> Self { + let data_dir = default_data_path(); IpcConfiguration { enabled: true, - socket_addr: parity_ipc_path("", "$HOME/.parity/jsonrpc.ipc"), + socket_addr: parity_ipc_path(&data_dir, "$DATA/jsonrpc.ipc"), apis: ApiSet::IpcContext, } } diff --git a/parity/run.rs b/parity/run.rs index c78484f87..dbb81ad01 100644 --- a/parity/run.rs +++ b/parity/run.rs @@ -130,9 +130,6 @@ pub fn execute(cmd: RunCmd, logger: Arc) -> Result<(), String> { // increase max number of open files raise_fd_limit(); - // create dirs used by parity - try!(cmd.dirs.create_dirs(cmd.dapps_conf.enabled, cmd.signer_conf.enabled)); - // load spec let spec = try!(cmd.spec.spec()); @@ -169,6 +166,9 @@ pub fn execute(cmd: RunCmd, logger: Arc) -> Result<(), String> { // execute upgrades try!(execute_upgrades(&db_dirs, algorithm, cmd.compaction.compaction_profile(db_dirs.db_root_path().as_path()))); + // create dirs used by parity + try!(cmd.dirs.create_dirs(cmd.dapps_conf.enabled, cmd.signer_conf.enabled)); + // run in daemon mode if let Some(pid_file) = cmd.daemon { try!(daemonize(pid_file)); diff --git a/parity/signer.rs b/parity/signer.rs index 8f7a3d646..aeea90883 100644 --- a/parity/signer.rs +++ b/parity/signer.rs @@ -23,6 +23,7 @@ use util::path::restrict_permissions_owner; use rpc_apis; use ethcore_signer as signer; use helpers::replace_home; +use dir::default_data_path; pub use ethcore_signer::Server as SignerServer; const CODES_FILENAME: &'static str = "authcodes"; @@ -38,11 +39,12 @@ pub struct Configuration { impl Default for Configuration { fn default() -> Self { + let data_dir = default_data_path(); Configuration { enabled: true, port: 8180, interface: "127.0.0.1".into(), - signer_path: replace_home("", "$HOME/.parity/signer"), + signer_path: replace_home(&data_dir, "$DATA/signer"), skip_origin_validation: false, } } diff --git a/parity/upgrade.rs b/parity/upgrade.rs index 8e0749ceb..1be4067ec 100644 --- a/parity/upgrade.rs +++ b/parity/upgrade.rs @@ -23,7 +23,8 @@ use std::env; use std::io; use std::io::{Read, Write}; use std::path::{PathBuf, Path}; -use dir::DatabaseDirectories; +use dir::{DatabaseDirectories, default_data_path}; +use helpers::replace_home; use util::journaldb::Algorithm; #[cfg_attr(feature="dev", allow(enum_variant_names))] @@ -196,6 +197,11 @@ fn upgrade_user_defaults(dirs: &DatabaseDirectories) { } pub fn upgrade_data_paths(dirs: &DatabaseDirectories, pruning: Algorithm) { + let legacy_root_path = replace_home("", "$HOME/.parity"); + let default_path = default_data_path(); + if legacy_root_path != dirs.path && dirs.path == default_path { + upgrade_dir_location(&PathBuf::from(legacy_root_path), &PathBuf::from(&dirs.path)); + } upgrade_dir_location(&dirs.legacy_version_path(pruning), &dirs.db_path(pruning)); upgrade_dir_location(&dirs.legacy_snapshot_path(), &dirs.snapshot_path()); upgrade_dir_location(&dirs.legacy_network_path(), &dirs.network_path()); diff --git a/sync/src/api.rs b/sync/src/api.rs index 7c531bf7c..10a5c2c16 100644 --- a/sync/src/api.rs +++ b/sync/src/api.rs @@ -547,4 +547,4 @@ pub struct ServiceConfiguration { pub net: NetworkConfiguration, /// IPC path. pub io_path: String, -} \ No newline at end of file +}