Unrecording changes atomically
[?]
Nov 20, 2020, 3:21 PM
YAJAXIV5VL263Z6FYLKFPROB3MQPRPH22P44GRGRVGEP56HOMBOACDependencies
- [2]
AN7IDX26pijul: added ChangesNotFound error variant - [3]
L4JXJHWXpijul/*: reorganize imports and remove extern crate - [4]
SXEYMYF7Fixing the bad changes in history (unfortunately, by rebooting).
Change contents
- edit in pijul/src/main.rs at line 11
use libpijul::pristine::Base32; - edit in pijul/src/main.rs at line 158
#[error("Cannot unrecord change {}, because change {} depends on it", change, dep.to_base32())]CannotUnrecord { change: String, dep: libpijul::pristine::Hash }, - edit in pijul/src/commands/unrecord.rs at line 0
use std::io::Write; - replacement in pijul/src/commands/unrecord.rs at line 3
use libpijul::pristine::{Base32, MutTxnT, TxnT};use libpijul::pristine::{MutTxnT, TxnT}; - replacement in pijul/src/commands/unrecord.rs at line 28
let mut stderr = std::io::stderr();for c in self.change_id.iter() {let (hash, change_id) = txn.hash_from_prefix(c)?;if let Some(mut channel) = txn.load_channel(channel_name) {let mut can_unrecord = true;if let Some(mut channel) = txn.load_channel(channel_name) {let mut changes = Vec::new();let channel_ = channel.borrow();for c in self.change_id {let (hash, change_id) = txn.hash_from_prefix(&c)?;let n = txn.get_changeset(&channel_.changes, change_id, None).unwrap();changes.push((hash, change_id, n, c))}std::mem::drop(channel_);changes.sort_by(|a, b| b.2.cmp(&a.2));for (hash, change_id, _, c) in changes { - replacement in pijul/src/commands/unrecord.rs at line 47
if can_unrecord {writeln!(stderr, "Cannot unrecord change {}, because the following changes depend on it:", c)?}can_unrecord = false;writeln!(stderr, " {}", txn.get_external(d).unwrap().to_base32())?return Err((crate::Error::CannotUnrecord {change: c,dep: txn.get_external(d).unwrap(),}).into()) - replacement in pijul/src/commands/unrecord.rs at line 54
if can_unrecord {txn.unrecord(&repo.changes, &mut channel, &hash)?;}txn.unrecord(&repo.changes, &mut channel, &hash)?;