Store the current channel in the pristine
[?]
Jun 2, 2021, 12:18 PM
5OGOE4VWS5AIG4U2UYLLIGA3HY6UB7SNQOSESHNXBLET3VQXFBZACDependencies
- [2]
GUL4M5FICleanup and formatting - [3]
QL6K2ZM3Tags - [4]
HMMMKONLFixing alive vertices - [5]
BNPSVXICFriendlier progress bars - [6]
5BRU2RRWCleanup (debugging a crash related to trees/inodes) - [7]
I7VL7VPZMinor cleanup - [8]
WKX5S4Z4remove unneccesary explicit lifetimes - [9]
SEWGHUHQ.pijul/config: simplify remotes and hooks - [10]
WZVCLZKYaddress clippy lints - [11]
QWD7UE76push/pull: rename `channel` option - [12]
PJ7T2VFLDo not hang on locked repositories - [13]
JL4WKA5PImplement the Sanakirja concurrency model in a cross-process way - [14]
MFTN7GBWPre-tags cleanup + fast Sanakirja - [15]
A3DMBJJAUpgrading the `git` subcommand to the latest Sanakirja and Libpijul - [16]
CCLLB7OIUpgrading to Sanakirja 0.15 + version bump - [17]
K7JPP64SFaster error in unrecord when the change is not on the channel - [18]
LYTVEPH3Avoid cloning into an existing path - [19]
2RXOCWUWMaking libpijul deterministic (and getting rid of `rand`) - [20]
2D7P2VKJChange completions (where the whole progress bar story started) - [21]
5DVRL6MFHard-unrecord - [22]
BZSC7VMYaddress clippy lints - [23]
TFK7CYFQ`pijul channel new` to create new, empty channels - [24]
5SLOJYHGFixing the Git feature - [25]
A6R6SGCPFixing a panic in `pijul change` - [26]
VLPIKNFSclone: make source remote the default - [27]
L4JXJHWXpijul/*: reorganize imports and remove extern crate - [28]
YN63NUZOSanakirja 1.0 - [29]
PGERZ3KJChannel renaming (also do not create a new channel when recording on a channel that doesn't exist) - [30]
76PCXGMLPushing to, and pulling from the local repository - [31]
QMTANHVNReset: only output changed files - [32]
3X4OWIU2Sanakirja 1.2 - [33]
VMPAOJS2Don't output after pushing to a local channel - [34]
GHO6DWPIRefactoring iterators - [35]
KWAGWB73Adding extra dependencies from the config file - [36]
VL7ZYKHBRunning hooks through shell on Windows and Unix - [37]
RXNT67OTSanakirja version, and removing an unwrap - [38]
SXEYMYF7Fixing the bad changes in history (unfortunately, by rebooting). - [39]
33SQMZYXNew versions of dependencies - [40]
QE64ATLZFixing asynchronicity problems in SSH - [41]
ZBNKSYA6Fixing a bus error when starting a transaction on a full disk - [42]
VQPAUKBQchannel switch as an alias to reset - [43]
I24UEJQLVarious post-fire fixes - [44]
ZHABNS3SCanonicalize all paths - [45]
IUGP6ZGBAdd support for ~/.config/pijul even on macos - [46]
QV66H4YAPrevent --channel from being used with a single file in `pijul reset` - [47]
A7NTQINQpijul channel delete: error if channel doesn't exist - [48]
Y7YAFMFFFix path prefix striping on Windows. - [49]
Y6EVFMTADon't output files if they aren't in the current channel - [50]
AAXP2534Tags: completing the subcommand - [51]
MU5GSJAWPartial push and pull (WARNING: breaks the existing protocol) - [52]
UFCZKKLXUpgrading to the latest Sanakirja/Rand - [53]
WQQJLPTXFix the comparison between channels states when one is empty - [54]
Q45QHPO4Feedback on network stuff - [55]
I52XSRUHMassive cleanup, and simplification - [56]
TPEH2XNB1.0.0-alpha.28, with Tokio 1.0 - [57]
V435QOJRUsing path-slash to fix path issues on Windows - [58]
B3QWIGDEFixing the Git features with the latest Pijul (+ conflicts in Cargo.toml) - [59]
K6GWUOD5Styling progress bars - [60]
6DOXSHWGCleanup, and version bump - [61]
EEBKW7VTKeys and identities - [62]
ENKQ3QZGForward the exit status messages from the SSH background loop to the client (solving hangs)
Change contents
- edit in pijul/src/repository.rs at line 23[3.22013]→[3.97:197](∅→∅),[3.197]→[3.22013:22074](∅→∅),[3.22013]→[3.22013:22074](∅→∅),[3.22074]→[3.198:246](∅→∅),[3.246]→[3.22262:22284](∅→∅),[3.22262]→[3.22262:22284](∅→∅)
pub fn config_path(&self) -> PathBuf {self.path.join(DOT_DIR).join(CONFIG_FILE)}pub fn save_config(&self) -> Result<(), anyhow::Error> {self.config.save(&self.config_path())?;Ok(())} - edit in pijul/src/config.rs at line 93
pub current_channel: Option<String>, - edit in pijul/src/config.rs at line 160[3.1818]→[3.1818:1839](∅→∅),[3.1839]→[3.91297:91314](∅→∅),[3.91297]→[3.91297:91314](∅→∅),[3.91314]→[3.1686:1906](∅→∅)
Ok(())}}impl Config {pub fn save(&self, path: &std::path::Path) -> Result<(), anyhow::Error> {let config = toml::to_string(self)?;let mut file = std::fs::File::create(path)?;file.write_all(config.as_bytes())?; - edit in pijul/src/config.rs at line 161[3.1921]→[3.1921:1928](∅→∅),[3.1928]→[3.0:88](∅→∅),[3.91314]→[3.0:88](∅→∅),[3.80]→[3.91397:91434](∅→∅),[3.88]→[3.91397:91434](∅→∅),[3.91397]→[3.91397:91434](∅→∅),[3.91434]→[3.89:160](∅→∅),[3.160]→[3.91463:91528](∅→∅),[3.91463]→[3.91463:91528](∅→∅),[3.91528]→[3.161:198](∅→∅),[3.198]→[3.91557:91574](∅→∅),[3.91557]→[3.91557:91574](∅→∅),[3.91574]→[3.199:242](∅→∅),[3.242]→[3.83:100](∅→∅),[3.91609]→[3.83:100](∅→∅),[3.100]→[3.119:171](∅→∅),[3.171]→[3.162:289](∅→∅),[3.162]→[3.162:289](∅→∅),[3.289]→[3.91609:91619](∅→∅),[3.91609]→[3.91609:91619](∅→∅)
}pub fn get_current_channel<'a>(&'a self, alt: Option<&'a str>) -> (&'a str, bool) {if let Some(channel) = alt {(channel.as_ref(), alt == self.current_channel.as_deref())} else if let Some(ref channel) = self.current_channel {(channel.as_str(), true)} else {(crate::DEFAULT_CHANNEL, true)}}pub fn current_channel(&self) -> Option<&str> {if let Some(ref channel) = self.current_channel {Some(channel.as_str())} else {None} - edit in pijul/src/commands/unrecord.rs at line 38
let (channel_name, is_current_channel) =repo.config.get_current_channel(self.channel.as_deref()); - replacement in pijul/src/commands/unrecord.rs at line 39
let channel = if let Some(channel) = txn.load_channel(channel_name)? {let cur = txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL);let channel_name = if let Some(ref c) = self.channel {c} else {cur};let is_current_channel = cur == channel_name;let channel = if let Some(channel) = txn.load_channel(&channel_name)? { - replacement in pijul/src/commands/tag.rs at line 61
let channel_name = repo.config.get_current_channel(channel.as_deref()).0.to_string();let mut txn = repo.pristine.mut_txn_begin()?;let channel_name = if let Some(ref c) = channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}; - edit in pijul/src/commands/tag.rs at line 68
let mut txn = repo.pristine.mut_txn_begin()?; - edit in pijul/src/commands/tag.rs at line 120
let channel_name = repo.config.get_current_channel(None).0.to_string(); - edit in pijul/src/commands/tag.rs at line 121
let channel_name = txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL).to_string(); - replacement in pijul/src/commands/reset.rs at line 44
let config_path = repo.config_path();let mut config = repo.config;let (channel_name, _) = config.get_current_channel(self.channel.as_deref());let channel_name = if let Some(ref c) = self.channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}; - replacement in pijul/src/commands/reset.rs at line 87
let (current_channel, _) = config.get_current_channel(None);if self.channel.as_deref() == Some(current_channel) {let current_channel = txn.read().unwrap().current_channel().unwrap_or(crate::DEFAULT_CHANNEL).to_string();if self.channel.as_deref() == Some(¤t_channel) { - replacement in pijul/src/commands/reset.rs at line 103
txn.load_channel(current_channel)?txn.load_channel(¤t_channel)? - replacement in pijul/src/commands/reset.rs at line 126
if self.channel.is_none() || self.channel.as_deref() == Some(current_channel) {if self.channel.is_none() || self.channel.as_deref() == Some(¤t_channel) { - replacement in pijul/src/commands/reset.rs at line 149
let txn_ = txn.read().unwrap();if let Some(cur) = txn_.load_channel(current_channel)? {let mut txn_ = txn.write().unwrap();if let Some(cur) = txn_.load_channel(¤t_channel)? { - replacement in pijul/src/commands/reset.rs at line 168
if self.channel.is_some() {config.current_channel = self.channel;config.save(&config_path)?;if let Some(ref c) = self.channel {txn_.set_current_channel(c)? - replacement in pijul/src/commands/record.rs at line 71
let channel = repo.config.get_current_channel(self.channel.as_deref()).0;let channel = if let Some(ref c) = self.channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}; - replacement in pijul/src/commands/pushpull.rs at line 126
let (channel_name, _) = repo.config.get_current_channel(self.from_channel.as_deref());let mut txn = repo.pristine.mut_txn_begin()?;let channel_name = if let Some(ref c) = self.from_channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}.to_string(); - replacement in pijul/src/commands/pushpull.rs at line 146
channel_namechannel_name.as_str() - replacement in pijul/src/commands/pushpull.rs at line 151
channel_namechannel_name.as_str() - edit in pijul/src/commands/pushpull.rs at line 162
let mut txn = repo.pristine.mut_txn_begin()?; - replacement in pijul/src/commands/pushpull.rs at line 163
let channel = txn.open_or_create_channel(channel_name)?;let channel = txn.open_or_create_channel(&channel_name)?; - replacement in pijul/src/commands/pushpull.rs at line 284[3.456]→[3.724:846](∅→∅),[3.117701]→[3.724:846](∅→∅),[3.311]→[3.117784:117853](∅→∅),[3.558]→[3.117784:117853](∅→∅),[3.846]→[3.117784:117853](∅→∅),[3.117784]→[3.117784:117853](∅→∅)
let (channel_name, is_current_channel) =repo.config.get_current_channel(self.to_channel.as_deref());let mut channel = txn.open_or_create_channel(channel_name)?;let cur = txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL);let channel_name = if let Some(ref c) = self.from_channel {c} else {cur}.to_string();let is_current_channel = channel_name == cur;let mut channel = txn.open_or_create_channel(&channel_name)?; - replacement in pijul/src/commands/log.rs at line 34
let (channel_name, _) = repo.config.get_current_channel(self.channel.as_deref());let channel_name = if let Some(ref c) = self.channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}; - replacement in pijul/src/commands/init.rs at line 19
let mut repo = Repository::init(self.path).await?;let repo = Repository::init(self.path).await?; - replacement in pijul/src/commands/init.rs at line 25
repo.config.current_channel = Some(channel_name);repo.save_config()?;txn.set_current_channel(&channel_name)?; - replacement in pijul/src/commands/fork.rs at line 35[3.168764]→[3.2253:2347](∅→∅),[3.791]→[3.17285:17354](∅→∅),[3.2347]→[3.17285:17354](∅→∅),[3.168851]→[3.17285:17354](∅→∅)
let (channel_name, _) = repo.config.get_current_channel(self.channel.as_deref());if let Some(channel) = txn.load_channel(channel_name)? {let channel_name = if let Some(ref c) = self.channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}.to_string();if let Some(channel) = txn.load_channel(&channel_name)? { - replacement in pijul/src/commands/diff.rs at line 9
use libpijul::MutTxnT;use libpijul::{MutTxnT, TxnT}; - replacement in pijul/src/commands/diff.rs at line 40
let channel =txn.open_or_create_channel(repo.config.get_current_channel(self.channel.as_deref()).0)?;let channel = if let Some(ref c) = self.channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}.to_string();let channel = txn.open_or_create_channel(&channel)?; - replacement in pijul/src/commands/debug.rs at line 23
let (channel_name, _) = repo.config.get_current_channel(self.channel.as_deref());let channel_name = if let Some(ref c) = self.channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}.to_string(); - replacement in pijul/src/commands/credit.rs at line 28
let mut repo = Repository::find_root(self.repo_path).await?;let repo = Repository::find_root(self.repo_path).await?; - replacement in pijul/src/commands/credit.rs at line 30
let (channel_name, _) = repo.config.get_current_channel(self.channel.as_deref());let channel_name = if let Some(ref c) = self.channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}; - edit in pijul/src/commands/credit.rs at line 40
if self.channel.is_some() {repo.config.current_channel = self.channel;repo.save_config()?;} - edit in pijul/src/commands/clone.rs at line 89
let config_path = repo.config_path();let mut config = repo.config; - replacement in pijul/src/commands/clone.rs at line 103
let txn = if let Ok(t) = Arc::try_unwrap(txn) {let mut txn = if let Ok(t) = Arc::try_unwrap(txn) { - edit in pijul/src/commands/clone.rs at line 108
txn.set_current_channel(&self.channel)?; - edit in pijul/src/commands/clone.rs at line 110[3.185801]→[3.22925:22978](∅→∅),[3.22978]→[3.1742:1808](∅→∅),[3.185859]→[3.1742:1808](∅→∅),[3.1808]→[3.22979:23047](∅→∅),[3.23047]→[3.1881:1965](∅→∅),[3.1881]→[3.1881:1965](∅→∅),[3.1965]→[3.23048:23103](∅→∅),[3.23103]→[3.2025:2035](∅→∅),[3.2025]→[3.2025:2035](∅→∅),[3.2035]→[3.23104:23140](∅→∅)
config.current_channel = Some(self.channel);if let crate::remote::RemoteRepo::Local(ref l) = remote {config.default_remote = std::fs::canonicalize(&l.root)?.to_str().map(|x| x.to_string());} else {config.default_remote = Some(self.remote);}config.save(&config_path)?; - edit in pijul/src/commands/channel.rs at line 43
let current = repo.config.current_channel(); - edit in pijul/src/commands/channel.rs at line 44
let current = txn.current_channel().ok(); - replacement in pijul/src/commands/channel.rs at line 58
let current = repo.config.current_channel();let mut txn = repo.pristine.mut_txn_begin()?;let current = txn.current_channel().ok(); - edit in pijul/src/commands/channel.rs at line 63
let mut txn = repo.pristine.mut_txn_begin()?; - replacement in pijul/src/commands/channel.rs at line 79[3.188456]→[3.263:340](∅→∅),[3.340]→[3.1809:1870](∅→∅),[3.14054]→[3.1809:1870](∅→∅),[3.16294]→[3.1809:1870](∅→∅),[3.1809]→[3.1809:1870](∅→∅)
let mut repo = Repository::find_root(self.repo_path).await?;let current = repo.config.current_channel();let repo = Repository::find_root(self.repo_path).await?; - edit in pijul/src/commands/channel.rs at line 81
let current = txn.current_channel().ok(); - edit in pijul/src/commands/channel.rs at line 95
txn.set_current_channel(&to)?; - edit in pijul/src/commands/channel.rs at line 97
repo.config.current_channel = Some(to.to_string());repo.save_config()?; - replacement in pijul/src/commands/change.rs at line 29
let (channel_name, _) = repo.config.get_current_channel(None);let channel = if let Some(channel) = txn.load_channel(channel_name)? {let channel_name = txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL);let channel = if let Some(channel) = txn.load_channel(&channel_name)? { - edit in pijul/src/commands/archive.rs at line 107
let (channel_name, _) = repo.config.get_current_channel(self.channel.as_deref()); - edit in pijul/src/commands/archive.rs at line 115
let channel_name = if let Some(ref c) = self.channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}; - edit in pijul/src/commands/archive.rs at line 131
let channel_name = if let Some(ref c) = self.channel {c} else {txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL)}; - replacement in pijul/src/commands/apply.rs at line 33
let (channel_name, is_current_channel) =repo.config.get_current_channel(self.channel.as_deref());let cur = txn.current_channel().unwrap_or(crate::DEFAULT_CHANNEL);let channel_name = if let Some(ref c) = self.channel {c} else {cur};let is_current_channel = channel_name == cur; - replacement in libpijul/src/tag.rs at line 303
pub fn from_channel<W: std::io::Write, T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>>(pub fn from_channel<W: std::io::Write,T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage,>( - replacement in libpijul/src/tag.rs at line 352
T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>,T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage, - replacement in libpijul/src/tag.rs at line 472
T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>,T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage, - edit in libpijul/src/pristine/sanakirja.rs at line 143
cur_channel: None, - edit in libpijul/src/pristine/sanakirja.rs at line 232
cur_channel: None, - replacement in libpijul/src/pristine/sanakirja.rs at line 248
pub struct GenericTxn<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>> {pub struct GenericTxn<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage>{ - edit in libpijul/src/pristine/sanakirja.rs at line 274
cur_channel: Option<String>, - replacement in libpijul/src/pristine/sanakirja.rs at line 280
unsafe impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>> Send for GenericTxn<T> {}unsafe impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage> Sendfor GenericTxn<T>{} - replacement in libpijul/src/pristine/sanakirja.rs at line 352
impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>> GraphTxnT for GenericTxn<T> {impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage> GraphTxnTfor GenericTxn<T>{ - replacement in libpijul/src/pristine/sanakirja.rs at line 612
impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>> GraphIter for GenericTxn<T> {impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage> GraphIterfor GenericTxn<T>{ - replacement in libpijul/src/pristine/sanakirja.rs at line 677
impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>> ChannelTxnT for GenericTxn<T> {impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage> ChannelTxnTfor GenericTxn<T>{ - replacement in libpijul/src/pristine/sanakirja.rs at line 958
impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>> DepsTxnT for GenericTxn<T> {impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage> DepsTxnTfor GenericTxn<T>{ - replacement in libpijul/src/pristine/sanakirja.rs at line 1038
impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>> TreeTxnT for GenericTxn<T> {impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage> TreeTxnTfor GenericTxn<T>{ - replacement in libpijul/src/pristine/sanakirja.rs at line 1103
impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>> GenericTxn<T> {impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage> GenericTxn<T> { - replacement in libpijul/src/pristine/sanakirja.rs at line 1131
impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error>> TxnT for GenericTxn<T> {impl<T: ::sanakirja::LoadPage<Error = ::sanakirja::Error> + ::sanakirja::RootPage> TxnTfor GenericTxn<T>{ - edit in libpijul/src/pristine/sanakirja.rs at line 1419
fn current_channel(&self) -> Result<&str, Self::GraphError> {if let Some(ref c) = self.cur_channel {Ok(c)} else {unsafe {let b = self.txn.root_page();let len = b[4096 - 256] as usize;if len == 0 {Ok("main")} else {let s = std::slice::from_raw_parts(b.as_ptr().add(4096 - 255), len);Ok(std::str::from_utf8(s).unwrap_or("main"))}}}} - edit in libpijul/src/pristine/sanakirja.rs at line 2024
}}if let Some(ref cur) = self.cur_channel {unsafe {assert!(cur.len() < 256);let b = self.txn.root_page_mut();b[4096 - 256] = cur.len() as u8;std::ptr::copy(cur.as_ptr(), b.as_mut_ptr().add(4096 - 255), cur.len()) - edit in libpijul/src/pristine/sanakirja.rs at line 2053
Ok(())}fn set_current_channel(&mut self, cur: &str) -> Result<(), Self::GraphError> {self.cur_channel = Some(cur.to_string()); - edit in libpijul/src/pristine/mod.rs at line 596
fn current_channel(&self) -> Result<&str, Self::GraphError>; - edit in libpijul/src/pristine/mod.rs at line 1636
fn set_current_channel(&mut self, cur: &str) -> Result<(), Self::GraphError>; - replacement in libpijul/Cargo.toml at line 98
sanakirja = { version = "1.2", features = [ "crc32" ] }sanakirja = { version = "1.2.4", features = [ "crc32" ] } - replacement in Cargo.lock at line 1876
version = "1.2.0"version = "1.2.4" - replacement in Cargo.lock at line 1878
checksum = "d822992da34989ceda221b7cc3f99381da3130c8e90f393054b0ea4e80617265"checksum = "0bbeaf95d57d98d57cc2f7f58bc0028e2e5a49e446bedb0288ed755238b60c32" - replacement in Cargo.lock at line 2005
version = "1.3.0"version = "1.4.0" - replacement in Cargo.lock at line 2007
checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6"checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"