indicate when a file is a dir with appended '/'

[?]
Nov 24, 2025, 10:18 PM
FU6P5QLG4GVLHVB4O5TCEPJF4X4FGDUBONQFRYP4U5KEPIYLUWJQC

Dependencies

  • [2] SWWE2R6M display basic repo stuff
  • [3] EC3TVL4X add untracked files
  • [4] KT5UYXGK fix selection after adding file, add changed file diffs
  • [5] YBJRDOTC make all repo actions async
  • [6] A5YBC77V record!
  • [7] 4WO3ZJM2 show untracked files' contents
  • [8] W4LFX7IH group diffs by file name
  • [9] RPCIGCNS add replacement diff details
  • [10] MJDGPSHG WIP contents diff
  • [11] OQ6HSAWH show record log
  • [12] WI2BVQ6J rm client lib crate
  • [13] 4ELJZGRJ load and store all change diffs at once
  • [14] BFN2VHZS refactor file stuff into sub-mod
  • [15] 23SFYK4Q big view refactor into a new crate
  • [16] OPXFZKEB view tests setup
  • [17] 3QVNMRNM test non-empty repo app view
  • [18] PKJCFSBM theme improvements
  • [19] XSZZB47U refactor stuff into lib
  • [20] 3BK22XE5 add a test for hover btn and more refactors
  • [21] I56UGW7U make record test, fix log update
  • [22] YYKXNBFL test: add untracked file
  • [23] 5CYU7UT7 test: rm added file
  • [24] ESMM3FEL test selection reindexing
  • [25] UF5NJKAS test load repo
  • [26] 7SSBM4UQ view: refactor repo view
  • [27] SWDPAGF6 test channel name
  • [28] QYDWH7KB test add and rm
  • [29] 5FVZF7XX test changed files
  • [30] B6YUTY3Q test untracked files
  • [31] YKHE3XMW refactor diffs handling
  • [32] KWTBNTO3 diffs selection and scrolling
  • [33] WXQBBQ2A update nightly
  • [34] PTWZYQFR use nav-scrollable for repo status
  • [35] UR4J677R nav for log changes and refactors
  • [36] A6Z4O6RC actions menu
  • [37] JZXYSIYD channel selection!
  • [38] OJPGHVC3 entire log!
  • [39] 3XRG4BB6 rewritten nav-scrollable!
  • [40] WAOGSCOJ very nice refactor, wip adding channels logs
  • [41] WH57EHNM update tests
  • [42] EJPSD5XO shared allowed actions conditions between update and view
  • [43] YK3MOJJL chonky refactor, wip other channels logs & diffs
  • [44] 7WCB5YQJ refactor msgs and modules
  • [45] AZ5D2LQU allow to set record description
  • [46] PKLUHYE4 allow to copy change hash
  • [47] IFQPVMBD error handling for repo actions
  • [48] Z752SDIL advanced shaping for file names
  • [49] LFEMJYYD start of to_record selection
  • [50] 5O4FWCFP add tests to_record selection and improve it
  • [51] HPSOAD4R fix moved tracked file view
  • [52] K2SQTVJD handle moved dirs
  • [53] N256FH74 improve views
  • [54] 2SLTGWP6 add change files diffs to-record selection
  • [55] UPWS6J3B filter to-record changes from selection
  • [56] UMO6U2ZT partition the change files diffs on whether they have content
  • [57] KEPKF3WO unify diffs handling, simplify view
  • [58] K63JN6CR refactor out non-view field from cursor
  • [59] ZIUHKVJK update tests
  • [60] SASAN2XC use nav-scrollable
  • [61] MYGIBRRH wip custom theme
  • [62] ONRCENKT rm unnecessary state from repo's internal state
  • [63] KMB6FND3 test view update fn rather than direct fn calls
  • [64] W7IUT3ZV start recording impl
  • [65] ACDXXAX2 refactor main's updates into smaller fns
  • [66] I2AG42PA new cols layout
  • [67] X6AK4QPX finish recording test
  • [*] VCNKFNUF app init test
  • [*] WT3GA27P add cursor with selection
  • [*] 6YZAVBWU Initial commit

Change contents

  • edit in libflorescence/src/to_record.rs at line 1
    [55.5]
    [55.6]
    //! Selection of changes to include or exclude in the next record.
    /// Selection can be picked at 3 levels (order matters, from more coarse to
    /// more fine):
    ///
    /// - overall
    /// - per file
    /// - per change in a file
    ///
    /// To determine a pick state for anything from any of these levels, the
    /// high-levels (first in the list above) take precedence over the more
    /// fine-grained levels. This is so that fine-grained partial selection is
    /// preserved even if a state at higher-level is changed to be all included
    /// or excluded so that it's possible to return back to the partial
    /// selection.
  • replacement in libflorescence/src/to_record.rs at line 17
    [55.30][55.30:55]()
    use crate::{diff, repo};
    [55.30]
    [55.55]
    use crate::{diff, file};
  • replacement in libflorescence/src/to_record.rs at line 39
    [55.495][55.495:536]()
    pub files: HashMap<String, PickSet>,
    [55.495]
    [55.536]
    pub files: HashMap<file::Path, PickSet>,
  • replacement in libflorescence/src/to_record.rs at line 42
    [55.671][55.671:718]()
    pub changes: HashMap<String, PartialFile>,
    [55.671]
    [55.718]
    pub changes: HashMap<file::Path, PartialFile>,
  • replacement in libflorescence/src/to_record.rs at line 81
    [55.1735][55.1735:1848]()
    pub fn determine_file(
    state: &State,
    file: &str,
    changed_files: &repo::ChangedFiles,
    ) -> PickSet {
    [55.1735]
    [55.1848]
    pub fn determine_file(state: &State, file: &file::Path) -> PickSet {
  • replacement in libflorescence/src/to_record.rs at line 88
    [55.2074][55.2074:2154]()
    } else if file_has_any_partial_change(file, state, changed_files) {
    [55.2074]
    [55.2154]
    } else if file_has_any_partial_change(file, state) {
  • replacement in libflorescence/src/to_record.rs at line 98
    [55.2306][55.2306:2322]()
    file: &str,
    [55.2306]
    [55.2322]
    file: &file::Path,
  • replacement in libflorescence/src/to_record.rs at line 123
    [55.2980][55.2980:3156]()
    pub fn file_has_any_partial_change(
    file: &str,
    state: &State,
    changed_files: &repo::ChangedFiles,
    ) -> bool {
    let changes = changed_files.get(file).unwrap();
    [55.2980]
    [55.3156]
    pub fn file_has_any_partial_change(file: &file::Path, state: &State) -> bool {
  • replacement in libflorescence/src/to_record.rs at line 129
    [55.3285][55.3285:4133]()
    if file.changes.len() == changes.len() {
    // The number of of changes in selection is the same as number
    // of actual changes, we need to have both exclude and include
    // to be partial
    file.changes.values().any(|pick| {
    has_exclude |= matches!(pick, Pick::Exclude);
    has_include |= matches!(pick, Pick::Include);
    has_include && has_exclude
    })
    } else {
    // There is the same number of changes in selection is not the
    // same as number of actual changes, we only need to find 1
    // exclusion to be partial
    file.changes
    .values()
    .any(|pick| matches!(pick, Pick::Exclude))
    }
    [55.3285]
    [55.4133]
    // We need to have both exclude and include to be partial
    file.changes.values().any(|pick| {
    has_exclude |= matches!(pick, Pick::Exclude);
    has_include |= matches!(pick, Pick::Include);
    has_include && has_exclude
    })
  • replacement in libflorescence/src/repo.rs at line 9
    [12.62][55.4369:4399]()
    use crate::{diff, to_record};
    [12.62]
    [12.62]
    use crate::{diff, file, to_record};
  • edit in libflorescence/src/repo.rs at line 15
    [12.180][7.7:55](),[6.75][7.7:55]()
    use pijul::changestore::filesystem::FileSystem;
  • edit in libflorescence/src/repo.rs at line 22
    [3.29][10.7:21]()
    use std::cmp;
  • edit in libflorescence/src/repo.rs at line 26
    [6.179]
    [2.91]
    use std::{cmp, fs};
  • replacement in libflorescence/src/repo.rs at line 44
    [37.115][5.192:235](),[5.192][5.192:235]()
    pub untracked_files: BTreeSet<String>,
    [37.115]
    [8.7]
    pub untracked_files: BTreeSet<file::Path>,
  • replacement in libflorescence/src/repo.rs at line 109
    [4.126][8.83:138]()
    pub type ChangedFiles = BTreeMap<String, ChangedFile>;
    [4.126]
    [8.138]
    pub type ChangedFiles = BTreeMap<file::Path, ChangedFile>;
  • replacement in libflorescence/src/repo.rs at line 343
    [13.356][47.1872:1949]()
    get_change_diffs(hash, &internal_state).context(format!(
    [13.356]
    [47.1949]
    get_change_diffs(&internal_state, hash).context(format!(
  • replacement in libflorescence/src/repo.rs at line 431
    [47.2988][47.2988:3050]()
    let changed_files = changed_files(&diff, &repo.changes)?;
    [47.2988]
    [11.301]
    let changed_files = changed_files(repo, &diff)?;
  • replacement in libflorescence/src/repo.rs at line 567
    [55.4760][55.4760:4831]()
    // These two variable are needed to for `to_record` change filter.
    [55.4760]
    [55.4831]
    // This is needed to for `to_record` change filter.
  • edit in libflorescence/src/repo.rs at line 569
    [55.4859][55.4859:4921]()
    let changed_files = changed_files(&diff, &repo.changes)?;
  • replacement in libflorescence/src/repo.rs at line 658
    [55.5196][55.5196:5315]()
    if let Ok((path, diff)) =
    pijul_change_to_diff(&diff, hunk, &repo.changes)
    [55.5196]
    [55.5315]
    if let Ok((file, diff)) =
    pijul_change_to_diff(&repo, &diff, hunk)
  • replacement in libflorescence/src/repo.rs at line 661
    [55.5337][55.5337:5541]()
    match to_record::determine_file(
    &to_record,
    &path,
    &changed_files,
    ) {
    [55.5337]
    [55.5541]
    match to_record::determine_file(&to_record, &file) {
  • replacement in libflorescence/src/repo.rs at line 668
    [55.5880][55.5880:5944]()
    &path, diff_id, &to_record,
    [55.5880]
    [55.5944]
    &file, diff_id, &to_record,
  • edit in libflorescence/src/repo.rs at line 839
    [47.7626][47.7626:7648]()
    hash: ChangeHash,
  • edit in libflorescence/src/repo.rs at line 840
    [47.7684]
    [47.7684]
    hash: ChangeHash,
  • replacement in libflorescence/src/repo.rs at line 843
    [47.7785][47.7785:7842]()
    changed_files(&change, &internal_state.repo.changes)
    [47.7785]
    [4.1697]
    changed_files(&internal_state.repo, &change)
  • edit in libflorescence/src/repo.rs at line 847
    [47.7861]
    [47.7861]
    repo: &pijul::Repository,
  • edit in libflorescence/src/repo.rs at line 849
    [47.7878][47.7878:7909]()
    repo_changes: &FileSystem,
  • replacement in libflorescence/src/repo.rs at line 853
    [32.504][55.6496:6629]()
    let (path, diff) = pijul_change_to_diff(diff, change, repo_changes)?;
    changes.entry(path).or_default().insert(diff);
    [32.504]
    [55.6629]
    let (file, diff) = pijul_change_to_diff(repo, diff, change)?;
    changes.entry(file).or_default().insert(diff);
  • edit in libflorescence/src/repo.rs at line 861
    [55.6727]
    [55.6727]
    repo: &pijul::Repository,
  • replacement in libflorescence/src/repo.rs at line 864
    [55.6765][55.6765:6881]()
    repo_changes: &FileSystem,
    ) -> anyhow::Result<(String, ChangedFileDiff)> {
    let changed_file = match hunk {
    [55.6765]
    [55.6881]
    ) -> anyhow::Result<(file::Path, ChangedFileDiff)> {
    let (path, diff) = match hunk {
  • replacement in libflorescence/src/repo.rs at line 896
    [55.7828][9.866:900](),[9.866][9.866:900]()
    repo_changes,
    [55.7828]
    [55.7829]
    &repo.changes,
  • replacement in libflorescence/src/repo.rs at line 942
    [55.9203][55.9203:9279]()
    get_change_contents(repo_changes, change, &diff.contents)?;
    [55.9203]
    [55.9279]
    get_change_contents(&repo.changes, change, &diff.contents)?;
  • replacement in libflorescence/src/repo.rs at line 960
    [55.9742][55.9742:9818]()
    get_change_contents(repo_changes, change, &diff.contents)?;
    [55.9742]
    [55.9818]
    get_change_contents(&repo.changes, change, &diff.contents)?;
  • replacement in libflorescence/src/repo.rs at line 964
    [55.9921][55.9921:10045]()
    let raw_replacement_contents =
    get_change_contents(repo_changes, replacement, &diff.contents)?;
    [55.9921]
    [55.10045]
    let raw_replacement_contents = get_change_contents(
    &repo.changes,
    replacement,
    &diff.contents,
    )?;
  • replacement in libflorescence/src/repo.rs at line 997
    [55.11091][55.11091:11112]()
    Ok(changed_file)
    [55.11091]
    [3.574]
    // NOTE This might be called for log or another channel so the file might
    // not exist (or at extereme could even change from file to dir or
    // vice-versa). Hence this information is sadly not 100% reliable, but it's
    // still better than not having it all
    let is_dir = fs::metadata(repo.path.join(&path))
    .map(|metadata| metadata.is_dir())
    .unwrap_or_default();
    let path = file::Path { raw: path, is_dir };
    Ok((path, diff))
  • replacement in libflorescence/src/repo.rs at line 1011
    [47.8196][47.8196:8236]()
    ) -> anyhow::Result<BTreeSet<String>> {
    [47.8196]
    [47.8236]
    ) -> anyhow::Result<BTreeSet<file::Path>> {
  • replacement in libflorescence/src/repo.rs at line 1038
    [47.8899][47.8899:8951]()
    Some(Ok(path_str.into_owned()))
    [47.8899]
    [47.8951]
    let path = path_str.into_owned();
    let is_dir = match fs::metadata(repo.path.join(&path)) {
    Err(e) => {
    return Some(Err(anyhow::Error::from(e)));
    }
    Ok(metadata) => metadata.is_dir(),
    };
    Some(Ok(file::Path { raw: path, is_dir }))
  • edit in libflorescence/src/repo/test.rs at line 1
    [25.1959]
    [27.2967]
    use crate::file;
  • replacement in libflorescence/src/repo/test.rs at line 154
    [29.249][47.10670:10763]()
    let changed_files =
    repo::changed_files(&diff, &internal.repo.changes).unwrap();
    [29.249]
    [29.325]
    let changed_files = repo::changed_files(&internal.repo, &diff).unwrap();
  • replacement in libflorescence/src/repo/test.rs at line 156
    [29.365][29.365:442]()
    let changed_file_diff = changed_files.get(DEFAULT_IGNORE_FILE).unwrap();
    [29.365]
    [29.442]
    let path = file::Path {
    raw: DEFAULT_IGNORE_FILE.to_string(),
    is_dir: false,
    };
    let changed_file_diff = changed_files.get(&path).unwrap();
  • replacement in libflorescence/src/repo/test.rs at line 183
    [30.530][30.530:590]()
    assert_eq!(untracked_files.first().unwrap(), new_file);
    [30.530]
    [28.15]
    assert_eq!(untracked_files.first().unwrap().raw, new_file);
  • edit in libflorescence/src/file.rs at line 2
    [32.2154]
    [19.76]
    use std::fmt::Display;
    #[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
    pub struct Path {
    pub raw: String,
    pub is_dir: bool,
    }
  • replacement in libflorescence/src/file.rs at line 13
    [19.138][19.138:160]()
    pub path: String,
    [19.138]
    [32.2155]
    pub path: Path,
  • replacement in libflorescence/src/file.rs at line 19
    [32.2251][32.2251:2274]()
    pub path: &'a str,
    [32.2251]
    [19.160]
    pub path: &'a Path,
  • replacement in libflorescence/src/file.rs at line 66
    [32.2959][32.2959:3021]()
    pub fn id_parts_hash(path: &str, file_kind: Kind) -> IdHash {
    [32.2959]
    [32.3021]
    pub fn id_parts_hash(path: &Path, file_kind: Kind) -> IdHash {
  • edit in libflorescence/src/file.rs at line 82
    [32.3358]
    [32.3358]
    impl Display for Path {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    let Path { raw: path, is_dir } = self;
    // Adds slash when it's a dir
    write!(f, "{path}{}", if *is_dir { "/" } else { "" })
    }
    }
  • replacement in libflorescence/src/file.rs at line 96
    [32.3447][32.3447:3486]()
    let path = "some random path";
    [32.3447]
    [32.3486]
    let raw = "some random path".to_string();
    let path = Path { raw, is_dir: false };
  • replacement in libflorescence/src/file.rs at line 101
    [32.3548][32.3548:3601]()
    id_ref_hash(&IdRef { path, file_kind }),
    [32.3548]
    [32.3601]
    id_ref_hash(&IdRef {
    path: &path,
    file_kind
    }),
  • replacement in libflorescence/src/file.rs at line 106
    [32.3627][32.3627:3667]()
    path: path.to_string(),
    [32.3627]
    [32.3667]
    path: path.clone(),
  • replacement in libflorescence/src/file.rs at line 111
    [32.3739][32.3739:3836]()
    id_ref_hash(&IdRef { path, file_kind }),
    id_parts_hash(path, file_kind),
    [32.3739]
    [32.3836]
    id_ref_hash(&IdRef {
    path: &path,
    file_kind
    }),
    id_parts_hash(&path, file_kind),
  • replacement in libflorescence/src/file.rs at line 119
    [32.3868][32.3868:3921]()
    id_ref_hash(&IdRef { path, file_kind }),
    [32.3868]
    [32.3921]
    id_ref_hash(&IdRef {
    path: &path,
    file_kind
    }),
  • replacement in libflorescence/src/file.rs at line 124
    [32.3947][32.3947:3987]()
    path: path.to_string(),
    [32.3947]
    [32.3987]
    path,
  • replacement in inflorescence_view/src/view.rs at line 145
    [26.765][15.16052:16079](),[34.1554][15.16052:16079](),[35.3137][15.16052:16079](),[15.16052][15.16052:16079]()
    |(ix, path)| {
    [35.3137]
    [40.4720]
    |(ix, file)| {
  • replacement in inflorescence_view/src/view.rs at line 150
    [15.16299][18.2748:2786]()
    button(text(path)
    [15.16299]
    [48.22]
    button(
    text(file.to_string())
  • replacement in inflorescence_view/src/view.rs at line 156
    [44.549][37.4401:4487](),[42.909][37.4401:4487](),[37.4401][37.4401:4487]()
    selection::Select::UntrackedFile{ix, path: path.clone()},
    [44.549]
    [44.550]
    selection::Select::UntrackedFile{ix, path: file.clone()},
  • replacement in inflorescence_view/src/view.rs at line 166
    [26.864][15.16741:16783](),[34.1617][15.16741:16783](),[35.3290][15.16741:16783](),[15.16741][15.16741:16783](),[15.16783][54.732:824]()
    |(ix, (file_path, _diffs))| {
    let state = to_record::determine_file(to_record, file_path, changed_files);
    [35.3290]
    [54.824]
    |(ix, (file, _diffs))| {
    let state = to_record::determine_file(to_record, file);
  • replacement in inflorescence_view/src/view.rs at line 170
    [54.913][54.913:1022]()
    .on_press_with(||Msg::ToRecord(to_record::Msg::ToggleFile{file :file_path.clone()}))
    [54.913]
    [54.1022]
    .on_press_with(||Msg::ToRecord(to_record::Msg::ToggleFile{path :file.clone()}))
  • replacement in inflorescence_view/src/view.rs at line 177
    [49.1445][49.1445:1485]()
    text(file_path)
    [49.1445]
    [48.85]
    text(file.to_string())
  • replacement in inflorescence_view/src/view.rs at line 182
    [44.672][37.4732:4821](),[42.1033][37.4732:4821](),[37.4732][37.4732:4821]()
    selection::Select::ChangedFile{ix, path: file_path.clone()},
    [44.672]
    [44.673]
    selection::Select::ChangedFile{ix, path: file.clone()},
  • replacement in inflorescence_view/src/view.rs at line 248
    [43.165][40.5672:5746](),[40.5672][40.5672:5746]()
    file::id_parts_hash(path, file::Kind::Untracked);
    [43.165]
    [43.166]
    file::id_parts_hash(&path, file::Kind::Untracked);
  • replacement in inflorescence_view/src/view.rs at line 257
    [54.1207][54.1207:1241]()
    path,
    [54.1207]
    [54.1241]
    Some(path),
  • replacement in inflorescence_view/src/view.rs at line 266
    [40.6281][53.22:98]()
    view_header(format!("Untracked {path} contents:")),
    [40.6281]
    [40.6421]
    view_header(format!(
    "Untracked {} contents:",
    path.raw
    )),
  • replacement in inflorescence_view/src/view.rs at line 280
    [43.497][40.6732:6804](),[40.6732][40.6732:6804]()
    file::id_parts_hash(path, file::Kind::Changed);
    [43.497]
    [43.498]
    file::id_parts_hash(&path, file::Kind::Changed);
  • replacement in inflorescence_view/src/view.rs at line 289
    [54.1548][54.1548:1582]()
    path,
    [54.1548]
    [54.1582]
    Some(path),
  • replacement in inflorescence_view/src/view.rs at line 297
    [40.7307][53.99:219]()
    el(column([view_header(format!("{path} diff:")), diffs])
    .spacing(SPACING))
    [40.7307]
    [40.7512]
    el(column([
    view_header(format!("{} diff:", path.raw)),
    diffs,
    ])
    .spacing(SPACING))
  • replacement in inflorescence_view/src/view.rs at line 410
    [38.3787][53.220:266]()
    [el(container(el(text("Untracked:")))
    [38.3787]
    [53.266]
    [el(container(el(text("Untracked files:")))
  • replacement in inflorescence_view/src/view.rs at line 416
    [53.449][53.449:483]()
    el(text("Changed:")),
    [53.449]
    [53.483]
    el(text("Changed files:")),
  • replacement in inflorescence_view/src/view.rs at line 513
    [54.2025][54.2025:2063]()
    path,
    [54.2025]
    [54.2063]
    None,
  • replacement in inflorescence_view/src/view.rs at line 760
    [54.2378][54.2378:2416]()
    path,
    [54.2378]
    [54.2416]
    None,
  • replacement in inflorescence_view/src/view.rs at line 930
    [54.2731][54.2731:2769]()
    path,
    [54.2731]
    [54.2769]
    None,
  • replacement in inflorescence_view/src/view/test.rs at line 11
    [41.589][19.5854:5880](),[31.2357][19.5854:5880](),[39.5074][19.5854:5880](),[19.5854][19.5854:5880]()
    use libflorescence::repo;
    [41.589]
    [16.4373]
    use libflorescence::{file, repo};
  • edit in inflorescence_view/src/view/test.rs at line 33
    [45.2433]
    [16.4596]
    let to_file_path = |raw: &str| file::Path {
    raw: raw.to_string(),
    is_dir: false,
    };
    let to_dir_path = |raw: &str| file::Path {
    raw: raw.to_string(),
    is_dir: true,
    };
  • replacement in inflorescence_view/src/view/test.rs at line 102
    [17.727][17.727:767](),[17.873][17.873:943]()
    "untracked.rs".to_string(),
    "a/sub/dir/somewhere/deep/untracked_file.rs".to_string(),
    [17.727]
    [17.943]
    to_file_path("untracked.rs"),
    to_dir_path("untracked_dir"),
    to_file_path("a/sub/dir/somewhere/deep/untracked_file.rs"),
  • replacement in inflorescence_view/src/view/test.rs at line 107
    [18.3185][18.3185:3251]()
    ("changed_file.rs".to_string(), BTreeSet::default()),
    [18.3185]
    [18.3251]
    (to_file_path("changed_file.rs"), BTreeSet::default()),
  • replacement in inflorescence_view/src/view/test.rs at line 109
    [18.3265][18.3265:3337]()
    "a/sub/dir/somewhere/deep/changed_file.rs".to_string(),
    [18.3265]
    [18.3337]
    to_file_path("a/sub/dir/somewhere/deep/changed_file.rs"),
  • replacement in inflorescence_view/src/view/test.rs at line 155
    [36.10200][41.2087:2117]()
    path: "".to_string(),
    [36.10200]
    [41.2117]
    path: to_file_path(""),
  • edit in inflorescence_view/src/diff.rs at line 7
    [19.5299][54.3033:3069]()
    use inflorescence_model::to_record;
  • edit in inflorescence_view/src/diff.rs at line 11
    [50.1167]
    [15.432]
    use inflorescence_model::to_record;
    use libflorescence::file;
  • replacement in inflorescence_view/src/diff.rs at line 23
    [32.5277][54.3152:3171]()
    path: &'a str,
    [32.5277]
    [32.5277]
    path: Option<&'a file::Path>,
  • replacement in inflorescence_view/src/diff.rs at line 48
    [15.3951][54.3303:3322]()
    path: &'a str,
    [15.3951]
    [32.5517]
    path: Option<&'a file::Path>,
  • replacement in inflorescence_view/src/diff.rs at line 75
    [15.4669][54.3427:3659]()
    // Add space to align these with toggle in `Section::Changed`
    let toggle_space = el(container(text("")).width(checkbox::WIDTH));
    el(row([toggle_space, el(column(res))]).spacing(CHECKBOX_SPACING))
    [15.4669]
    [15.4697]
    if path.is_some() {
    // Add space to align these with toggle in `Section::Changed`
    let toggle_space =
    el(container(text("")).width(checkbox::WIDTH));
    el(row([toggle_space, el(column(res))])
    .spacing(CHECKBOX_SPACING))
    } else {
    el(column(res))
    }
  • replacement in inflorescence_view/src/diff.rs at line 114
    [54.3765][54.3765:3798](),[54.3798][55.11291:11363](),[55.11363][54.3875:4183](),[54.3875][54.3875:4183]()
    let to_record_pick =
    to_record::determine_change(path, *diff_id, to_record);
    let to_record_toggle = el(checkbox::two_way(to_record_pick)
    .on_press_with(|| {
    Msg::ToRecord(to_record::Msg::ToggleChange {
    file: path.to_string(),
    diff_id: *diff_id,
    })
    }));
    [54.3765]
    [54.4183]
    if let Some(path) = path {
    let to_record_pick =
    to_record::determine_change(path, *diff_id, to_record);
    let to_record_toggle = el(checkbox::two_way(to_record_pick)
    .on_press_with(|| {
    Msg::ToRecord(to_record::Msg::ToggleChange {
    path: path.clone(),
    diff_id: *diff_id,
    })
    }));
  • replacement in inflorescence_view/src/diff.rs at line 125
    [54.4184][54.4184:4284]()
    el(row([to_record_toggle, el(column(res))])
    .spacing(CHECKBOX_SPACING))
    [54.4184]
    [15.5480]
    el(row([to_record_toggle, el(column(res))])
    .spacing(CHECKBOX_SPACING))
    } else {
    el(column(res))
    }
  • replacement in inflorescence_model/src/to_record.rs at line 14
    [55.11587][54.5893:5927](),[49.2589][54.5893:5927]()
    use libflorescence::{diff, repo};
    [55.11587]
    [49.2615]
    use libflorescence::{diff, file, repo};
  • replacement in inflorescence_model/src/to_record.rs at line 19
    [49.2721][54.5928:6019]()
    ToggleFile { file: String },
    ToggleChange { file: String, diff_id: diff::IdHash },
    [49.2721]
    [54.6768]
    ToggleFile {
    path: file::Path,
    },
    ToggleChange {
    path: file::Path,
    diff_id: diff::IdHash,
    },
  • replacement in inflorescence_model/src/to_record.rs at line 33
    [49.4586][49.4586:4624]()
    Msg::ToggleFile { file } => {
    [49.4586]
    [50.1990]
    Msg::ToggleFile { path } => {
  • replacement in inflorescence_model/src/to_record.rs at line 49
    [49.4963][49.4963:5075]()
    let pick = next_file_pick(&file, state, changed_files);
    state.files.insert(file, pick);
    [49.4963]
    [49.5075]
    let pick = next_file_pick(&path, state);
    state.files.insert(path, pick);
  • replacement in inflorescence_model/src/to_record.rs at line 55
    [54.6800][54.6800:6818]()
    file,
    [54.6800]
    [54.6818]
    path: file,
  • replacement in inflorescence_model/src/to_record.rs at line 145
    [49.6698][49.6698:6811]()
    pub fn next_file_pick(
    file: &str,
    state: &State,
    changed_files: &repo::ChangedFiles,
    ) -> PickSet {
    [49.6698]
    [49.6811]
    pub fn next_file_pick(file: &file::Path, state: &State) -> PickSet {
  • replacement in inflorescence_model/src/to_record.rs at line 153
    [49.7026][49.7026:7094]()
    && !file_has_any_partial_change(file, state, changed_files)
    [49.7026]
    [49.7094]
    && !file_has_any_partial_change(file, state)
  • replacement in inflorescence_model/src/to_record.rs at line 162
    [50.4606][50.4606:4622]()
    file: &str,
    [50.4606]
    [54.6993]
    file: &file::Path,
  • replacement in inflorescence_model/src/to_record.rs at line 203
    [49.8862][49.8862:8937]()
    || file_has_any_partial_change(file, state, changed_files)
    [49.8862]
    [49.8937]
    || file_has_any_partial_change(file, state)
  • replacement in inflorescence_model/src/to_record.rs at line 208
    [49.9073][49.9073:9148]()
    || file_has_any_partial_change(file, state, changed_files)
    [49.9073]
    [49.9148]
    || file_has_any_partial_change(file, state)
  • replacement in inflorescence_model/src/to_record.rs at line 248
    [49.11535][49.11535:11551]()
    file: &str,
    [49.11535]
    [49.11551]
    file: &file::Path,
  • edit in inflorescence_model/src/to_record/test.rs at line 28
    [50.5871]
    [50.5871]
    let to_path = |raw: &str| file::Path {
    raw: raw.to_string(),
    is_dir: false,
    };
  • replacement in inflorescence_model/src/to_record/test.rs at line 34
    [50.5927][50.5927:6104]()
    (file_a.to_owned(), repo::ChangedFile::default()),
    (file_b.to_owned(), repo::ChangedFile::default()),
    (file_c.to_owned(), repo::ChangedFile::default()),
    [50.5927]
    [50.6104]
    (to_path(file_a), repo::ChangedFile::default()),
    (to_path(file_b), repo::ChangedFile::default()),
    (to_path(file_c), repo::ChangedFile::default()),
  • replacement in inflorescence_model/src/to_record/test.rs at line 43
    [50.6234][50.6234:6273]()
    file: file.to_owned(),
    [50.6234]
    [50.6273]
    path: to_path(file),
  • replacement in inflorescence_model/src/to_record/test.rs at line 49
    [50.6334][50.6334:6410]()
    let file = |state: &State, file: &str| *state.files.get(file).unwrap();
    [50.6334]
    [50.6410]
    let file =
    |state: &State, file: &str| *state.files.get(&to_path(file)).unwrap();
  • edit in inflorescence_model/src/to_record/test.rs at line 151
    [50.9961]
    [50.9961]
    let to_path = |raw: &str| file::Path {
    raw: raw.to_string(),
    is_dir: false,
    };
  • replacement in inflorescence_model/src/to_record/test.rs at line 168
    [50.10336][50.10336:10367]()
    file_a.to_owned(),
    [50.10336]
    [50.10367]
    to_path(file_a),
  • replacement in inflorescence_model/src/to_record/test.rs at line 172
    [50.10452][50.10452:10483]()
    file_b.to_owned(),
    [50.10452]
    [50.10483]
    to_path(file_b),
  • replacement in inflorescence_model/src/to_record/test.rs at line 179
    [50.10635][50.10635:10666]()
    file_c.to_owned(),
    [50.10635]
    [50.10666]
    to_path(file_c),
  • replacement in inflorescence_model/src/to_record/test.rs at line 193
    [50.11030][50.11030:11073]()
    file: file.to_owned(),
    [50.11030]
    [54.7091]
    path: to_path(file),
  • replacement in inflorescence_model/src/to_record/test.rs at line 200
    [50.11194][50.11194:11270]()
    let file = |state: &State, file: &str| *state.files.get(file).unwrap();
    [50.11194]
    [50.11270]
    let file =
    |state: &State, file: &str| *state.files.get(&to_path(file)).unwrap();
  • replacement in inflorescence_model/src/to_record/test.rs at line 206
    [50.11385][50.11385:11408]()
    .get(file)
    [50.11385]
    [50.11408]
    .get(&to_path(file))
  • edit in inflorescence_model/src/selection.rs at line 1
    [19.3124]
    [35.925]
    use libflorescence::file::Path;
  • replacement in inflorescence_model/src/selection.rs at line 73
    [19.3466][19.3466:3488]()
    path: String,
    [19.3466]
    [32.6066]
    path: Path,
  • replacement in inflorescence_model/src/selection.rs at line 78
    [19.3532][19.3532:3554]()
    path: String,
    [19.3532]
    [32.6096]
    path: Path,
  • replacement in inflorescence_model/src/selection.rs at line 95
    [19.4185][19.4185:4207]()
    path: String,
    [19.4185]
    [19.4207]
    path: Path,
  • replacement in inflorescence_model/src/selection.rs at line 99
    [19.4251][19.4251:4273]()
    path: String,
    [19.4251]
    [19.4273]
    path: Path,
  • replacement in inflorescence_model/src/action.rs at line 86
    [49.13402][50.15488:15549]()
    ToRecord(to_record::Msg::ToggleFile { file: _ })
    [49.13402]
    [54.7494]
    ToRecord(to_record::Msg::ToggleFile { path: _ })
  • replacement in inflorescence_model/src/action.rs at line 88
    [54.7548][54.7548:7573]()
    file: _,
    [54.7548]
    [54.7573]
    path: _,
  • replacement in inflorescence_model/src/action.rs at line 95
    [50.15751][50.15751:15812]()
    ToRecord(to_record::Msg::ToggleFile { file: _ })
    [50.15751]
    [54.7618]
    ToRecord(to_record::Msg::ToggleFile { path: _ })
  • replacement in inflorescence_model/src/action.rs at line 97
    [54.7672][54.7672:7697]()
    file: _,
    [54.7672]
    [54.7697]
    path: _,
  • replacement in inflorescence_model/src/action.rs at line 349
    [42.9265][42.9265:9295](),[42.9295][46.446:494](),[46.494][42.9341:9503](),[42.9341][42.9341:9503]()
    match selection {
    StatusSelection::Untracked => {
    ma.push(add_untracked());
    push_if(can_select_right, right, ma);
    push_if(can_record, start_record, ma)
    [42.9265]
    [42.9503]
    if let Some(selection) = selection {
    match selection {
    StatusSelection::Untracked => {
    ma.push(add_untracked());
    push_if(can_select_right, right, ma);
    push_if(can_record, start_record, ma)
    }
    StatusSelection::Changed => {
    // Always allow right move for `to_record` selection
    ma.push(right());
    push_if(can_record, start_record, ma)
    }
    StatusSelection::AddedFromUntracked => {
    ma.push(rm_added_file());
    push_if(can_select_right, right, ma);
    push_if(can_record, start_record, ma)
    }
    StatusSelection::LogChange => {
    push_if(can_select_right, right, ma);
    ma.push(clipboard_copy_change_hash());
    push_if(can_record, start_record, ma)
    }
  • replacement in inflorescence_model/src/action.rs at line 372
    [42.9521][46.495:552](),[46.552][42.9576:9756](),[42.9576][42.9576:9756](),[42.9756][46.553:838](),[46.838][42.9798:9947](),[42.9798][42.9798:9947]()
    StatusSelection::AddedFromUntracked => {
    ma.push(rm_added_file());
    push_if(can_select_right, right, ma);
    push_if(can_record, start_record, ma)
    }
    StatusSelection::LogChange => {
    push_if(can_select_right, right, ma);
    ma.push(clipboard_copy_change_hash());
    push_if(can_record, start_record, ma)
    }
    StatusSelection::Other => {
    push_if(can_select_right, right, ma);
    push_if(can_record, start_record, ma)
    }
    };
    [42.9521]
    [42.9947]
    }
  • replacement in inflorescence_model/src/action.rs at line 569
    [42.13504][46.1255:1291]()
    selection: StatusSelection,
    [42.13504]
    [42.13538]
    selection: Option<StatusSelection>,
  • replacement in inflorescence_model/src/action.rs at line 621
    [46.1331][42.14395:14406](),[42.14395][42.14395:14406]()
    Other,
    [46.1331]
    [42.14406]
    Changed,
  • replacement in inflorescence_model/src/action.rs at line 710
    [42.17097][46.1332:1399]()
    selection: StatusSelection::Untracked,
    [42.17097]
    [43.22456]
    selection: Some(StatusSelection::Untracked),
  • replacement in inflorescence_model/src/action.rs at line 735
    [42.18052][46.1465:1516]()
    StatusSelection::Other
    [42.18052]
    [42.18101]
    StatusSelection::Changed
  • replacement in inflorescence_model/src/action.rs at line 739
    [49.15879][49.15879:16079]()
    Some(to_record::next_file_pick(
    path,
    to_record,
    changed_files,
    ));
    [49.15879]
    [43.22503]
    Some(to_record::next_file_pick(path, to_record));
  • replacement in inflorescence_model/src/action.rs at line 768
    [42.18917][42.18917:18974]()
    selection: main_selection(),
    [42.18917]
    [43.22802]
    selection: Some(main_selection()),
  • replacement in inflorescence_model/src/action.rs at line 810
    [42.20624][46.1517:1584]()
    selection: StatusSelection::LogChange,
    [42.20624]
    [43.23517]
    selection: Some(StatusSelection::LogChange),
  • replacement in inflorescence_model/src/action.rs at line 819
    [42.20894][46.1585:1640]()
    selection: StatusSelection::Other,
    [42.20894]
    [42.20947]
    selection: None,
  • edit in inflorescence/src/test.rs at line 85
    [21.2195]
    [21.2195]
    let to_path = |raw: &str| file::Path {
    raw: raw.to_string(),
    is_dir: false,
    };
  • replacement in inflorescence/src/test.rs at line 124
    [44.8925][44.8925:8979]()
    path: file_to_record.to_string(),
    [44.8925]
    [44.8979]
    path: to_path(file_to_record),
  • replacement in inflorescence/src/test.rs at line 228
    [44.9496][44.9496:9550]()
    path: file_to_record.to_string(),
    [44.9496]
    [44.9550]
    path: to_path(file_to_record),
  • replacement in inflorescence/src/test.rs at line 237
    [43.27537][43.27537:27579]()
    path: file_to_record.to_string(),
    [43.27537]
    [43.27579]
    path: to_path(file_to_record),
  • edit in inflorescence/src/test.rs at line 496
    [22.565]
    [22.565]
    let to_path = |raw: &str| file::Path {
    raw: raw.to_string(),
    is_dir: false,
    };
  • replacement in inflorescence/src/test.rs at line 529
    [34.3418][34.3418:3488]()
    assert!(repo_state.untracked_files.contains(file_to_record));
    [34.3418]
    [34.3488]
    assert!(repo_state
    .untracked_files
    .contains(&to_path(file_to_record)));
  • replacement in inflorescence/src/test.rs at line 542
    [44.10434][44.10434:10488]()
    path: file_to_record.to_string(),
    [44.10434]
    [44.10488]
    path: to_path(file_to_record),
  • replacement in inflorescence/src/test.rs at line 551
    [43.28884][43.28884:28926]()
    path: file_to_record.to_string(),
    [43.28884]
    [43.28926]
    path: to_path(file_to_record),
  • replacement in inflorescence/src/test.rs at line 579
    [34.3728][34.3728:3800]()
    assert!(repo_state.changed_files.contains_key(file_to_record));
    [34.3728]
    [34.3800]
    assert!(repo_state
    .changed_files
    .contains_key(&to_path(file_to_record)));
  • replacement in inflorescence/src/test.rs at line 583
    [34.3820][34.3820:3887]()
    repo_state.changed_files.get(file_to_record).unwrap(),
    [34.3820]
    [34.3887]
    repo_state
    .changed_files
    .get(&to_path(file_to_record))
    .unwrap(),
  • replacement in inflorescence/src/test.rs at line 597
    [23.262][23.262:312]()
    path: file_to_record.to_string(),
    [23.262]
    [43.29371]
    path: to_path(file_to_record),
  • replacement in inflorescence/src/test.rs at line 605
    [43.29516][43.29516:29558]()
    path: file_to_record.to_string(),
    [43.29516]
    [43.29558]
    path: to_path(file_to_record),
  • replacement in inflorescence/src/test.rs at line 632
    [34.4093][34.4093:4163]()
    assert!(repo_state.untracked_files.contains(file_to_record));
    [34.4093]
    [34.4163]
    assert!(repo_state
    .untracked_files
    .contains(&to_path(file_to_record)));
  • edit in inflorescence/src/test.rs at line 662
    [45.9224]
    [41.6917]
    };
    let to_path = |raw: &str| file::Path {
    raw: raw.to_string(),
    is_dir: false,
  • replacement in inflorescence/src/test.rs at line 690
    [41.7186][24.1890:2004](),[24.1890][24.1890:2004]()
    "untracked_0.rs".to_string(),
    "untracked_1.rs".to_string(),
    "untracked_2.rs".to_string(),
    [41.7186]
    [24.2004]
    to_path("untracked_0.rs"),
    to_path("untracked_1.rs"),
    to_path("untracked_2.rs"),
  • replacement in inflorescence/src/test.rs at line 697
    [24.2097][24.2097:2141]()
    path: "untracked_1.rs".to_string(),
    [24.2097]
    [32.7486]
    path: to_path("untracked_1.rs"),
  • replacement in inflorescence/src/test.rs at line 711
    [37.11366][32.7586:7656](),[32.7586][32.7586:7656]()
    if *ix == 1 && path == "untracked_1.rs" && !diff_selected
    [37.11366]
    [24.2546]
    if *ix == 1 && path.raw == "untracked_1.rs" && !diff_selected
  • replacement in inflorescence/src/test.rs at line 718
    [32.7722][32.7722:7752]()
    "untracked_1.rs",
    [32.7722]
    [32.7752]
    &to_path("untracked_1.rs"),
  • replacement in inflorescence/src/test.rs at line 731
    [24.3177][24.3177:3224]()
    path: "untracked_gone.rs".to_string(),
    [24.3177]
    [32.7799]
    path: to_path("untracked_gone.rs"),
  • replacement in inflorescence/src/test.rs at line 752
    [24.3785][24.3785:3825]()
    "changed_0.rs".to_string(),
    [24.3785]
    [24.3825]
    to_path("changed_0.rs"),
  • replacement in inflorescence/src/test.rs at line 755
    [24.3899][24.3899:4009]()
    ("changed_1.rs".to_string(), BTreeSet::new()),
    ("changed_2.rs".to_string(), BTreeSet::new()),
    [24.3899]
    [24.4009]
    (to_path("changed_1.rs"), BTreeSet::new()),
    (to_path("changed_2.rs"), BTreeSet::new()),
  • replacement in inflorescence/src/test.rs at line 761
    [24.4100][24.4100:4142]()
    path: "changed_0.rs".to_string(),
    [24.4100]
    [32.7830]
    path: to_path("changed_0.rs"),
  • replacement in inflorescence/src/test.rs at line 775
    [37.11811][32.7928:7996](),[32.7928][32.7928:7996]()
    if *ix == 0 && path == "changed_0.rs" && !diff_selected
    [37.11811]
    [24.4544]
    if *ix == 0 && path.raw == "changed_0.rs" && !diff_selected
  • replacement in inflorescence/src/test.rs at line 781
    [24.4658][32.7997:8152]()
    state
    .files
    .diffs_cache
    .inner
    .peek(&file::id_parts_hash("changed_0.rs", file::Kind::Changed)),
    [24.4658]
    [24.4814]
    state.files.diffs_cache.inner.peek(&file::id_parts_hash(
    &to_path("changed_0.rs"),
    file::Kind::Changed
    )),
  • replacement in inflorescence/src/test.rs at line 796
    [24.5226][24.5226:5268]()
    path: "changed_1.rs".to_string(),
    [24.5226]
    [32.8153]
    path: to_path("changed_1.rs"),
  • replacement in inflorescence/src/test.rs at line 809
    [51.3464][51.3464:3527]()
    .insert("changed_1.rs".to_string(), changed_file);
    [51.3464]
    [51.3527]
    .insert(to_path("changed_1.rs"), changed_file);
  • replacement in inflorescence/src/test.rs at line 822
    [37.12094][32.8251:8319](),[32.8251][32.8251:8319]()
    if *ix == 1 && path == "changed_1.rs" && !diff_selected
    [37.12094]
    [24.5670]
    if *ix == 1 && path.raw == "changed_1.rs" && !diff_selected
  • replacement in inflorescence/src/test.rs at line 833
    [51.3822][51.3822:3977]()
    state
    .files
    .diffs_cache
    .inner
    .peek(&file::id_parts_hash("changed_1.rs", file::Kind::Changed)),
    [51.3822]
    [51.3977]
    state.files.diffs_cache.inner.peek(&file::id_parts_hash(
    &to_path("changed_1.rs"),
    file::Kind::Changed
    )),
  • replacement in inflorescence/src/test.rs at line 847
    [24.5989][24.5989:6034]()
    path: "changed_gone.rs".to_string(),
    [24.5989]
    [32.8320]
    path: to_path("changed_gone.rs"),
  • replacement in inflorescence/src/test.rs at line 918
    [24.8096][24.8096:8137]()
    path: "log_gone.rs".to_string(),
    [24.8096]
    [32.8496]
    path: to_path("log_gone.rs"),
  • replacement in inflorescence/src/selection.rs at line 1255
    [43.43103][43.43103:43213]()
    let diff_selected =
    diff::file_diff_needs_scrolling(&ctx.navigation.files_diffs);
    [43.43103]
    [43.43213]
    // Always allow right move for `to_record` selection
    let diff_selected = true;
  • replacement in inflorescence/src/main.rs at line 541
    [50.18722][50.18722:18770]()
    file: path.clone(),
    [50.18722]
    [54.7949]
    path: path.clone(),
  • replacement in inflorescence/src/main.rs at line 547
    [50.18960][50.18960:19041]()
    let msg = to_record::Msg::ToggleFile { file: path.clone() };
    [50.18960]
    [50.19041]
    let msg = to_record::Msg::ToggleFile { path: path.clone() };
  • replacement in inflorescence/src/main.rs at line 751
    [33.245][33.245:317]()
    .send(repo::MsgIn::AddUntrackedFile { path: path.clone() })
    [33.245]
    [33.317]
    .send(repo::MsgIn::AddUntrackedFile {
    path: path.raw.clone(),
    })
  • replacement in inflorescence/src/main.rs at line 757
    [40.86841][40.86841:86917]()
    debug_assert!(removed, "{:?}, path: {path}", repo.untracked_files);
    [40.86841]
    [40.86917]
    debug_assert!(
    removed,
    "{:?}, path: {}",
    repo.untracked_files, path.raw
    );
  • replacement in inflorescence/src/main.rs at line 815
    [33.1237][33.1237:1308]()
    .send(repo::MsgIn::RmAddedFile { path: path.clone() })
    [33.1237]
    [33.1308]
    .send(repo::MsgIn::RmAddedFile {
    path: path.raw.clone(),
    })
  • replacement in inflorescence/src/main.rs at line 825
    [33.1540][33.1540:1562]()
    path,
    [33.1540]
    [40.87806]
    path.raw,
  • replacement in inflorescence/src/main.rs at line 1373
    [38.50369][43.65104:65168]()
    let file_id = file::log_id_parts_hash(hash, &path);
    [38.50369]
    [38.50433]
    let file_id = file::log_id_parts_hash(hash, &path.raw);
  • edit in inflorescence/src/file.rs at line 4
    [20.1678]
    [32.18688]
    #[allow(unused_imports)]
  • replacement in inflorescence/src/file.rs at line 6
    [32.18720][40.101784:101855]()
    id_hash, id_parts_hash, log_id_parts_hash, Diff, Id, IdHash, Kind,
    [32.18720]
    [32.18823]
    id_hash, id_parts_hash, log_id_parts_hash, Diff, Id, IdHash, Kind, Path,
  • replacement in inflorescence/src/file.rs at line 185
    [14.6110][14.6110:6135]()
    path.push(&id.path);
    [14.6110]
    [52.52]
    path.push(&id.path.raw);