load and store all change diffs at once
[?]
May 8, 2025, 5:51 PM
4ELJZGRJNL6FXB33QTYDNPY57JA3WZPUXKLQRTGSLDM7W65PD3YQCDependencies
- [2]
WT3GA27Padd cursor with selection - [3]
EC3TVL4Xadd untracked files - [4]
YBJRDOTCmake all repo actions async - [5]
A5YBC77Vrecord! - [6]
4WO3ZJM2show untracked files' contents - [7]
V55EAIWQadd src file LRU cache - [8]
NRCUG4R2load changed files src when selected - [9]
ZVI4AWERwoot contents_diff - [10]
OQ6HSAWHshow record log - [11]
NWJD6VM6mv libflowers libflorescence - [12]
AHWWRC73navigate log entries - [13]
UJPRF6DAfix log changes selection - [14]
TEI5NQ3Sadd log files selection - [15]
JE44NYHMdisplay log files diffs - [16]
ONRCENKTrm unnecessary state from repo's internal state - [17]
D7A7MSIHallow to defer or abandon record, add buttons - [18]
Y5ATDI2Hconvert changed file diffs and load src only if any needs it - [*]
SWWE2R6Mdisplay basic repo stuff - [*]
6YZAVBWUInitial commit
Change contents
- replacement in crates/libflorescence/src/repo.rs at line 136
GetLogFileDiff {id: LogFileId,GetChangeDiffs {hash: pijul::Hash, - replacement in crates/libflorescence/src/repo.rs at line 145
LogFileDiff { id: LogFileId, diffs: ChangedFile },GotChangeDiffs {hash: pijul::Hash,diffs: ChangedFiles,}, - replacement in crates/libflorescence/src/repo.rs at line 227
MsgIn::GetLogFileDiff { id } => {let LogFileId { change_hash, path } = id.clone();let diffs: ChangedFile;MsgIn::GetChangeDiffs { hash } => {let diffs: ChangedFiles; - replacement in crates/libflorescence/src/repo.rs at line 230
let change = internal_state.repo.changes.get_change(&change_hash).unwrap();let mut changed_files =let change =internal_state.repo.changes.get_change(&hash).unwrap();let diffs = - edit in crates/libflorescence/src/repo.rs at line 234
let diffs = changed_files.remove(&path).unwrap(); - replacement in crates/libflorescence/src/repo.rs at line 238
let _ = msg_out_tx.send(MsgOut::LogFileDiff { id, diffs });let _ = msg_out_tx.send(MsgOut::GotChangeDiffs { hash, diffs }); - replacement in crates/inflorescence/src/main.rs at line 287
let log_selection = |repo: &repo::State, ix: usize| -> cursor::Selection {let log_selection = |repo: &repo::State,ix: usize|-> (cursor::Selection, Task<Message>) { - replacement in crates/inflorescence/src/main.rs at line 292
cursor::Selection::LogChange {ix,// Request to get the diffslet task = Task::done(Message::ToRepo(repo::MsgIn::GetChangeDiffs { - replacement in crates/inflorescence/src/main.rs at line 295
message: entry.message.clone(),file: None,}}));(cursor::Selection::LogChange {ix,hash: entry.hash,message: entry.message.clone(),diffs: None,file: None,},task,) - replacement in crates/inflorescence/src/main.rs at line 309
let log_file_selection =|log_entry: &repo::LogEntry,file_ix: usize,hash: pijul::Hash|-> (cursor::LogChangeFileSelection, Task<Message>) {let path = log_entry.file_paths.get(file_ix).unwrap().clone();// Request to get the difflet id = repo::LogFileId {change_hash: hash,path: path.clone(),};let task =Task::done(Message::ToRepo(repo::MsgIn::GetLogFileDiff { id }));let log_file_selection = |log_entry: &repo::LogEntry,file_ix: usize,hash: pijul::Hash|-> cursor::LogChangeFileSelection {let path = log_entry.file_paths.get(file_ix).unwrap().clone(); - replacement in crates/inflorescence/src/main.rs at line 315
(cursor::LogChangeFileSelection {ix: file_ix,path,diff: None,},task,)};cursor::LogChangeFileSelection { ix: file_ix, path }}; - replacement in crates/inflorescence/src/main.rs at line 344
let selection =let (selection, task) = - replacement in crates/inflorescence/src/main.rs at line 350
changed_file_selection(let selection = changed_file_selection( - replacement in crates/inflorescence/src/main.rs at line 355
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 362
untracked_file_selection(let selection = untracked_file_selection( - replacement in crates/inflorescence/src/main.rs at line 367
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 372
untracked_file_selection(let selection = untracked_file_selection( - replacement in crates/inflorescence/src/main.rs at line 377
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 380
(Some(selection), Task::none())(Some(selection), task) - replacement in crates/inflorescence/src/main.rs at line 387
let selection =let (selection, task) = - replacement in crates/inflorescence/src/main.rs at line 395
untracked_file_selection(let selection = untracked_file_selection( - replacement in crates/inflorescence/src/main.rs at line 400
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 404
changed_file_selection(let selection = changed_file_selection( - replacement in crates/inflorescence/src/main.rs at line 409
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 414
changed_file_selection(let selection = changed_file_selection( - replacement in crates/inflorescence/src/main.rs at line 419
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 422
(Some(selection), Task::none())(Some(selection), task) - edit in crates/inflorescence/src/main.rs at line 428
diffs, - edit in crates/inflorescence/src/main.rs at line 435
diff: _, - replacement in crates/inflorescence/src/main.rs at line 449
let (file, task) = log_file_selection(let file = log_file_selection( - edit in crates/inflorescence/src/main.rs at line 458
diffs, - replacement in crates/inflorescence/src/main.rs at line 461
task,Task::none(), - replacement in crates/inflorescence/src/main.rs at line 465
let selection =if repo.log.len().saturating_sub(1)== log_ix{if !repo.untracked_files.is_empty() {let ix = 0;let (selection, task) = if repo.log.len().saturating_sub(1)== log_ix{if !repo.untracked_files.is_empty() {let ix = 0;let selection = - replacement in crates/inflorescence/src/main.rs at line 479
)} else if !repo.changed_files.is_empty(){let ix = 0;changed_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,)} else {let ix = 0;log_selection(repo, ix)});(selection, Task::none())} else if !repo.changed_files.is_empty() {let ix = 0;let selection = changed_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,);(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 491
let ix = log_ix + 1;let ix = 0; - replacement in crates/inflorescence/src/main.rs at line 493
};(selection, Task::none())}} else {let ix = log_ix + 1;log_selection(repo, ix)};(selection, task) - replacement in crates/inflorescence/src/main.rs at line 504[12.5424]→[15.6219:6297](∅→∅),[15.6297]→[12.5486:6185](∅→∅),[12.5486]→[12.5486:6185](∅→∅),[12.6185]→[13.18:190](∅→∅),[13.190]→[12.6185:6251](∅→∅),[12.6185]→[12.6185:6251](∅→∅),[12.6251]→[15.6298:6375](∅→∅)
let selection = if !repo.untracked_files.is_empty() {let ix = 0;Some(untracked_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,))} else if !repo.changed_files.is_empty() {let ix = 0;Some(changed_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,))} else if !repo.log.is_empty() {let ix = repo.log.len() - 1;Some(log_selection(repo, ix))} else {None};(selection, Task::none())let (selection, task) =if !repo.untracked_files.is_empty() {let ix = 0;let selection = Some(untracked_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,));(selection, Task::none())} else if !repo.changed_files.is_empty() {let ix = 0;let selection = Some(changed_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,));(selection, Task::none())} else if !repo.log.is_empty() {let ix = repo.log.len() - 1;let (selection, task) = log_selection(repo, ix);(Some(selection), task)} else {(None, Task::none())};(selection, task) - replacement in crates/inflorescence/src/main.rs at line 547
let selection = if 0 == ix {let (selection, task) = if 0 == ix { - replacement in crates/inflorescence/src/main.rs at line 553
changed_file_selection(let selection = changed_file_selection( - replacement in crates/inflorescence/src/main.rs at line 558
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 562
untracked_file_selection(let selection = untracked_file_selection( - replacement in crates/inflorescence/src/main.rs at line 567
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 572
untracked_file_selection(let selection = untracked_file_selection( - replacement in crates/inflorescence/src/main.rs at line 577
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 580
(Some(selection), Task::none())(Some(selection), task) - replacement in crates/inflorescence/src/main.rs at line 587
let selection = if 0 == ix {let (selection, task) = if 0 == ix { - replacement in crates/inflorescence/src/main.rs at line 590
untracked_file_selection(let selection = untracked_file_selection( - replacement in crates/inflorescence/src/main.rs at line 595
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 602
changed_file_selection(let selection = changed_file_selection( - replacement in crates/inflorescence/src/main.rs at line 607
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 612
changed_file_selection(let selection = changed_file_selection( - replacement in crates/inflorescence/src/main.rs at line 617
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 620
(Some(selection), Task::none())(Some(selection), task) - edit in crates/inflorescence/src/main.rs at line 626
diffs, - edit in crates/inflorescence/src/main.rs at line 633
diff: _, - replacement in crates/inflorescence/src/main.rs at line 642
let (file, task) = log_file_selection(let file = log_file_selection( - edit in crates/inflorescence/src/main.rs at line 650
diffs, - replacement in crates/inflorescence/src/main.rs at line 653
task,Task::none(), - replacement in crates/inflorescence/src/main.rs at line 657
let selection = if 0 == log_ix {let (selection, task) = if 0 == log_ix { - replacement in crates/inflorescence/src/main.rs at line 660
changed_file_selection(let selection = changed_file_selection( - replacement in crates/inflorescence/src/main.rs at line 665
));(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 669
untracked_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,)let selection =untracked_file_selection(repo,ix,&mut state.diffs_cache,&state.src_file_load_tx,);(selection, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 685
(selection, Task::none())(selection, task) - replacement in crates/inflorescence/src/main.rs at line 691
let selection = if !repo.log.is_empty() {let (selection, task) = if !repo.log.is_empty() { - replacement in crates/inflorescence/src/main.rs at line 693
Some(log_selection(repo, ix))let (selection, task) = log_selection(repo, ix);(Some(selection), task) - replacement in crates/inflorescence/src/main.rs at line 697
Some(changed_file_selection(let selection = changed_file_selection( - replacement in crates/inflorescence/src/main.rs at line 702
)));(Some(selection), Task::none()) - replacement in crates/inflorescence/src/main.rs at line 706
Some(untracked_file_selection(let selection = untracked_file_selection( - replacement in crates/inflorescence/src/main.rs at line 711
)));(Some(selection), Task::none()) - replacement in crates/inflorescence/src/main.rs at line 714
None(None, Task::none()) - replacement in crates/inflorescence/src/main.rs at line 716
(selection, Task::none())(selection, task) - edit in crates/inflorescence/src/main.rs at line 736
diffs, - edit in crates/inflorescence/src/main.rs at line 744[14.3607]→[15.8688:8861](∅→∅),[15.8861]→[14.3720:3776](∅→∅),[14.3720]→[14.3720:3776](∅→∅),[14.3776]→[15.8862:9077](∅→∅)
// Request to get the difflet id = repo::LogFileId {change_hash: hash,path: path.clone(),};let task = Task::done(Message::ToRepo(repo::MsgIn::GetLogFileDiff { id },)); - edit in crates/inflorescence/src/main.rs at line 748
diff: None, - replacement in crates/inflorescence/src/main.rs at line 749
task,Task::none(), - edit in crates/inflorescence/src/main.rs at line 759
diffs, - edit in crates/inflorescence/src/main.rs at line 770
diffs, - replacement in crates/inflorescence/src/main.rs at line 837[6.6175]→[15.11404:11473](∅→∅),[15.11473]→[14.4913:4969](∅→∅),[13.484]→[14.4913:4969](∅→∅),[14.4969]→[13.535:593](∅→∅),[13.535]→[13.535:593](∅→∅),[13.593]→[15.11474:11507](∅→∅),[15.11507]→[13.593:629](∅→∅),[13.593]→[13.593:629](∅→∅),[13.629]→[15.11508:11585](∅→∅)
cursor::Select::LogChange { ix, hash, message } => (Some(cursor::Selection::LogChange {ix,hash,message,file: None,}),Task::none(),),cursor::Select::LogChange { ix, hash, message } => {// Request to get the diffslet task = Task::done(Message::ToRepo(repo::MsgIn::GetChangeDiffs { hash },));(Some(cursor::Selection::LogChange {ix,hash,message,diffs: None,file: None,}),Task::none(),)} - edit in crates/inflorescence/src/main.rs at line 859
diffs, - edit in crates/inflorescence/src/main.rs at line 862
// Request to get the difflet id = repo::LogFileId {change_hash: hash,path: path.clone(),};let task = Task::done(Message::ToRepo(repo::MsgIn::GetLogFileDiff { id },)); - edit in crates/inflorescence/src/main.rs at line 865
diff: None, - edit in crates/inflorescence/src/main.rs at line 871
diffs, - replacement in crates/inflorescence/src/main.rs at line 874
task,Task::none(), - edit in crates/inflorescence/src/main.rs at line 1243
diffs: _, - replacement in crates/inflorescence/src/main.rs at line 1246
let (selection, task) = match log// Request to get the diffslet task = Task::done(Message::ToRepo(repo::MsgIn::GetChangeDiffs { hash },));let selection = log - replacement in crates/inflorescence/src/main.rs at line 1255[15.14225]→[15.14225:14377](∅→∅),[15.14377]→[12.10119:10431](∅→∅),[12.10119]→[12.10119:10431](∅→∅),[12.10431]→[15.14378:14873](∅→∅),[15.14873]→[12.10504:10616](∅→∅),[12.10504]→[12.10504:10616](∅→∅),[12.10616]→[15.14874:14979](∅→∅),[15.14979]→[12.10658:10697](∅→∅),[12.10658]→[12.10658:10697](∅→∅)
{Some((ix, entry)) => {let file_and_task = file.and_then(|file| {entry.file_paths.iter().enumerate().find(|(_ix, path)| *path == &file.path).map(|(ix, path)| {// Request to get the difflet id = repo::LogFileId {change_hash: hash,path: path.clone(),};let task = Task::done(Message::ToRepo(repo::MsgIn::GetLogFileDiff { id }));(cursor::LogChangeFileSelection {ix,path: path.clone(),diff: None,}, task)}).map(|(ix, entry)| {let file = file.and_then(|file| {entry.file_paths.iter().enumerate().find(|(_ix, path)| *path == &file.path).map(|(ix, path)| {cursor::LogChangeFileSelection {ix,path: path.clone(),}})});cursor::Selection::LogChange {ix,hash: entry.hash,message,diffs: None,file,} - edit in crates/inflorescence/src/main.rs at line 1277[12.10729]→[15.14980:15651](∅→∅),[15.15651]→[12.10912:10942](∅→∅),[12.10912]→[12.10912:10942](∅→∅),[12.10942]→[15.15652:15737](∅→∅)
let (file, task) = match file_and_task {Some((file, task)) => (Some(file), task),None => (None, Task::none()),};(Some(cursor::Selection::LogChange {ix,hash: entry.hash,message,file,}),task,)}None => (None, Task::none()),}; - replacement in crates/inflorescence/src/main.rs at line 1292
repo::MsgOut::LogFileDiff { id, diffs } => {repo::MsgOut::GotChangeDiffs { hash, diffs } => { - replacement in crates/inflorescence/src/main.rs at line 1297
file:Some(cursor::LogChangeFileSelection {ix: _,path: selected_path,diff,}),diffs: selection_diffs @ None,file: _, - replacement in crates/inflorescence/src/main.rs at line 1301
let repo::LogFileId { change_hash, path } = id;if *selected_hash == change_hash && *selected_path == path {// NOTE: using unknown encoding as we don't yet have the// filelet file = diff::init_file(diff::FileContent::UnknownEncoding,Some(&diffs),);*diff = Some((diff::State::default(), file));if *selected_hash == hash {let diffs = diffs.into_iter().map(|(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),);(path, (file, diff::State::default()))}).collect();*selection_diffs = Some(diffs); - edit in crates/inflorescence/src/main.rs at line 1573
diffs: _, - replacement in crates/inflorescence/src/main.rs at line 1602
file: Some(cursor::LogChangeFileSelection { ix: _, path, diff }),diffs,file: Some(cursor::LogChangeFileSelection { ix: _, path }), - replacement in crates/inflorescence/src/main.rs at line 1609
match diff {Some((state, file)) => {match diffs {Some(diffs) => {let (file, state) = diffs.get(path).unwrap(); - edit in crates/inflorescence/src/cursor.rs at line 1
use std::collections::HashMap; - edit in crates/inflorescence/src/cursor.rs at line 28
/// All the diffs in this change keyed by file path. Loaded async and/// set to None only while loading. The `diff::State` is also/// in here so that is it preserved while navigating between files.diffs: Option<HashMap<String, (diff::File, diff::State)>>, - edit in crates/inflorescence/src/cursor.rs at line 40
/// Loaded asyncpub diff: Option<(diff::State, diff::File)>,