Only re-write identity data when changed
Dependencies
- [2]
4OJWMSOWFully replace crate::Identity - [3]
EEBKW7VTKeys and identities - [4]
YJXRCXOSDisallow overwriting existing identities via `pijul id edit` - [5]
A3RM526YIntegrating identity malleability - [6]
TFPETWTVAdd config options for patch message templates - [7]
FVQYZQFLCreate dialoguer themes based on global config - [8]
DWSAYGVEUpdate codebase to use new identity management - [9]
4KJ45IJLImplement new identity management - [10]
CB7UPUQFCustomizable ignore_kinds (and a fix of .write()) - [11]
6FRPUHWKFix identity tests - [12]
5BB266P6Optional colours in the global config file - [*]
SXEYMYF7Fixing the bad changes in history (unfortunately, by rebooting).
Change contents
- replacement in pijul/src/identity/mod.rs at line 60
#[derive(Clone, Debug, Serialize, Deserialize)]#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] - edit in pijul/src/identity/create.rs at line 7
use std::fs; - edit in pijul/src/identity/create.rs at line 8
use std::{fs, path::PathBuf}; - replacement in pijul/src/identity/create.rs at line 261
/// Write an identity to disk.////// # Arguments/// * `replace_current` - If the new identity will replace an existing onefn write(&self, replace_current: bool) -> Result<(), anyhow::Error> {fn write_config(&self, identity_dir: &PathBuf) -> Result<(), anyhow::Error> {let config_data = toml::to_string_pretty(&self)?;let mut config_file = std::fs::File::create(identity_dir.join("identity.toml"))?;config_file.write_all(config_data.as_bytes())?;Ok(())}fn write_secret_key(&self, identity_dir: &PathBuf) -> Result<(), anyhow::Error> {let key_data = serde_json::to_string_pretty(&self.secret_key())?;let mut key_file = super::load::open_secret_file(&identity_dir.join("secret_key.json"))?;key_file.write_all(key_data.as_bytes())?;Ok(())}/// Write a complete identity to disk.fn write(&self) -> Result<(), anyhow::Error> { - replacement in pijul/src/identity/create.rs at line 280
if !replace_current {bail!("An identity with that name already exists: {existing_identity}");}bail!("An identity with that name already exists: {existing_identity}"); - edit in pijul/src/identity/create.rs at line 287
self.write_config(&identity_dir)?;self.write_secret_key(&identity_dir)?; - edit in pijul/src/identity/create.rs at line 290[3.36298]→[2.13610:13668](∅→∅),[2.13668]→[3.36365:36512](∅→∅),[3.36365]→[3.36365:36512](∅→∅),[3.36512]→[2.13669:13743](∅→∅),[2.13743]→[3.36584:36733](∅→∅),[3.36584]→[3.36584:36733](∅→∅)
let config_data = toml::to_string_pretty(&self)?;let mut config_file = std::fs::File::create(identity_dir.join("identity.toml"))?;config_file.write_all(config_data.as_bytes())?;let key_data = serde_json::to_string_pretty(&self.secret_key())?;let mut key_file = super::load::open_secret_file(&identity_dir.join("secret_key.json"))?;key_file.write_all(key_data.as_bytes())?; - replacement in pijul/src/identity/create.rs at line 354
confirmed_identity.write(false)?;confirmed_identity.write()?; - replacement in pijul/src/identity/create.rs at line 364
// Remove the old datalet old_identity_path = path(&self.name, true)?;debug!("Removing old directory: {old_identity_path:?}");fs::remove_dir_all(old_identity_path).context("Could not remove old identity.")?;let changed_names = self.name != new_identity.name;// If changing the identity name, remove old directoryif changed_names {let old_identity_path = path(&self.name, true)?;debug!("Removing old directory: {old_identity_path:?}");fs::remove_dir_all(old_identity_path).context("Could not remove old identity.")?;let new_identity_path = path(&new_identity.name, false)?;debug!("Creating new directory: {new_identity_path:?}");fs::create_dir_all(new_identity_path).context("Could not create new identity.")?; - replacement in pijul/src/identity/create.rs at line 376
// Write the new datanew_identity.write(true)?;new_identity.write()?; - replacement in pijul/src/identity/create.rs at line 378
// Remove the old keychain entry if name has changedif self.name != new_identity.name {// Delete the existing password - edit in pijul/src/identity/create.rs at line 382
} else {// Write only the new datalet identity_dir = path(&new_identity.name, false)?;if self.config != new_identity.config {new_identity.write_config(&identity_dir)?;}if self.secret_key() != new_identity.secret_key() {new_identity.write_secret_key(&identity_dir)?;} - replacement in pijul/src/config.rs at line 20
#[derive(Debug, Clone, Serialize, Deserialize)]#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] - replacement in pijul/src/commands/identity.rs at line 217
let secret_key = libpijul::key::SKey::generate(expiry);let credentials = if let Some(mut key) = default.secret_key() {key.expires = expiry;Some(identity::Credentials::new(key, pw))} else {None}; - replacement in pijul/src/commands/identity.rs at line 236
secret_key.public_key(),Some(identity::Credentials::new(secret_key.save(pw.as_deref()),pw,)),default.public_key,credentials, - replacement in libpijul/src/key.rs at line 19
#[derive(Clone, Debug, Serialize, Deserialize)]#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] - replacement in libpijul/src/key.rs at line 319
#[derive(Clone, Debug, Serialize, Deserialize)]#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] - replacement in libpijul/src/key.rs at line 324
#[derive(Clone, Debug, Serialize, Deserialize)]#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]