convert changed file diffs and load src only if any needs it
[?]
Apr 22, 2025, 7:12 PM
Y5ATDI2HRWTTYJAVUR7SVWQVB4ZKKDZF3UVE4JJQFZ7RX7H7VPJQCDependencies
- [2]
IQDCHWCPload a pijul repo - [3]
WT3GA27Padd cursor with selection - [4]
EC3TVL4Xadd untracked files - [5]
YBJRDOTCmake all repo actions async - [6]
4WO3ZJM2show untracked files' contents - [7]
BJXUYQ2Yshow untracked file contents in read-only text editor - [8]
CFYW3HGZwip: display changed files - [9]
AMPZ2BXKshow changed files diffs (only Edit atm) - [10]
NOB64XMRfmt and clippy - [11]
AXSXZQDGfix updating changed file contents, styling - [12]
RPCIGCNSadd replacement diff details - [13]
V55EAIWQadd src file LRU cache - [14]
NRCUG4R2load changed files src when selected - [15]
SWWE2R6Mdisplay basic repo stuff - [16]
W7IUT3ZVstart recording impl - [17]
D7A7MSIHallow to defer or abandon record, add buttons - [18]
6YZAVBWUInitial commit - [19]
PTFDJ567add untracked files encoding - [20]
KT5UYXGKfix selection after adding file, add changed file diffs - [21]
S2NVIFXRallow to enter record msg
Change contents
- replacement in crates/flowers_ui/src/main.rs at line 143
let key_weight = key.as_bytes().len();let key_weight = key.len(); - replacement in crates/flowers_ui/src/main.rs at line 147
FileEditorContent::Decoded(content) => {content.text().as_bytes().len()}FileEditorContent::ShortBase64(string) => {string.as_bytes().len()}FileEditorContent::Decoded(content) => content.text().len(),FileEditorContent::ShortBase64(string) => string.len(), - replacement in crates/flowers_ui/src/main.rs at line 168
type ChangedFileContents = Vec<Option<FileEditorContent>>;type ChangedFileContents = Vec<ChangedFileDiff>;#[derive(Debug)]enum ChangedFileDiff {WithContents(ChangedFileDiffWithContents),WithoutContents(ChangedFileDiffWithoutContents),} - replacement in crates/flowers_ui/src/main.rs at line 182
content: FileEditorContent,contents: FileEditorContent, - replacement in crates/flowers_ui/src/main.rs at line 265
let changed_file_selection = |repo: &repo::State,ix: usize,src_files_cache: &mut SrcFilesCache,src_file_load_tx: &watch::Sender<String>|-> cursor::Selection {let path = repo.changed_files.iter().nth(ix).map(|(k, _v)| k).unwrap().clone();let changed_file_selection =|changed_files_contents: &ChangedFilesContents,ix: usize,src_files_cache: &mut SrcFilesCache,src_file_load_tx: &watch::Sender<String>|-> cursor::Selection {let (path, diffs) = changed_files_contents.iter().nth(ix).unwrap(); - replacement in crates/flowers_ui/src/main.rs at line 273
load_src_file_if_not_cached(src_files_cache, src_file_load_tx, &path);if any_diff_has_contents(diffs) {load_src_file_if_not_cached(src_files_cache,src_file_load_tx,path,);} - replacement in crates/flowers_ui/src/main.rs at line 281
cursor::Selection::ChangedFile { ix, path }};cursor::Selection::ChangedFile {ix,path: path.clone(),}}; - replacement in crates/flowers_ui/src/main.rs at line 324
repo,&state.changed_files_contents, - replacement in crates/flowers_ui/src/main.rs at line 351
repo,&state.changed_files_contents, - replacement in crates/flowers_ui/src/main.rs at line 368
repo,&state.changed_files_contents, - replacement in crates/flowers_ui/src/main.rs at line 383
repo,&state.changed_files_contents, - replacement in crates/flowers_ui/src/main.rs at line 419
repo,&state.changed_files_contents, - replacement in crates/flowers_ui/src/main.rs at line 441
repo,&state.changed_files_contents, - replacement in crates/flowers_ui/src/main.rs at line 458
repo,&state.changed_files_contents, - replacement in crates/flowers_ui/src/main.rs at line 482
repo,&state.changed_files_contents, - replacement in crates/flowers_ui/src/main.rs at line 503
load_src_file_if_not_cached(&mut state.src_files_cache,&state.src_file_load_tx,path,);let diffs = state.changed_files_contents.get(path).unwrap();if any_diff_has_contents(diffs) {load_src_file_if_not_cached(&mut state.src_files_cache,&state.src_file_load_tx,path,);} - replacement in crates/flowers_ui/src/main.rs at line 593
repo,&state.changed_files_contents, - replacement in crates/flowers_ui/src/main.rs at line 746
if let Some(content) = contents.get_mut(ix) {match content {Some(FileEditorContent::Decoded(content)) => {content.perform(action);}_ => panic!("Unexpected content: {content:?}"),}}todo!()// if let Some(content) = contents.get_mut(ix) {// match content {// Some(FileEditorContent::Decoded(content)) => {// content.perform(action);// }// _ => panic!("Unexpected content: {content:?}"),// }// } - replacement in crates/flowers_ui/src/main.rs at line 823
&path,path, - replacement in crates/flowers_ui/src/main.rs at line 838
load_src_file_if_not_cached(&mut state.src_files_cache,&state.src_file_load_tx,&path,);let diffs =state.changed_files_contents.get(path).unwrap();if any_diff_has_contents(diffs) {load_src_file_if_not_cached(&mut state.src_files_cache,&state.src_file_load_tx,path,);} - replacement in crates/flowers_ui/src/main.rs at line 875[9.3090]→[9.3090:3784](∅→∅),[9.3784]→[12.1410:1714](∅→∅),[12.1714]→[9.3848:4229](∅→∅),[9.3848]→[9.3848:4229](∅→∅)
let contents = diffs.iter().map(|diff| match diff {repo::ChangedFileDiff::Move => None,repo::ChangedFileDiff::Del => None,repo::ChangedFileDiff::Undel => None,repo::ChangedFileDiff::Add => None,repo::ChangedFileDiff::SolveNameConflict => None,repo::ChangedFileDiff::UnsolveNameConflict => None,repo::ChangedFileDiff::Edit {line: _,deleted: _,contents,} => Some(contents_to_file_editor_content(contents)),// TODO: there are 2 contents! Maybe make the `ChangedFileContents` an enumrepo::ChangedFileDiff::Replacement {line: _,change_contents,replacement_contents,} => None,repo::ChangedFileDiff::SolveOrderConflict => None,repo::ChangedFileDiff::UnsolveOrderConflict => None,repo::ChangedFileDiff::ResurrectZombines => None,repo::ChangedFileDiff::AddRoot => None,repo::ChangedFileDiff::DelRoot => None,}).collect();let contents =diffs.iter().map(changed_file_diff_from_repo).collect(); - edit in crates/flowers_ui/src/main.rs at line 882
fn changed_file_diff_from_repo(value: &repo::ChangedFileDiff,) -> ChangedFileDiff {match value {repo::ChangedFileDiff::Move => ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::Move,),repo::ChangedFileDiff::Del => ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::Del,),repo::ChangedFileDiff::Undel => ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::Undel,),repo::ChangedFileDiff::Add => {ChangedFileDiff::WithContents(ChangedFileDiffWithContents::Add)}repo::ChangedFileDiff::SolveNameConflict => {ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::SolveNameConflict,)}repo::ChangedFileDiff::UnsolveNameConflict => {ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::UnsolveNameConflict,)}repo::ChangedFileDiff::Edit {line,deleted,contents,} => ChangedFileDiff::WithContents(ChangedFileDiffWithContents::Edit {line: *line,deleted: *deleted,contents: contents_to_file_editor_content(contents),}),repo::ChangedFileDiff::Replacement {line,change_contents,replacement_contents,} => ChangedFileDiff::WithContents(ChangedFileDiffWithContents::Replacement {line: *line,change_contents: contents_to_file_editor_content(change_contents,),replacement_contents: contents_to_file_editor_content(replacement_contents,),},),repo::ChangedFileDiff::SolveOrderConflict => {ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::SolveOrderConflict,)}repo::ChangedFileDiff::UnsolveOrderConflict => {ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::UnsolveOrderConflict,)}repo::ChangedFileDiff::ResurrectZombines => {ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::ResurrectZombines,)}repo::ChangedFileDiff::AddRoot => ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::AddRoot,),repo::ChangedFileDiff::DelRoot => ChangedFileDiff::WithoutContents(ChangedFileDiffWithoutContents::DelRoot,),}} - edit in crates/flowers_ui/src/main.rs at line 1048
/// Returns true if any of the changed file's diffs has contentsfn any_diff_has_contents(changed_file: &ChangedFileContents) -> bool {changed_file.iter().any(|diff| matches!(diff, ChangedFileDiff::WithContents(_)))} - replacement in crates/flowers_ui/src/main.rs at line 1141
Some(cursor::Selection::ChangedFile { path, ix }) => {let (file_name, diffs) =repo.changed_files.iter().nth(*ix).unwrap();let file_editor_contents =state.changed_files_contents.get(file_name).unwrap();let diffs = diffs.iter().enumerate().map(|(ix, diff)| {let file_editor_content =file_editor_contents.get(ix).unwrap();view_diff(diff, file_editor_content, file_name, ix)});Some(cursor::Selection::ChangedFile { path, ix: _ }) => {let diffs = state.changed_files_contents.get(path).unwrap();let _src_file_contents: Option<text_editor::Content> =if any_diff_has_contents(diffs) {// TODO: load file contents from cacheNone} else {None};let diffs = [el(text("TODO"))]; - edit in crates/flowers_ui/src/main.rs at line 1184[3.4175]→[9.5597:5696](∅→∅),[9.5696]→[10.332:351](∅→∅),[10.351]→[9.5718:5761](∅→∅),[9.5718]→[9.5718:5761](∅→∅),[9.5761]→[11.612:686](∅→∅),[11.686]→[9.5781:5975](∅→∅),[9.5781]→[9.5781:5975](∅→∅),[9.5975]→[10.352:395](∅→∅),[10.395]→[9.6015:6297](∅→∅),[9.6015]→[9.6015:6297](∅→∅),[9.6297]→[11.687:743](∅→∅),[11.743]→[9.6303:6306](∅→∅),[9.6303]→[9.6303:6306](∅→∅)
fn view_diff<'a>(diff: &'a repo::ChangedFileDiff,content: &'a Option<FileEditorContent>,file: &'a str,ix: usize,) -> Element<'a, Message> {let change_type = diff.to_string();let content = match content {Some(content) => match content {FileEditorContent::Decoded(content) => el(text_editor(content).on_action(move |action| Message::ChangedFileContentsAction {file: file.to_owned(),ix,action,})),FileEditorContent::ShortBase64(short) => el(text(short)),FileEditorContent::UnknownEncoding => el(text(format!("{diff:?}"))),},None => el(text(format!("{diff:?}"))),};el(column([el(text(change_type)), content]))}