Resolve conflicts in identity creation

berkus
Feb 16, 2026, 11:15 PM
VQCREHLR6QSS3CWTCWIMSX7OYEJAU75XDXHPTO2MHEKYJCCXSJQQC

Dependencies

  • [2] 4KJ45IJL Implement new identity management
  • [3] 4OJWMSOW Fully replace crate::Identity
  • [4] 4RV7T4SR Migrate from `pijul::config` to `pijul-config`
  • [5] 5Z2Y7VGV Migrate `pijul::identity::Complete::prove` to `pijul::remote::prove`
  • [6] 3OPNBBAU Migrate from `pijul::remote` to `pijul_remote`
  • [7] HJVWPKWV Migrate crates to edition 2024
  • [8] 7FP2DFNX Optimisation: avoid re-checking the entire repo when recording after an unrecord
  • [9] MBIKZPCC Add flags to disable the use of the system keyring, asking to prompt the key password directly instead
  • [10] YW6NICQV Migrate codebase to refactored `pijul_config` crate
  • [11] HGJETVAN Create `pijul_config::global_config_directory()`
  • [12] 7JTKP74V Fixing a conflict
  • [13] ZPLT3HRL Fix error in identity new by skipping any prompting when no-prompt is set
  • [14] N26HD5PF Replace `chrono` with `jiff`
  • [15] LPM4PBYJ More precise API for working copy in record and output
  • [16] DOEG3V7U Only re-write identity data when changed
  • [17] EVDH2ECT Migrate from `pijul::identity` to `pijul_identity`
  • [18] KKNMDXAI Tweak identity subcommand
  • [19] 4UY2WBBP Adding a "Sink" working copy and avoid outputting ignored files
  • [20] 44RUBHRE Only re-prove identity when credentials change
  • [21] WTPFQPO5 Add global `no_prompt` flag
  • [*] SXEYMYF7 Fixing the bad changes in history (unfortunately, by rebooting).

Change contents

  • edit in pijul-identity/src/repair.rs at line 1
    [2.56]
    [10.2615]
    use crate::create::CreateParams;
  • replacement in pijul-identity/src/repair.rs at line 70
    [12.433][12.433:488]()
    .create(config, true, use_keyring)
    [12.433]
    [12.488]
    .create(
    config,
    CreateParams {
    no_prompt: false,
    link_remote: true,
    use_keyring,
    },
    )
  • edit in pijul-identity/src/repair.rs at line 79
    [2.4220][13.0:65](),[2.4220][13.0:65]()
    old_identity.clone().create(false, true).await?;
  • resolve order conflict in pijul-identity/src/repair.rs at line 79
    [12.517]
    [2.4889]
  • replacement in pijul-identity/src/repair.rs at line 104
    [12.569][12.569:632]()
    .create(config, true, use_keyring)
    [12.569]
    [12.632]
    .create(
    config,
    CreateParams {
    no_prompt: false,
    link_remote: true,
    use_keyring,
    },
    )
  • edit in pijul-identity/src/repair.rs at line 113
    [2.6256][13.66:139]()
    Complete::default()?.create(false, true).await?;
  • resolve order conflict in pijul-identity/src/repair.rs at line 113
    [12.669]
    [2.6333]
  • edit in pijul-identity/src/lib.rs at line 41
    [2.16968]
    [3.1919]
    pub use create::CreateParams;
  • edit in pijul-identity/src/create.rs at line 14
    [2.28954]
    [2.28954]
    pub struct CreateParams {
    pub no_prompt: bool,
    pub link_remote: bool,
    pub use_keyring: bool,
    }
  • replacement in pijul-identity/src/create.rs at line 272
    [10.7759][2.38441:38529](),[2.38441][2.38441:38529]()
    /// * `link_remote` - Override if the identity should be exchanged with the remote.
    [10.7759]
    [10.7760]
    /// * `params.link_remote` - Override if the identity should be exchanged with the remote.
  • replacement in pijul-identity/src/create.rs at line 276
    [10.7839][10.7839:7866](),[10.7866][12.1728:1755]()
    link_remote: bool,
    use_keyring: bool,
    [10.7839]
    [10.7866]
    params: CreateParams,
  • edit in pijul-identity/src/create.rs at line 278
    [2.38529][13.140:238]()
    pub async fn create(&self, no_prompt: bool, link_remote: bool) -> Result<(), anyhow::Error> {
  • resolve order conflict in pijul-identity/src/create.rs at line 278
    [10.7903]
    [3.14019]
  • edit in pijul-identity/src/create.rs at line 279
    [3.14076][12.1756:1883]()
    let confirmed_identity = self
    .prompt_changes(config, None, link_remote, use_keyring)
    .await?;
  • replacement in pijul-identity/src/create.rs at line 280
    [13.270][13.270:318]()
    let confirmed_identity = if no_prompt {
    [13.270]
    [13.318]
    let confirmed_identity = if params.no_prompt {
  • replacement in pijul-identity/src/create.rs at line 283
    [13.352][13.352:431]()
    prompted_identity = self.prompt_changes(None, link_remote).await?;
    [13.352]
    [13.431]
    prompted_identity = self
    .prompt_changes(config, None, params.link_remote, params.use_keyring)
    .await?;
  • replacement in pijul/src/commands/identity.rs at line 4
    [10.13454][7.3927:4015](),[4.1254][7.3927:4015]()
    use pijul_identity::{self as identity, Complete, choose_identity_name, fix_identities};
    [10.13420]
    [6.549]
    use pijul_identity::{
    self as identity, Complete, CreateParams, choose_identity_name, fix_identities,
    };
  • replacement in pijul/src/commands/identity.rs at line 277
    [9.3099][12.2567:2642]()
    .create(config, !options.no_link, !options.no_keyring)
    [9.3099]
    [9.3166]
    .create(
    config,
    CreateParams {
    link_remote: !options.no_link,
    use_keyring: !options.no_keyring,
    no_prompt: options.no_prompt,
    },
    )
  • edit in pijul/src/commands/identity.rs at line 286
    [9.3195][12.2643:2643](),[2.49307][13.474:551]()
    identity.create(options.no_prompt, !options.no_link).await?;
  • resolve order conflict in pijul/src/commands/identity.rs at line 286
    [9.3195]
    [5.1971]
  • resurrect zombie in pijul/src/commands/identity.rs at line 509
    [12.3372][9.4559:4579](),[9.4559][9.4559:4579](),[9.4559][9.4559:4579]()
    )?;
  • replacement in pijul/src/commands/identity.rs at line 510
    [9.4579][12.3373:3373](),[9.4579][12.3373:3373]()
    [9.4579]
    [11.1954]
  • replacement in libpijul/src/working_copy/mod.rs at line 51
    [8.1098][8.1098:1189]()
    fn touch(&self, _name: &str, time: std::time::SystemTime) -> Result<(), Self::Error> {
    [8.1098]
    [8.1189]
    fn touch(&self, _name: &str, _time: std::time::SystemTime) -> Result<(), Self::Error> {