Migrate from `dialoguer` to `pijul-interaction`

finchie
Jul 26, 2023, 2:45 AM
32G3GOK752NTSULBH6KYGD3ZC2YC4B2X7O73G7BT3AJVMIUIFHXQC

Dependencies

  • [2] RP7YRM5Q Import Git repos without writing anything to disk
  • [3] QKBU6HCD Prevent illegal characters in identity name
  • [4] 4RV7T4SR Migrate from `pijul::config` to `pijul-config`
  • [5] MU6P2JXG SSH: return with an error if the host key is wrong, rather than denying authentication
  • [6] IKZBGTGQ Handle absence of keyring as warning rather than error
  • [7] KKNMDXAI Tweak identity subcommand
  • [8] RZ75BZCI Remove unused dependencies
  • [9] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).
  • [10] YV63XF6Z Fixing a conflict
  • [11] 4KJ45IJL Implement new identity management
  • [12] EJ7TFFOW Re-adding Cargo.lock
  • [13] 4OJWMSOW Fully replace crate::Identity
  • [14] TYAKEAJL A better estimate of the maximum number of open patches we can keep (Unix-only at the moment)
  • [15] TPEH2XNB 1.0.0-alpha.28, with Tokio 1.0
  • [16] LZOGKBJX new command `pijul client` for authenticating to a HTTP server
  • [17] KWD6K4F7 Handle absence of keyring for password creation
  • [18] OTEE57H2 Correct loading/truncation of secret key files
  • [19] UMF6N7CZ Keyring 2.0
  • [20] DWSAYGVE Update codebase to use new identity management
  • [21] BV4PLHOV Remove dependency on `once_cell`
  • [22] DVBSW7SI Bump dependencies with minor-level changes
  • [23] YJXRCXOS Disallow overwriting existing identities via `pijul id edit`
  • [24] I6DVZEFU Do not ask for user input if the SSH channel is already closed
  • [25] 6FRPUHWK Fix identity tests
  • [26] Y6TBQN7M Automatically format `pijul` crate
  • [27] M37JTFEI Restorting SSH auth with a key
  • [28] 5WERCJKL Check if any identities exist before removal
  • [29] 44RUBHRE Only re-prove identity when credentials change
  • [*] SFY4U6XE remove redundant conditional compilation

Change contents

  • replacement in pijul/src/remote/ssh.rs at line 131
    [5.138][5.0:63]()
    if self.auth_pk(&mut h, &mut key_path).await {
    [5.138]
    [5.63]
    if self.auth_pk(&mut h, &mut key_path).await? {
  • replacement in pijul/src/remote/ssh.rs at line 228
    [5.678][5.678:694]()
    ) -> bool {
    [5.678]
    [5.694]
    ) -> Result<bool, anyhow::Error> {
  • replacement in pijul/src/remote/ssh.rs at line 230
    [5.721][5.721:747]()
    return false;
    [5.721]
    [5.747]
    return Ok(false);
  • replacement in pijul/src/remote/ssh.rs at line 245
    [5.1251][5.1251:1319](),[5.1319][4.119:170](),[4.170][5.1371:1493](),[5.1371][5.1371:1493](),[5.1493][5.0:192]()
    let password = dialoguer::Password::with_theme(
    pijul_config::load_theme()
    .expect("Could not load config")
    .as_ref(),
    )
    .with_prompt(format!("Password for encrypted private key"))
    .allow_empty_password(false)
    .interact()
    .unwrap();
    [5.1251]
    [5.1701]
    let password = pijul_interaction::Password::new()?
    .with_prompt(format!("Password for encrypted private key"))
    .with_allow_empty(false)
    .interact()?;
  • replacement in pijul/src/remote/ssh.rs at line 268
    [5.2302][5.2302:2331]()
    return true;
    [5.2302]
    [5.2331]
    return Ok(true);
  • replacement in pijul/src/remote/ssh.rs at line 271
    [5.2355][5.2355:2369]()
    false
    [5.2355]
    [5.31112]
    Ok(false)
  • replacement in pijul/src/remote/ssh.rs at line 278
    [5.577][5.577:617]()
    ) -> Result<bool, thrussh::Error> {
    [5.577]
    [5.64]
    ) -> Result<bool, anyhow::Error> {
  • replacement in pijul/src/remote/ssh.rs at line 297
    [5.2923][5.2923:2983](),[5.2983][4.171:214](),[4.214][5.3027:3273](),[5.3027][5.3027:3273]()
    let password = dialoguer::Password::with_theme(
    pijul_config::load_theme()
    .expect("Could not load config")
    .as_ref(),
    )
    .with_prompt(format!("Password for {username}"))
    .allow_empty_password(true)
    .interact()
    .unwrap();
    [5.2923]
    [5.3273]
    let password = pijul_interaction::Password::new()?
    .with_prompt(format!("Password for {username}"))
    .with_allow_empty(true)
    .interact()?;
  • edit in pijul/src/main.rs at line 144
    [31.20]
    [2.0]
    pijul_interaction::set_context(pijul_interaction::InteractiveContext::Terminal);
  • replacement in pijul/src/identity/mod.rs at line 56
    [5.17274][5.17274:17299]()
    use dialoguer::Password;
    [5.17274]
    [5.2104]
    use pijul_interaction::Password;
  • replacement in pijul/src/identity/mod.rs at line 142
    [5.4463][5.4463:4551]()
    password_attempt = Password::with_theme(config::load_theme()?.as_ref())
    [5.4463]
    [5.4551]
    password_attempt = Password::new()?
  • replacement in pijul/src/identity/mod.rs at line 144
    [5.4611][5.4611:4659]()
    .allow_empty_password(true)
    [5.4611]
    [5.4659]
    .with_allow_empty(true)
  • replacement in pijul/src/identity/mod.rs at line 262
    [5.7233][5.7233:7314]()
    let user_password = Password::with_theme(config::load_theme()?.as_ref())
    [5.7233]
    [5.7314]
    let user_password = Password::new()?
  • replacement in pijul/src/identity/mod.rs at line 264
    [5.7355][5.7355:7395]()
    .allow_empty_password(true)
    [5.7355]
    [5.7395]
    .with_allow_empty(true)
  • replacement in pijul/src/identity/load.rs at line 11
    [5.22629][5.22629:22657]()
    use dialoguer::FuzzySelect;
    [5.22629]
    [5.240]
    use pijul_interaction::Select;
  • replacement in pijul/src/identity/load.rs at line 87
    [5.25168][5.25168:25244]()
    let index = FuzzySelect::with_theme(config::load_theme()?.as_ref())
    [5.25168]
    [5.25244]
    let index = Select::new()?
  • replacement in pijul/src/identity/load.rs at line 89
    [5.25288][5.25288:25353]()
    .items(&possible_identities)
    .default(0)
    [5.25288]
    [5.25353]
    .with_items(&possible_identities)
    .with_default(0 as usize)
  • edit in pijul/src/identity/create.rs at line 10
    [5.28431][5.8689:8735]()
    use dialoguer::{Confirm, FuzzySelect, Input};
  • replacement in pijul/src/identity/create.rs at line 12
    [5.101][4.629:657]()
    use pijul_config as config;
    [5.101]
    [5.327]
    use pijul_interaction::{Confirm, Input, Select};
  • replacement in pijul/src/identity/create.rs at line 25
    [5.8903][5.102:139]()
    to_replace: Option<&String>,
    [5.8903]
    [5.8934]
    to_replace: Option<String>,
  • replacement in pijul/src/identity/create.rs at line 29
    [5.9045][5.29225:29269](),[5.29225][5.29225:29269]()
    let config = config::load_theme()?;
    [5.9045]
    [5.29269]
    let will_replace = to_replace.is_some();
  • replacement in pijul/src/identity/create.rs at line 31
    [5.29270][5.9046:9109]()
    new_identity.name = Input::with_theme(config.as_ref())
    [5.29270]
    [5.29341]
    new_identity.name = Input::new()?
  • replacement in pijul/src/identity/create.rs at line 33
    [5.29390][5.29390:29468](),[5.29468][5.140:197]()
    .default(String::from("default"))
    .allow_empty(false)
    .with_initial_text(if to_replace.is_some() {
    [5.29390]
    [5.9110]
    .with_default(String::from("default"))
    .with_allow_empty(false)
    .with_initial_text(if will_replace {
  • replacement in pijul/src/identity/create.rs at line 40
    [5.29612][5.29612:29685]()
    .validate_with(move |input: &String| -> Result<(), String> {
    [5.29612]
    [3.0]
    .with_validator(move |input: &String| -> Result<(), String> {
  • replacement in pijul/src/identity/create.rs at line 47
    [5.29774][5.198:255]()
    if let Some(name) = to_replace {
    [5.29774]
    [5.223]
    if let Some(name) = &to_replace {
  • replacement in pijul/src/identity/create.rs at line 63
    [5.30180][5.30180:30211]()
    .interact_text()?;
    [5.30180]
    [5.30211]
    .interact()?;
  • replacement in pijul/src/identity/create.rs at line 65
    [5.30212][5.9145:9230]()
    new_identity.config.author.display_name = Input::with_theme(config.as_ref())
    [5.30212]
    [5.30279]
    new_identity.config.author.display_name = Input::new()?
  • replacement in pijul/src/identity/create.rs at line 67
    [5.30320][5.30320:30351]()
    .allow_empty(true)
    [5.30320]
    [5.9231]
    .with_allow_empty(true)
  • replacement in pijul/src/identity/create.rs at line 69
    [5.9296][5.30565:30596](),[5.30565][5.30565:30596]()
    .interact_text()?;
    [5.9296]
    [5.30596]
    .interact()?;
  • replacement in pijul/src/identity/create.rs at line 71
    [5.30597][5.9297:9375]()
    new_identity.config.author.email = Input::with_theme(config.as_ref())
    [5.30597]
    [5.30665]
    new_identity.config.author.email = Input::new()?
  • replacement in pijul/src/identity/create.rs at line 73
    [5.30722][5.30722:30753]()
    .allow_empty(true)
    [5.30722]
    [5.9376]
    .with_allow_empty(true)
  • replacement in pijul/src/identity/create.rs at line 75
    [5.9434][5.30825:30896](),[5.30825][5.30825:30896]()
    .validate_with(move |input: &String| -> Result<(), &str> {
    [5.9434]
    [5.30896]
    .with_validator(move |input: &String| -> Result<(), &str> {
  • replacement in pijul/src/identity/create.rs at line 82
    [5.31104][5.31104:31135]()
    .interact_text()?;
    [5.31104]
    [5.9435]
    .interact()?;
  • replacement in pijul/src/identity/create.rs at line 84
    [5.9436][5.9436:9484]()
    if Confirm::with_theme(config.as_ref())
    [5.9436]
    [5.9484]
    if Confirm::new()?
  • replacement in pijul/src/identity/create.rs at line 94
    [5.10316][5.10316:10344]()
    .default(false)
    [5.10316]
    [5.10344]
    .with_default(false)
  • replacement in pijul/src/identity/create.rs at line 103
    [5.10537][5.10537:10585]()
    if Confirm::with_theme(config.as_ref())
    [5.10537]
    [5.10585]
    if Confirm::new()?
  • replacement in pijul/src/identity/create.rs at line 105
    [5.10660][5.10660:10687]()
    .default(true)
    [5.10660]
    [5.10687]
    .with_default(true)
  • replacement in pijul/src/identity/create.rs at line 114
    [5.492][5.492:528]()
    if to_replace.is_none()
    [5.492]
    [5.528]
    if !will_replace
  • replacement in pijul/src/identity/create.rs at line 149
    [5.11181][5.11181:11261]()
    let selection = FuzzySelect::with_theme(config::load_theme()?.as_ref())
    [5.11181]
    [5.11261]
    let selection = Select::new()?
  • replacement in pijul/src/identity/create.rs at line 151
    [5.11300][5.11300:11320]()
    .items(
    [5.11300]
    [5.11320]
    .with_items(
  • replacement in pijul/src/identity/create.rs at line 170
    [5.12083][5.12083:12107]()
    .default(0)
    [5.12083]
    [5.12107]
    .with_default(0 as usize)
  • replacement in pijul/src/identity/create.rs at line 182
    [5.1589][5.12500:12545](),[5.12500][5.12500:12545](),[5.12545][5.3959:4032]()
    let config = config::load_theme()?;
    self.config.author.username = Input::with_theme(config.as_ref())
    [5.1589]
    [5.12619]
    self.config.author.username = Input::new()?
  • replacement in pijul/src/identity/create.rs at line 184
    [5.12663][5.12663:12704]()
    .default(whoami::username())
    [5.12663]
    [5.4033]
    .with_default(whoami::username())
  • replacement in pijul/src/identity/create.rs at line 186
    [5.4094][5.12766:12818](),[5.12766][5.12766:12818]()
    .interact_text()
    .unwrap();
    [5.4094]
    [5.12818]
    .interact()?;
  • replacement in pijul/src/identity/create.rs at line 188
    [5.12819][5.12819:12890]()
    self.config.author.origin = Input::with_theme(config.as_ref())
    [5.12819]
    [5.12890]
    self.config.author.origin = Input::new()?
  • replacement in pijul/src/identity/create.rs at line 191
    [5.12988][5.12988:13092]()
    .default(String::from("ssh.pijul.com"))
    .interact_text()
    .unwrap();
    [5.12988]
    [5.13092]
    .with_default(String::from("ssh.pijul.com"))
    .interact()?;
  • replacement in pijul/src/identity/create.rs at line 194
    [5.13093][5.4095:4143]()
    if Confirm::with_theme(config.as_ref())
    [5.13093]
    [5.4143]
    if Confirm::new()?
  • replacement in pijul/src/identity/create.rs at line 203
    [5.4458][5.4458:4532]()
    .default(false)
    .interact()
    .unwrap()
    [5.4458]
    [5.4532]
    .with_default(false)
    .interact()?
  • edit in pijul/src/identity/create.rs at line 215
    [5.13473][5.13473:13518]()
    let config = config::load_theme()?;
  • replacement in pijul/src/identity/create.rs at line 220
    [5.31446][5.13519:13593]()
    self.public_key.expires = if Confirm::with_theme(config.as_ref())
    [5.31446]
    [5.31507]
    self.public_key.expires = if Confirm::new()?
  • replacement in pijul/src/identity/create.rs at line 227
    [5.31750][5.31750:31778]()
    .default(false)
    [5.31750]
    [5.31778]
    .with_default(false)
  • replacement in pijul/src/identity/create.rs at line 230
    [5.31813][5.31813:31885]()
    let time_stamp: String = Input::with_theme(config.as_ref())
    [5.31813]
    [5.31885]
    let time_stamp: String = Input::new()?
  • replacement in pijul/src/identity/create.rs at line 233
    [5.32013][5.32013:32088]()
    .validate_with(move |input: &String| -> Result<(), &str> {
    [5.32013]
    [5.32088]
    .with_validator(move |input: &String| -> Result<(), &str> {
  • replacement in pijul/src/identity/create.rs at line 246
    [5.32611][5.32611:32646]()
    .interact_text()?;
    [5.32611]
    [5.32646]
    .interact()?;
  • edit in pijul/src/commands/identity.rs at line 9
    [5.41054][5.41054:41078]()
    use dialoguer::Confirm;
  • edit in pijul/src/commands/identity.rs at line 11
    [5.15]
    [5.41098]
    use pijul_interaction::Confirm;
  • replacement in pijul/src/commands/identity.rs at line 208
    [5.47572][5.47572:47648]()
    dialoguer::Password::with_theme(config::load_theme()?.as_ref())
    [5.47572]
    [5.5338]
    pijul_interaction::Password::new()?
  • replacement in pijul/src/commands/identity.rs at line 400
    [5.1054][5.1054:1138]()
    .prompt_changes(Some(&old_identity.name), !options.no_link)
    [5.1054]
    [5.1138]
    .prompt_changes(Some(old_identity.name.clone()), !options.no_link)
  • replacement in pijul/src/commands/identity.rs at line 428
    [5.56342][5.56342:56418]()
    && !Confirm::with_theme(config::load_theme()?.as_ref())
    [5.56342]
    [5.56418]
    && !Confirm::new()?
  • replacement in pijul/src/commands/identity.rs at line 430
    [5.56483][5.56483:56523]()
    .default(false)
    [5.56483]
    [5.56523]
    .with_default(false)
  • edit in pijul/Cargo.toml at line 102
    [5.400][5.400:466]()
    dialoguer = { version = "0.10.4", features = [ "fuzzy-select" ] }
  • edit in Cargo.lock at line 2201
    [5.48225][5.48225:48239]()
    "dialoguer",