WXQBBQ2ACNPKCTDF7OTBLP342324ZIOJK42PUO2KT2IYVJ2ETCMAC 6YZAVBWU6E5FYOI5JGEIPXGZLIKAW6LS2AOFIQWEE5DMOPPCD5PQC WT3GA27PQ2AOAIGK65O3Q4DMX4AZDVNULBLRL6GF4QW6QCASUEAAC YBJRDOTCX3ZRDB5EVXJBR55FX3CADCSIGMYWNYVC2PD5W3GXR3DQC A5YBC77VWH2LXCZJOPZORQJI5ZYABSCHJWVX5HVNWPM5RABXESLQC D7A7MSIHJS3IAOLEPK52M4CZLDPLO7JB3Y62XACT2AM6UUCPQ6BAC AMPZ2BXK4IGUZO3OPBRSJ6Z4GI5K4PRFMLUGTR6AP4FKKRWQG7LQC Y6LXBCJBIJDHAQITICWI5HE7WBMWGPENWJDHEE2O44IEZXADAI2AC FR52XEMWD22VH3GKSARXJUJXOGO7ZSQEHWPXFRWHLGRAJU3WRKCAC 23SFYK4Q5NKBPJG53PQNPWQH6UOUU2YKJEL7RLXYBRLJOJYV7AWQC MYGIBRRHHXPKVRAMQQRJTZH74L2XOK3SF7J57JPCRKSVRLZ2D6NQC ACDXXAX26ZJJFKJDGRC2GOSJY5JHQWCSTP55SYI6D6LH5UIRYUBAC ESMM3FELOBYIX7FUNOU37FYKRJHFU2IMX6LY6EGJTVPTBDU3SEEQC SASAN2XCWDQ2VEHZ7TAQEN2R3Y7AG7JUGEFVRL4DZAGHXDFEZFRQC YKHE3XMWOWPGOWYSISF73MIAKN7WB3AHCV2OA4ECAFPF47YHUXEAC KWTBNTO3QUUE2YADF6SYW6G6ZOKYEWRJQKIWDGZXR33S3YNDVIZQC let removed = repo.untracked_files.remove(path);debug_assert!(removed, "{:?}, path: {path}", repo.untracked_files);repo.changed_files.entry(path.clone()).or_default().insert(repo::ChangedFileDiff::Add);// Select the next untracked file, if anystate.cursor.selection = if repo.untracked_files.is_empty() {None} else {let ix = cmp::min(*ix, repo.untracked_files.len() - 1);Some(cursor::untracked_file_selection(repo,ix,&mut state.files,))};}
let removed = repo.untracked_files.remove(path);debug_assert!(removed, "{:?}, path: {path}", repo.untracked_files);repo.changed_files.entry(path.clone()).or_default().insert(repo::ChangedFileDiff::Add);// Select the next untracked file, if anystate.cursor.selection = if repo.untracked_files.is_empty() {None} else {let ix = cmp::min(*ix, repo.untracked_files.len() - 1);Some(cursor::untracked_file_selection(repo, ix, &mut state.files))};
let diffs = repo.changed_files.get(path).unwrap();if diffs.iter().any(|diff| matches!(diff, repo::ChangedFileDiff::Add)){state.repo_tx_in.send(repo::MsgIn::RmAddedFile { path: path.clone() }).unwrap();
state.repo_tx_in.send(repo::MsgIn::RmAddedFile { path: path.clone() }).unwrap();
// Remove from changed fileslet removed = repo.changed_files.remove(path);debug_assert!(removed.is_some(),"{:?} not found in {:?}",path,repo.changed_files);// Update untracked filesrepo.untracked_files.insert(path.clone());// Select the next changed file, if anystate.cursor.selection = if repo.changed_files.is_empty() {None} else {let ix = cmp::min(*ix, repo.changed_files.len() - 1);Some(cursor::changed_file_selection(repo,ix,&mut state.files,))};}
// Remove from changed fileslet removed = repo.changed_files.remove(path);debug_assert!(removed.is_some(),"{:?} not found in {:?}",path,repo.changed_files);// Update untracked filesrepo.untracked_files.insert(path.clone());// Select the next changed file, if anystate.cursor.selection = if repo.changed_files.is_empty() {None} else {let ix = cmp::min(*ix, repo.changed_files.len() - 1);Some(cursor::changed_file_selection(repo, ix, &mut state.files))};
if *selected_hash == hash && *selected_path == file {let id_hash = file::log_id_parts_hash(hash, &file);if let Some(diff::FileAndState { file: _, state }) =state.logs.diffs.get_mut(&id_hash){return diff::update(state, action).map(move |msg| Msg::LogDiffNav { id_hash, msg });}
let id_hash = file::log_id_parts_hash(hash, &file);if let Some(diff::FileAndState { file: _, state }) =state.logs.diffs.get_mut(&id_hash){return diff::update(state, action).map(move |msg| Msg::LogDiffNav { id_hash, msg });
if selection.is_some() {if let Some(diffs) = changed_files.get(&path) {if diff::any_diff_has_contents(diffs) {file::load_src_file_if_not_cached(files,file::Id {path: path.clone(),file_kind: file::Kind::Changed,},);}}
if selection.is_some()&& let Some(diffs) = changed_files.get(&path)&& diff::any_diff_has_contents(diffs){file::load_src_file_if_not_cached(files,file::Id {path: path.clone(),file_kind: file::Kind::Changed,},);
if *selected_hash == hash {diffs.into_iter().for_each(|(path, diffs)| {// NOTE: using unknown encoding as we don't yet have the file// for past changeslet file = diff::init_file(diff::FileContent::UnknownEncoding,Some(&diffs),);let id_hash = file::log_id_parts_hash(hash, &path);let log_file_diff = diff::FileAndState {file,// The nav is initialized only once a file is selected,// because its tasks need it to be visible to completestate: diff::State::default(),};
diffs.into_iter().for_each(|(path, diffs)| {// NOTE: using unknown encoding as we don't yet have the file// for past changeslet file = diff::init_file(diff::FileContent::UnknownEncoding,Some(&diffs),);let id_hash = file::log_id_parts_hash(hash, &path);let log_file_diff = diff::FileAndState {file,// The nav is initialized only once a file is selected,// because its tasks need it to be visible to completestate: diff::State::default(),};
state.logs.change_hashes.insert(hash);state.logs.diffs.insert(id_hash, log_file_diff);});}
state.logs.change_hashes.insert(hash);state.logs.diffs.insert(id_hash, log_file_diff);});