fix selection after adding file, add changed file diffs
[?]
Feb 13, 2025, 7:51 PM
KT5UYXGKEEXUHURNOYFVIG7WQ3Y3SJZMM2TP4OSW6NXSXQ5XXRHACDependencies
- [2]
6YZAVBWUInitial commit - [3]
KLR5FRIBadd fs state read/write of repos - [4]
IQDCHWCPload a pijul repo - [5]
SWWE2R6Mdisplay basic repo stuff - [6]
WT3GA27Padd cursor with selection - [7]
DVKSPF7Rtrack selected file path together with an index - [8]
UB2ITZJSrefresh changed files on FS changes - [9]
EC3TVL4Xadd untracked files
Change contents
- replacement in crates/libflowers_client/src/repo.rs at line 10
use pijul::{Hash, MutTxnT, TxnT, TxnTExt};use pijul::{working_copy, Hash, MutTxnT, MutTxnTExt, TxnT, TxnTExt}; - replacement in crates/libflowers_client/src/repo.rs at line 18
pub changed_files: BTreeSet<String>,pub changed_files: BTreeSet<ChangedFile>,}#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]pub struct ChangedFile {pub path: String,pub diff: ChangedFileDiff,}#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, strum::Display)]pub enum ChangedFileDiff {Move,Del,Undel,Add,SolveNameConflict,UnsolveNameConflict,Edit,Replacement,SolveOrderConflict,UnsolveOrderConflict,ResurrectZombines,AddRoot,DelRoot, - replacement in crates/libflowers_client/src/repo.rs at line 147
fn changed_files(diff: &Diff) -> BTreeSet<String> {pub fn add(repo: &mut pijul::Repository, path_str: &str) {let txn = repo.pristine.arc_txn_begin().unwrap();let repo_path = CanonicalPathBuf::canonicalize(&repo.path).unwrap();let full_path = {let mut p = repo.path.clone();p.push(path_str);p};let path = CanonicalPathBuf::canonicalize(full_path).unwrap();let meta = std::fs::metadata(&path).unwrap();if !working_copy::filesystem::filter_ignore(repo_path.as_ref(),path.as_ref(),meta.is_dir(),) {println!("Won't add ignored file {path_str}");return;}{let mut txn = txn.write();let path = if let Ok(path) =path.as_path().strip_prefix(&repo_path.as_path()){path} else {return;};let path_str = path_slash::PathExt::to_slash_lossy(path);if !txn.is_tracked(&path_str).unwrap() {if let Err(e) = txn.add(&path_str, meta.is_dir(), 0) {eprintln!("Failed to add {}", e);}}}txn.commit().unwrap();}fn changed_files(diff: &Diff) -> BTreeSet<ChangedFile> { - replacement in crates/libflowers_client/src/repo.rs at line 190
BaseHunk::FileMove { del, add, path } => todo!(),BaseHunk::FileMove {del: _,add: _,path,} => ChangedFile {path: path.clone(),diff: ChangedFileDiff::Move,}, - replacement in crates/libflowers_client/src/repo.rs at line 199
del,contents,del: _,contents: _, - replacement in crates/libflowers_client/src/repo.rs at line 202
encoding,} => todo!(),encoding: _,} => ChangedFile {path: path.clone(),diff: ChangedFileDiff::Del,}, - replacement in crates/libflowers_client/src/repo.rs at line 208
undel,contents,undel: _,contents: _, - replacement in crates/libflowers_client/src/repo.rs at line 211
encoding,} => todo!(),encoding: _,} => ChangedFile {path: path.clone(),diff: ChangedFileDiff::Undel,}, - edit in crates/libflowers_client/src/repo.rs at line 217
add_name,add_inode,contents, - replacement in crates/libflowers_client/src/repo.rs at line 218
encoding,} => todo!(),BaseHunk::SolveNameConflict { name, path } => todo!(),BaseHunk::UnsolveNameConflict { name, path } => todo!(),add_name: _,add_inode: _,contents: _,encoding: _,} => ChangedFile {path: path.clone(),diff: ChangedFileDiff::Add,},BaseHunk::SolveNameConflict { name: _, path } => ChangedFile {path: path.clone(),diff: ChangedFileDiff::SolveNameConflict,},BaseHunk::UnsolveNameConflict { name: _, path } => ChangedFile {path: path.clone(),diff: ChangedFileDiff::UnsolveNameConflict,}, - edit in crates/libflowers_client/src/repo.rs at line 235
change, - replacement in crates/libflowers_client/src/repo.rs at line 236
encoding,} => local.path.clone(),change: _,encoding: _,} => ChangedFile {path: local.path.clone(),diff: ChangedFileDiff::Edit,}, - replacement in crates/libflowers_client/src/repo.rs at line 243
change,replacement,change: _,replacement: _, - replacement in crates/libflowers_client/src/repo.rs at line 246
encoding,} => todo!(),BaseHunk::SolveOrderConflict { change, local } => todo!(),BaseHunk::UnsolveOrderConflict { change, local } => todo!(),encoding: _,} => ChangedFile {path: local.path.clone(),diff: ChangedFileDiff::Replacement,},BaseHunk::SolveOrderConflict { change: _, local } => ChangedFile {path: local.path.clone(),diff: ChangedFileDiff::SolveOrderConflict,},BaseHunk::UnsolveOrderConflict { change: _, local } => {ChangedFile {path: local.path.clone(),diff: ChangedFileDiff::UnsolveOrderConflict,}} - replacement in crates/libflowers_client/src/repo.rs at line 262
change,change: _, - replacement in crates/libflowers_client/src/repo.rs at line 264
encoding,} => todo!(),BaseHunk::AddRoot { name, inode } => todo!(),BaseHunk::DelRoot { name, inode } => todo!(),encoding: _,} => ChangedFile {path: local.path.clone(),diff: ChangedFileDiff::ResurrectZombines,},BaseHunk::AddRoot { name: _, inode: _ } => ChangedFile {// TODO: maybe they don't all have path?path: ".".to_string(),diff: ChangedFileDiff::AddRoot,},BaseHunk::DelRoot { name: _, inode: _ } => ChangedFile {// TODO: maybe they don't all have path?path: ".".to_string(),diff: ChangedFileDiff::DelRoot,}, - edit in crates/libflowers_client/Cargo.toml at line 23
workspace = true[dependencies.strum] - edit in crates/flowers_ui/src/main.rs at line 10
use std::cmp; - edit in crates/flowers_ui/src/main.rs at line 84
AddUntrackedFile, - replacement in crates/flowers_ui/src/main.rs at line 88
let untracked_file_selection = |ix: usize| -> cursor::Selection {let untracked_file_selection = |state: &State,ix: usize|-> cursor::Selection { - edit in crates/flowers_ui/src/main.rs at line 93
};let changed_file_selection = |ix: usize| -> cursor::Selection {let path = state.repo.changed_files.iter().nth(ix).unwrap().clone();cursor::Selection::ChangedFile { ix, path } - edit in crates/flowers_ui/src/main.rs at line 94
let changed_file_selection =|state: &State, ix: usize| -> cursor::Selection {let path = state.repo.changed_files.iter().nth(ix).unwrap().path.clone();cursor::Selection::ChangedFile { ix, path }}; - edit in crates/flowers_ui/src/main.rs at line 109
dbg!("FilesChanged"); - replacement in crates/flowers_ui/src/main.rs at line 131
.find(|(_ix, file_path)| *file_path == path).map(|(ix, path)| cursor::Selection::ChangedFile {.find(|(_ix, file)| &file.path == path).map(|(ix, file)| cursor::Selection::ChangedFile { - replacement in crates/flowers_ui/src/main.rs at line 134
path: path.clone(),path: file.path.clone(), - replacement in crates/flowers_ui/src/main.rs at line 148
untracked_file_selection(ix)untracked_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 151
changed_file_selection(ix)changed_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 155
untracked_file_selection(ix)untracked_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 166
changed_file_selection(ix)changed_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 169
untracked_file_selection(ix)untracked_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 173
changed_file_selection(ix)changed_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 183
Some(changed_file_selection(ix))Some(changed_file_selection(state, ix)) - replacement in crates/flowers_ui/src/main.rs at line 187
Some(untracked_file_selection(ix))Some(untracked_file_selection(state, ix)) - replacement in crates/flowers_ui/src/main.rs at line 198
untracked_file_selection(ix)untracked_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 201
changed_file_selection(ix)changed_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 205
untracked_file_selection(ix)untracked_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 213
changed_file_selection(ix)changed_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 216
untracked_file_selection(ix)untracked_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 220
changed_file_selection(ix)changed_file_selection(state, ix) - replacement in crates/flowers_ui/src/main.rs at line 230
Some(untracked_file_selection(ix))Some(untracked_file_selection(state, ix)) - replacement in crates/flowers_ui/src/main.rs at line 234
Some(changed_file_selection(ix))Some(changed_file_selection(state, ix)) - edit in crates/flowers_ui/src/main.rs at line 242
Message::AddUntrackedFile => {if let Some(cursor::Selection::UntrackedFile { ix, path }) =state.cursor.selection.as_ref(){repo::add(&mut state.repo.state, path);let removed = state.repo.untracked_files.remove(path);debug_assert!(removed,"{:?}, path: {path}",state.repo.untracked_files);let file = repo::ChangedFile {path: path.clone(),diff: repo::ChangedFileDiff::Add,};state.repo.changed_files.insert(file);// Select the next untracked file, if anystate.cursor.selection =if state.repo.untracked_files.is_empty() {None} else {let ix =cmp::min(*ix, state.repo.untracked_files.len() - 1);Some(untracked_file_selection(state, ix))};}} - edit in crates/flowers_ui/src/main.rs at line 281
"a" => Some(Message::AddUntrackedFile), - replacement in crates/flowers_ui/src/main.rs at line 322
|(ix, path)| {|(ix, file)| { - replacement in crates/flowers_ui/src/main.rs at line 327
button(text(path))button(text(format!("{}: {}", file.diff, file.path))) - replacement in crates/flowers_ui/src/main.rs at line 329
cursor::Selection::ChangedFile{ix, path: path.clone()},cursor::Selection::ChangedFile{ix, path: file.path.clone()}, - replacement in Cargo.toml at line 24
version = "2.0"version = "2" - replacement in Cargo.toml at line 26
version = "2.2"version = "2" - replacement in Cargo.toml at line 28
version = "6.0"version = "6" - replacement in Cargo.toml at line 33
version = "2.7"version = "2" - replacement in Cargo.toml at line 43
version = "1.0"version = "1"[workspace.dependencies.strum]version = "0.27"features = ["derive"] - replacement in Cargo.toml at line 50
version = "2.0"version = "2" - replacement in Cargo.toml at line 52
version = "1.43"version = "1" - edit in Cargo.lock at line 1753
name = "heck"version = "0.5.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"[[package]] - edit in Cargo.lock at line 2173
"strum", - edit in Cargo.lock at line 3402
[[package]]name = "rustversion"version = "1.0.19"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" - edit in Cargo.lock at line 3780
name = "strum"version = "0.27.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "ce1475c515a4f03a8a7129bb5228b81a781a86cb0b3fbbc19e1c556d491a401f"dependencies = ["strum_macros",][[package]]name = "strum_macros"version = "0.27.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "9688894b43459159c82bfa5a5fa0435c19cbe3c9b427fa1dd7b1ce0c279b18a7"dependencies = ["heck","proc-macro2","quote","rustversion","syn 2.0.95",][[package]]