update nightly
[?]
Jul 15, 2025, 7:44 PM
WXQBBQ2ACNPKCTDF7OTBLP342324ZIOJK42PUO2KT2IYVJ2ETCMACDependencies
- [2]
6YZAVBWUInitial commit - [3]
WT3GA27Padd cursor with selection - [4]
YBJRDOTCmake all repo actions async - [5]
A5YBC77Vrecord! - [6]
D7A7MSIHallow to defer or abandon record, add buttons - [7]
AMPZ2BXKshow changed files diffs (only Edit atm) - [8]
Y6LXBCJBupdate toolchain and rust edition - [9]
FR52XEMWadd action for log change file diff - [10]
23SFYK4Qbig view refactor into a new crate - [11]
MYGIBRRHwip custom theme - [12]
ACDXXAX2refactor main's updates into smaller fns - [13]
ESMM3FELtest selection reindexing - [14]
SASAN2XCuse nav-scrollable - [15]
YKHE3XMWrefactor diffs handling - [16]
KWTBNTO3diffs selection and scrolling - [17]
SWWE2R6Mdisplay basic repo stuff - [18]
KLR5FRIBadd fs state read/write of repos - [19]
KM5PSZ4Awatch repo once loaded - [20]
W4LFX7IHgroup diffs by file name - [21]
AXSXZQDGfix updating changed file contents, styling - [22]
I2AG42PAnew cols layout - [23]
ONRCENKTrm unnecessary state from repo's internal state - [24]
S2NVIFXRallow to enter record msg - [25]
5MUEECMJsmooth scrolling nav - [26]
2VUX5BTDload identity - [27]
Y5ATDI2Hconvert changed file diffs and load src only if any needs it - [28]
GOLHUD6Rnav-scrollable: set skip-able sections - [29]
NRCUG4R2load changed files src when selected - [30]
ZVI4AWERwoot contents_diff - [31]
KEPKF3WOunify diffs handling, simplify view - [32]
JE44NYHMdisplay log files diffs
Change contents
- replacement in justfile at line 11
nightly := "nightly-2025-04-24"nightly := "nightly-2025-07-15" - replacement in justfile at line 31
cargo +{{nightly}} clippy --lib --testscargo +{{nightly}} clippy --binscargo +{{nightly}} clippy - replacement in inflorescence/src/main.rs at line 359
if let Some(repo) = state.repo.as_mut() {if let Some(cursor::Selection::UntrackedFile {if let Some(repo) = state.repo.as_mut()&& let Some(cursor::Selection::UntrackedFile { - replacement in inflorescence/src/main.rs at line 365
{state.repo_tx_in.send(repo::MsgIn::AddUntrackedFile { path: path.clone() }).unwrap();{state.repo_tx_in.send(repo::MsgIn::AddUntrackedFile { path: path.clone() }).unwrap(); - replacement in inflorescence/src/main.rs at line 371
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))}; - replacement in inflorescence/src/main.rs at line 389
if let Some(repo) = state.repo.as_mut() {if let Some(cursor::Selection::ChangedFile {if let Some(repo) = state.repo.as_mut()&& let Some(cursor::Selection::ChangedFile { - edit in inflorescence/src/main.rs at line 395
{let diffs = repo.changed_files.get(path).unwrap();if diffs.iter().any(|diff| matches!(diff, repo::ChangedFileDiff::Add)) - replacement in inflorescence/src/main.rs at line 401[12.2540]→[12.2540:2720](∅→∅),[12.2720]→[6.1517:1531](∅→∅),[6.1517]→[6.1517:1531](∅→∅),[6.1531]→[12.2721:2881](∅→∅)
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(); - replacement in inflorescence/src/main.rs at line 406[12.2882]→[12.2882:3423](∅→∅),[12.3423]→[6.1730:1755](∅→∅),[6.1730]→[6.1730:1755](∅→∅),[6.1755]→[12.3424:3703](∅→∅),[12.3703]→[6.1755:1788](∅→∅),[6.1755]→[6.1755:1788](∅→∅)
// 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))}; - edit in inflorescence/src/main.rs at line 567
&& *selected_hash == hash&& *selected_path == file - replacement in inflorescence/src/main.rs at line 570[12.7678]→[12.7678:7740](∅→∅),[12.7740]→[16.13519:13699](∅→∅),[16.13699]→[15.4614:4628](∅→∅),[15.4614]→[15.4614:4628](∅→∅),[15.4628]→[16.13700:13822](∅→∅),[16.13822]→[15.4882:4896](∅→∅),[15.4882]→[15.4882:4896](∅→∅)
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 }); - replacement in inflorescence/src/main.rs at line 699
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,},); - edit in inflorescence/src/main.rs at line 785
&& *selected_hash == hash - replacement in inflorescence/src/main.rs at line 787[12.13104]→[12.13104:13140](∅→∅),[15.4958]→[15.4958:5129](∅→∅),[15.5129]→[16.15179:15223](∅→∅),[16.15223]→[15.5173:5282](∅→∅),[15.5173]→[15.5173:5282](∅→∅),[15.5282]→[16.15224:15577](∅→∅),[16.15577]→[15.5601:5620](∅→∅),[15.5601]→[15.5601:5620](∅→∅)
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(),}; - replacement in inflorescence/src/main.rs at line 802[15.5853]→[16.15578:15698](∅→∅),[16.15698]→[15.6133:6149](∅→∅),[15.6133]→[15.6133:6149](∅→∅),[15.6188]→[7.2911:2921](∅→∅),[12.13702]→[7.2911:2921](∅→∅),[4.16466]→[7.2911:2921](∅→∅)
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);}); - replacement in inflorescence/src/main.rs at line 1017
fn view(state: &State, window_id: window::Id) -> Element<Msg, Theme> {fn view(state: &State, window_id: window::Id) -> Element<'_, Msg, Theme> {