5OGOE4VWS5AIG4U2UYLLIGA3HY6UB7SNQOSESHNXBLET3VQXFBZAC
GUL4M5FIE7JYXJHR7MCTQS3543HIQXGPLBWZKASBAWWEA4SZ75CAC
SXEYMYF7P4RZMZ46WPL4IZUTSQ2ATBWYZX7QNVMS3SGOYXYOHAGQC
I24UEJQLCH2SOXA4UHIYWTRDCHSOPU7AFTRUOTX7HZIAV4AZKYEQC
VL7ZYKHBPKLNY5SA5QBW56SJ7LBBCKCGV5UAYLVF75KY6PPBOD4AC
Y6EVFMTA6FOH3OQH6QCSWMI3F6SYZT2FSHO6GF4M3ICENDCWFM4QC
I7VL7VPZV2NKOZRKBWWEHFOGNGGTYLPONHABVJ767D6HPJJNY5RAC
VQPAUKBQ2POZKL7CZFAZK5ZQKEBYL27XZYZWYUSH5AH25KK6DWKAC
WKX5S4Z4DOB5S6A6X5V6ECZFCHQUMWRGX5XT4FBOG57P6HPWK7CAC
AAXP2534BWX2ZUDZZHUMLYDBMGFGUH32CNRA3KOLER3JKOIJUZLAC
QL6K2ZM35B3NIXEMMCJWUSFXOBQHAGXRDMO7ID5DCKTJH4QJVY7QC
Y7YAFMFFJY3SQ3GYN3SS4V3FZWMH3B5L65AXQBXOR5XARSMF5JJQC
QMTANHVNRPQ5IX66FYQBFRBDCTN6YKMNCO6OHTQ6QCUASPWWXJKAC
ZBNKSYA6PW4DSPC3NCRUZLVHW2GNXMCSDSAGEIKHGHDGGZRBH7ZQC
PGERZ3KJIQIREXAYLKLZR4526X5RPKIA6LSVZL2DGYQ5UVPIIBUQC
Q45QHPO4HDTEZF2W4UDZSYYQ46BPEIWSW4GJILZR5HTJNLKXJABQC
MU5GSJAW65PEG3BRYUKZ7O37BPHW3MOX3S5E2RFOXKGUOJEEDQ5AC
QWD7UE766WLJ3JZU7L2UXMV7Q236DSDMH2CCI4M6HIA4QA3QVFAQC
CCLLB7OIFNFYJZTG3UCI7536TOCWSCSXR67VELSB466R24WLJSDAC
JL4WKA5PBKXRNAMETYO4I52QKASQ3COYHH2JKGA7W5YLIRZZH53AC
L4JXJHWXYNCL4QGJXNKKTOKKTAXKKXBJUUY7HFZGEUZ5A2V5H34QC
I52XSRUH5RVHQBFWVMAQPTUSPAJ4KNVID2RMI3UGCVKFLYUO6WZAC
YN63NUZO4LVJ7XPMURDULTXBVJKW5MVCTZ24R7Z52QMHO3HPDUVQC
2D7P2VKJASU7QDQZHGCLBIT6G2V5WUFYLWTCEVVEI2EZHGM6XYRAC
QE64ATLZWMKHYABCD3VA547PYXCK6YN3K7RE2TX3SCQNKG7XLVAQC
B3QWIGDERNMB3M6P5WTWP5CN2DB3KCS7MVTEPC2XVJ237ZXVQGMAC
A6R6SGCPLFM45QNWJLISFBR3EEXVITYHCWEUOPNH4UIGIWJRTZAQC
5SLOJYHGPMZVCOE3IS7ICNMJJYX3RBT6CDG5MAV6T4CJIOW7YZ6QC
GHO6DWPILBBTL6CVZKERJBTFL3EY6ZT4YM4E5R4S6YPGVFKFHCVAC
2RXOCWUWOGHEKHT5W73LAHJSOZVRTOGS7BWLSIGEEEBJGMCZBXQAC
ENKQ3QZGH2QW246C7GSZRKYLODJOQHKZZSYV7QHB7VPOFP5PASVQC
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(())
}
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())?;
}
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
}
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)? {
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)
};
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)
};
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) {
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();
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)?;
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)? {
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)?;
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)?;
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?;
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)? {
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;
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"))
}
}
}
}