SWDPAGF6BGUA2L6KFP6LAVCA3SX4QA5FOZRLLOAWLNZ6RNCIV4RQC SWWE2R6MVBX5CNM6X3WLXZTSRTU53PBJL7WJSFVF77XBPXDX4COAC KT5UYXGKEEXUHURNOYFVIG7WQ3Y3SJZMM2TP4OSW6NXSXQ5XXRHAC W7IUT3ZVMFH77IGKLAL7WX7IVVTGTY3FKEJ3WHMP3KI37B6NENLQC YBJRDOTCX3ZRDB5EVXJBR55FX3CADCSIGMYWNYVC2PD5W3GXR3DQC A5YBC77VWH2LXCZJOPZORQJI5ZYABSCHJWVX5HVNWPM5RABXESLQC VCNKFNUF7OWVSWC6I5D25KUZ3XZZICZ3LHWVPF2N5ZSP7LQ2JOUQC I56UGW7UUKLSR4753EYRGNROZB5PD522REEOGHVAQOZZTSVRUEEQC KMB6FND35LWT4XTRUNEJZ7SQXFZEUYIJAADGWJVB4RY4IIAT4KSQC YYKXNBFL44LLOBABLXBKOF7IFUIGIEL2SYIPLGDH6UOEY5EZZZSQC TSFQFCB2NXDOBLBRUSAT63VJIXLPPTJGSTIDNOTLGHVVWSHITRNQC UF5NJKASGMZSZMBUKSUI67B2GIMQFX5SNNQEHHGUBNDBQ2QZZWSAC VOFP2YNQLSGQL3JFRCNCU4VY2YDIVHWBVNXY5HHVFR3AFTBOBMCQC /// Setup a Pijul ID in a temp dir. Sets `PIJUL_CONFIG_DIR` env var, which is/// used by pijul when loading IDpub fn setup_pijul_id() -> PijulId {
/// Setup a Pijul user ID in a temp dir. Sets `PIJUL_CONFIG_DIR` env var, which/// is used by pijul when loading IDpub fn setup_test_user_id() -> TestUserId {
let repo = Repository::init(Some(rootdir.path().join(&subdir)), None, None).unwrap();let mut txn = repo.pristine.mut_txn_begin().unwrap();let channel_name = libpijul::DEFAULT_CHANNEL.to_string();libpijul::MutTxnT::open_or_create_channel(&mut txn, &channel_name).unwrap();libpijul::MutTxnT::set_current_channel(&mut txn, &channel_name).unwrap();libpijul::MutTxnT::commit(txn).unwrap();
// Select and record the default ".ignore" filelet file_to_record = ".ignore";repo::add(&mut repo, file_to_record);let (internal, _state) = repo::load(repo_dir).unwrap();let skey = Arc::new(SKey::generate(None));repo::record(&internal, "Initialized".to_string(), skey);
}pub fn empty_pijul_repo(dir: PathBuf) -> pijul::Repository {let repo = Repository::init(Some(dir), None, None).unwrap();let mut txn = repo.pristine.mut_txn_begin().unwrap();let channel_name = libpijul::DEFAULT_CHANNEL.to_string();libpijul::MutTxnT::open_or_create_channel(&mut txn, &channel_name).unwrap();libpijul::MutTxnT::set_current_channel(&mut txn, &channel_name).unwrap();libpijul::MutTxnT::commit(txn).unwrap();repo
fn record(state: &InternalState, message: String, sk: Arc<SKey>) {
#[derive(Debug)]pub enum NewChannelError {AlreadyExists(String),}#[allow(dead_code)] // TODO rm once usedfn new_channel(repo: &mut pijul::Repository,name: String,) -> Result<(), NewChannelError> {use libpijul::{GraphTxnT, MutTxnTExt};// pijul's command `Channel::New`let mut txn = repo.pristine.mut_txn_begin().unwrap();if txn.load_channel(&name).unwrap().is_some() {return Err(NewChannelError::AlreadyExists(name));}let new = txn.open_or_create_channel(&name).unwrap();// Safeguard: apply the root patch if we're creating a new channel.let current = txn.current_channel().unwrap();let channel = txn.load_channel(current).unwrap().unwrap();let ch = channel.read();let h = if let Some(Ok((k, v))) =libpijul::pristine::changeid_log(&txn, &ch, 0u64.into()).unwrap().next(){Some(txn.get_external(&v.a).unwrap().unwrap().into())} else {None};if let Some(h) = h {let mut new = new.write();txn.apply_change(&repo.changes, &mut new, &h).unwrap();}// txn.commit().unwrap();// Parts of pijul's command `Channel::Switch`txn.set_current_channel(&name).unwrap();txn.commit().unwrap();Ok(())}pub(crate) fn record(state: &InternalState, message: String, sk: Arc<SKey>) {
#[test]fn test_current_channel() {let repo = setup_test_repo();let repo_path = repo_path(&repo);let mut repo = pijul::Repository::find_root(Some(repo_path)).unwrap();assert_eq!(repo::current_channel(&repo), libpijul::DEFAULT_CHANNEL);let new_channel_name = "NEW CHANNEL!".to_string();repo::new_channel(&mut repo, new_channel_name.clone()).unwrap();assert_eq!(repo::current_channel(&repo), new_channel_name);}
// Select and record the default ".ignore" filelet file_to_record = ".ignore";update(&mut state,Msg::View(app::Msg::Cursor(cursor::Msg::Select(cursor::Select::UntrackedFile {ix: 0,path: file_to_record.to_string(),},))),);// Selection triggers `LoadedSrcFile`let _msg = task::await_next_msg(&mut tasks).await;// Add it to tracked fileslet _task = update(&mut state, Msg::AddUntrackedFile);// Wait for it to be addedlet msg = task::await_next_msg(&mut tasks).await;assert_matches!(&msg,Msg::FromRepo(repo::MsgOut::AddedUntrackedFile { path }) if path == file_to_record);// Make the initial record to add project root: Start a recordlet _task = update(&mut state, Msg::StartRecord);assert!(state.record_msg.is_some());// Edit the record msglet record_msg = "Initialized";let _task = update(&mut state,Msg::View(app::Msg::EditRecordMsg(text_editor::Action::Edit(text_editor::Edit::Paste(Arc::new(record_msg.to_string())),))),);assert!(state.record_msg.is_some());assert_matches!(state.record_msg.as_ref().unwrap(),app::RecordMsg::Typing(_));if let app::RecordMsg::Typing(content) = state.record_msg.as_ref().unwrap(){assert_eq!(&content.text(), record_msg);}// Save the recordlet _task = update(&mut state, Msg::View(app::Msg::SaveRecord));let msg = task::await_next_msg(&mut tasks).await;assert_matches!(&msg, Msg::FromRepo(repo::MsgOut::Recorded(_)));let _task = update(&mut state, msg);