BJ3CYLUTYL3ODCU7XIQ2YIBQ6GMHP4IQ7HYMD4YCOPFRYEIYNWKQC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC D7A7MSIHJS3IAOLEPK52M4CZLDPLO7JB3Y62XACT2AM6UUCPQ6BAC ACDXXAX26ZJJFKJDGRC2GOSJY5JHQWCSTP55SYI6D6LH5UIRYUBAC WXQBBQ2ACNPKCTDF7OTBLP342324ZIOJK42PUO2KT2IYVJ2ETCMAC PTWZYQFRWWUOE2WMQT26CKZKFSHAIJVJS3QWHJFYUFDRRTVPHSUAC 3XRG4BB6V5V4DICZCMOZMLQNTANWKPO7BBRATTXOZLRNSEUQIA5AC WAOGSCOJ5A372BZKHEYD2BCDBCENNVLFYW3INKUOOAZMDADDIFIQC EJPSD5XO43DWUBBZGNQMY4TMCAXL5EWCGX3OEHUERQ5GRASGWQLQC YK3MOJJLRYEKZ4FUCNJ3YKMTKOINWIYOJKR3ER7IRSGTC7O6FJZQC 7WCB5YQJJZIPUAFHTCQBWNI6ZM5XMIQJAKTLYTR7NOR5NKESRMDQC PKLUHYE4BGIMJKU6VKGBGSHEB2ZT53OYMTFBYCZYCO4J3RVTRXSAC LFEMJYYDO45ASMQSOJ3TNID7B5UZXDHB3NWFZJXWOAWNBS6GMDEAC FU6P5QLG4GVLHVB4O5TCEPJF4X4FGDUBONQFRYP4U5KEPIYLUWJQC YGZ3VCW4OAJYPI2CYK3MTABNFY7Y2ENSSTFE5ZZ4K6HK57FCU3XQC ODCT4QJNJLQTDNFPIF7HX4XCFTEXZBESG3PTD276O7TWB7MSGWMQC UTDTZCTXAAP6AHENYQP7MOQ5QNIKKXN34NV2ONWEGM4HA4FU637AC TEDT26JQBWGATVTY6HZTIOGFR6BXW2BHSUKUTXTA7HOXARRQ5D6AC SWWE2R6MVBX5CNM6X3WLXZTSRTU53PBJL7WJSFVF77XBPXDX4COAC VCNKFNUF7OWVSWC6I5D25KUZ3XZZICZ3LHWVPF2N5ZSP7LQ2JOUQC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC }MsgIn::ResetFile { path } => {let state: anyhow::Result<State>;(internal_state, state) = spawn_blocking(move || {let state = |internal_state: &mut InternalState| {reset_file(internal_state, path)?;get_state(internal_state)};let state = state(&mut internal_state);(internal_state, state)}).await.unwrap();let _ = msg_out_tx.send(MsgOut::Refreshed {state,invalidate_logs: false,});
fn reset_file(state: &mut InternalState, path: String) -> anyhow::Result<()> {let repo = &state.repo;let current_channel = current_channel(repo)?;let txn = repo.pristine.arc_txn_begin()?;let repo_path = CanonicalPathBuf::canonicalize(&repo.path)?;let channel = txn.read().load_channel(¤t_channel)?.context("Loading current channel")?;let mut conflicts = Vec::new();let root = std::fs::canonicalize(&path)?;let path = root.strip_prefix(&repo_path)?;use path_slash::PathExt;let path = path.to_slash_lossy();conflicts.extend(libpijul::output::output_repository_no_pending(&repo.working_copy,&repo.changes,&txn,&channel,&path,true,None,std::thread::available_parallelism()?.get(),0,)?);// TODO: handle conflicts - but why are there conflicts from file reset? Is// it for the case when reset removes conflict resolutions?// super::print_conflicts(&conflicts)?;txn.commit()?;Ok(())}
fn reset_change(state: &mut State) -> Task<Msg> {if let Some(ReadyState { selection, .. }) =model::is_ready_mut(&mut state.model)&& let Some(selection::Status::ChangedFile {ix: _,path,diff_selected,}) = selection.status.as_ref(){if !diff_selected {state.repo_tx_in.send(repo::MsgIn::ResetFile {path: path.raw.clone(),}).unwrap();} else {todo!("reset selected hunk")}} else {report::show_err(&mut state.model.report,"Cannot reset the current selection. This should never happen, please report it! State: {state:?}".to_string(),);}state.model.sub_menu = None;Task::none()}