rm unnecessary state from repo's internal state

[?]
May 8, 2025, 10:02 AM
ONRCENKTUB4JJMPXNAQQYEWDYD54TAGOLWH742GF4EH3KTHV7YLQC

Dependencies

  • [2] SWWE2R6M display basic repo stuff
  • [3] UB2ITZJS refresh changed files on FS changes
  • [4] EC3TVL4X add untracked files
  • [5] ELG3UDT6 allow to rm added files
  • [6] W7IUT3ZV start recording impl
  • [7] YBJRDOTC make all repo actions async
  • [8] A5YBC77V record!
  • [9] 4WO3ZJM2 show untracked files' contents
  • [10] W4LFX7IH group diffs by file name
  • [11] AMPZ2BXK show changed files diffs (only Edit atm)
  • [12] NRCUG4R2 load changed files src when selected
  • [13] ZVI4AWER woot contents_diff
  • [14] OQ6HSAWH show record log
  • [15] AHWWRC73 navigate log entries
  • [16] JE44NYHM display log files diffs
  • [17] Y5ATDI2H convert changed file diffs and load src only if any needs it
  • [18] KT5UYXGK fix selection after adding file, add changed file diffs
  • [19] KM5PSZ4A watch repo once loaded
  • [20] V55EAIWQ add src file LRU cache
  • [*] 6YZAVBWU Initial commit

Change contents

  • edit in crates/libflorescence/src/repo.rs at line 45
    [6.130][4.238:281](),[2.425][4.238:281](),[4.281][10.45:82](),[10.82][14.100:118]()
    pub untracked_files: BTreeSet<String>,
    pub changed_files: ChangedFiles,
    pub log: Log,
  • replacement in crates/libflorescence/src/repo.rs at line 144
    [7.587][15.7:28](),[15.28][7.627:670](),[7.627][7.627:670](),[7.670][10.222:259](),[10.259][15.29:47](),[15.47][7.716:723](),[10.259][7.716:723](),[7.716][7.716:723](),[7.723][16.59:135]()
    RefreshedState {
    untracked_files: BTreeSet<String>,
    changed_files: ChangedFiles,
    log: Log,
    },
    LogFileDiff {
    id: LogFileId,
    diffs: ChangedFile,
    },
    [7.587]
    [7.723]
    RefreshedState(State),
    LogFileDiff { id: LogFileId, diffs: ChangedFile },
  • replacement in crates/libflorescence/src/repo.rs at line 172
    [7.1027][7.1027:1098]()
    let mut state = spawn_blocking(move || load(path)).await.unwrap();
    [7.1027]
    [7.1098]
    let (mut internal_state, state) =
    spawn_blocking(move || load(path)).await.unwrap();
  • edit in crates/libflorescence/src/repo.rs at line 175
    [7.1130][7.1130:1343](),[7.1343][14.253:286]()
    let dir_name = dir_name(&state.repo).to_string();
    let channel = current_channel(&state.repo);
    let untracked_files = state.untracked_files.clone();
    let changed_files = state.changed_files.clone();
    let log = state.log.clone();
  • replacement in crates/libflorescence/src/repo.rs at line 176
    [2.530][7.1344:1476](),[7.1476][14.287:300](),[14.300][7.1476:1485](),[7.1476][7.1476:1485]()
    let _ = msg_out_tx.send(MsgOut::Init(State {
    dir_name,
    channel,
    untracked_files,
    changed_files,
    log,
    }));
    [2.530]
    [7.1485]
    let _ = msg_out_tx.send(MsgOut::Init(state));
  • replacement in crates/libflorescence/src/repo.rs at line 180
    [8.647][8.647:702]()
    state = update(state, msg, &msg_out_tx).await;
    [8.647]
    [2.589]
    internal_state = update(internal_state, msg, &msg_out_tx).await;
  • replacement in crates/libflorescence/src/repo.rs at line 185
    [8.720][7.1722:1752](),[7.1722][7.1722:1752]()
    mut state: InternalState,
    [8.720]
    [7.1752]
    mut internal_state: InternalState,
  • replacement in crates/libflorescence/src/repo.rs at line 191
    [7.1911][7.1911:2015]()
    state = spawn_blocking(move || {
    refresh(&mut state);
    state
    [7.1911]
    [7.2015]
    let state: State;
    (internal_state, state) = spawn_blocking(move || {
    let state = get_state(&internal_state);
    (internal_state, state)
  • replacement in crates/libflorescence/src/repo.rs at line 198
    [7.2072][7.2072:2198](),[7.2198][15.82:285]()
    let untracked_files = state.untracked_files.clone();
    let changed_files = state.changed_files.clone();
    let log = state.log.clone();
    let _ = msg_out_tx.send(MsgOut::RefreshedState {
    untracked_files,
    changed_files,
    log,
    });
    [7.2072]
    [7.2386]
    let _ = msg_out_tx.send(MsgOut::RefreshedState(state));
  • replacement in crates/libflorescence/src/repo.rs at line 201
    [7.2442][7.2442:2549]()
    state = spawn_blocking(move || {
    add(&mut state, &path);
    state
    [7.2442]
    [7.2549]
    internal_state = spawn_blocking(move || {
    add(&mut internal_state, &path);
    internal_state
  • replacement in crates/libflorescence/src/repo.rs at line 209
    [7.2657][7.2657:2763]()
    state = spawn_blocking(move || {
    rm(&mut state, &path);
    state
    [7.2657]
    [7.2763]
    internal_state = spawn_blocking(move || {
    rm(&mut internal_state, &path);
    internal_state
  • replacement in crates/libflorescence/src/repo.rs at line 217
    [8.760][7.2865:2910](),[7.2865][7.2865:2910](),[7.2910][8.761:802](),[8.802][7.2951:2973](),[7.2951][7.2951:2973]()
    state = spawn_blocking(move || {
    record(&state, msg, sk);
    state
    [8.760]
    [16.264]
    internal_state = spawn_blocking(move || {
    record(&internal_state, msg, sk);
    internal_state
  • replacement in crates/libflorescence/src/repo.rs at line 227
    [16.471][16.471:628]()
    (state, diffs) = spawn_blocking(move || {
    let change =
    state.repo.changes.get_change(&change_hash).unwrap();
    [16.471]
    [16.628]
    (internal_state, diffs) = spawn_blocking(move || {
    let change = internal_state
    .repo
    .changes
    .get_change(&change_hash)
    .unwrap();
  • replacement in crates/libflorescence/src/repo.rs at line 234
    [16.668][16.668:733]()
    changed_files(&change, &state.repo.changes);
    [16.668]
    [16.733]
    changed_files(&change, &internal_state.repo.changes);
  • replacement in crates/libflorescence/src/repo.rs at line 236
    [16.799][16.799:830]()
    (state, diffs)
    [16.799]
    [7.2973]
    (internal_state, diffs)
  • replacement in crates/libflorescence/src/repo.rs at line 243
    [7.3046][7.3046:3056]()
    state
    [7.3046]
    [7.3056]
    internal_state
  • replacement in crates/libflorescence/src/repo.rs at line 246
    [2.663][7.3059:3101]()
    fn load(path: PathBuf) -> InternalState {
    [2.663]
    [6.151]
    fn load(path: PathBuf) -> (InternalState, State) {
  • replacement in crates/libflorescence/src/repo.rs at line 248
    [6.217][6.217:295]()
    let diff = diff(&repo);
    let untracked_files = untracked_files(&repo);
    [6.217]
    [9.264]
    let internal_state = InternalState { repo };
    let state = get_state(&internal_state);
    (internal_state, state)
    }
    fn get_state(state: &InternalState) -> State {
    // TODO: Optimize by using the notify event info about what file has changed
    let repo = &state.repo;
    let dir_name = dir_name(repo).to_string();
    let channel = current_channel(repo);
    let diff = diff(repo);
    let untracked_files = untracked_files(repo);
  • replacement in crates/libflorescence/src/repo.rs at line 263
    [14.359][14.359:400](),[9.325][7.3102:3122](),[14.400][7.3102:3122](),[2.843][7.3102:3122](),[7.3122][6.296:310](),[2.855][6.296:310]()
    let log = log(&repo, offset, limit);
    InternalState {
    repo,
    [14.359]
    [4.334]
    let log = log(repo, offset, limit);
    State {
    dir_name,
    channel,
  • edit in crates/libflorescence/src/repo.rs at line 273
    [3.10][7.3123:3163](),[7.3163][4.360:441](),[3.46][4.360:441](),[4.441][5.19:71](),[5.71][3.46:74](),[4.494][3.46:74](),[3.46][3.46:74](),[3.74][9.326:395](),[3.161][2.899:902](),[9.395][2.899:902](),[4.543][2.899:902](),[2.899][2.899:902]()
    fn refresh(state: &mut InternalState) {
    // TODO: Optimize by using the notify event info about what file has changed
    state.untracked_files = untracked_files(state);
    let diff = diff(state);
    state.changed_files = changed_files(&diff, &state.repo.changes);
    }
  • replacement in crates/inflorescence/src/main.rs at line 1149
    [7.14967][15.9673:9712](),[15.9712][7.15025:15081](),[7.15025][7.15025:15081](),[7.15081][15.9713:9730](),[15.9730][7.15081:15096](),[7.15081][7.15081:15096](),[11.2910][7.15096:15249](),[7.15096][7.15096:15249](),[7.15249][15.9731:9759]()
    repo::MsgOut::RefreshedState {
    untracked_files,
    changed_files,
    log,
    } => {
    let repo = state.repo.as_mut().unwrap();
    repo.untracked_files = untracked_files;
    repo.changed_files = changed_files;
    repo.log = log;
    [7.14967]
    [13.13968]
    repo::MsgOut::RefreshedState(repo_state) => {
    let repo::State {
    dir_name: _,
    channel: _,
    untracked_files,
    changed_files,
    log,
    } = &repo_state;
  • replacement in crates/inflorescence/src/main.rs at line 1160
    [7.15291][16.13012:13081]()
    if let Some(selection) = state.cursor.selection.take() {
    [7.15291]
    [7.15362]
    let task = if let Some(selection) = state.cursor.selection.take() {
  • replacement in crates/inflorescence/src/main.rs at line 1178
    [9.7649][16.13141:13231]()
    let selection = repo
    .untracked_files
    [9.7649]
    [9.7694]
    let selection = untracked_files
  • replacement in crates/inflorescence/src/main.rs at line 1196
    [13.14692][16.13482:13559]()
    if let Some(diffs) = repo.changed_files.get(&path) {
    [13.14692]
    [13.14768]
    if let Some(diffs) = changed_files.get(&path) {
  • replacement in crates/inflorescence/src/main.rs at line 1209
    [12.3993][16.13560:13648]()
    let selection = repo
    .changed_files
    [12.3993]
    [12.4036]
    let selection = changed_files
  • replacement in crates/inflorescence/src/main.rs at line 1230
    [16.13987][16.13987:14079]()
    let (selection, task) = match repo
    .log
    [16.13987]
    [16.14079]
    let (selection, task) = match log
  • replacement in crates/inflorescence/src/main.rs at line 1282
    [16.15927][7.16426:16440](),[7.16426][7.16426:16440]()
    }
    [16.15927]
    [16.15928]
    };
    state.repo = Some(repo_state);
    task