unify diffs handling, simplify view

[?]
Jul 5, 2025, 9:07 AM
KEPKF3WO7ZZ2VB2DRVVTWTGPL7TCA52BMYUPHUNUJH6WO3HAT6JQC

Dependencies

Change contents

  • replacement in libflorescence/src/repo.rs at line 175
    [3.204][3.204:238]()
    pub change_hash: pijul::Hash,
    [3.204]
    [3.238]
    /// Hash of the log change
    pub hash: pijul::Hash,
  • replacement in inflorescence_view/src/diff.rs at line 28
    [4.3469][7.6348:6446]()
    pub fn view<'a>(
    state: Option<&'a State>,
    file: &'a File,
    ) -> Element<'a, Msg, Theme> {
    [4.2803]
    [4.3549]
    pub fn view<'a>(state: &'a State, file: &'a File) -> Element<'a, Msg, Theme> {
  • replacement in inflorescence_view/src/diff.rs at line 38
    [4.3893][13.573:603]()
    state: Option<&'a State>,
    [4.3893]
    [4.3924]
    state: &'a State,
  • replacement in inflorescence_view/src/diff.rs at line 90
    [4.5499][13.604:691]()
    let sections = if let Some(nav) = state.and_then(|state| state.nav.as_ref())
    {
    [4.5499]
    [14.26]
    let sections = if let Some(nav) = state.nav.as_ref() {
  • replacement in inflorescence_view/src/diff.rs at line 115
    [4.5900][13.1079:1109]()
    state: Option<&'a State>,
    [4.5900]
    [4.5931]
    state: &'a State,
  • replacement in inflorescence_view/src/diff.rs at line 133
    [4.6315][13.1335:1403]()
    if let Some(nav) = state.and_then(|state| state.nav.as_ref()) {
    [4.6315]
    [15.178]
    if let Some(nav) = state.nav.as_ref() {
  • replacement in inflorescence_view/src/app.rs at line 30
    [4.12939][15.321:553]()
    /// State of selected untracked of changed file, if any
    pub selected_diff: Option<&'a diff::State>,
    /// Diff and state of selected log's file, if any
    pub selected_log_diff: Option<(&'a diff::File, &'a diff::State)>,
    [4.12939]
    [4.12996]
    /// Diff and state of selected log's file (untracked, changed or from a
    /// log), if any
    pub selected_diff: Option<(&'a diff::File, &'a diff::State)>,
  • replacement in inflorescence_view/src/app.rs at line 60
    [4.15467][4.15467:15487]()
    pub fn view<'a, F>(
    [4.15467]
    [4.15487]
    pub fn view<'a>(
  • replacement in inflorescence_view/src/app.rs at line 63
    [4.15537][4.15537:15559](),[4.15559][7.7727:7756](),[7.7756][4.15581:15637](),[4.15581][4.15581:15637]()
    get_file_diff: F,
    ) -> Element<'a, Msg, Theme>
    where
    F: Fn(&file::Id) -> Option<&'a file::Diff>,
    {
    [4.15537]
    [8.2689]
    ) -> Element<'a, Msg, Theme> {
  • replacement in inflorescence_view/src/app.rs at line 65
    [8.2747][11.28:75]()
    view_repo(&state, repo, get_file_diff)
    [8.2747]
    [11.75]
    view_repo(&state, repo)
  • replacement in inflorescence_view/src/app.rs at line 75
    [4.15950][11.258:279]()
    fn view_repo<'a, F>(
    [4.15950]
    [11.279]
    fn view_repo<'a>(
  • replacement in inflorescence_view/src/app.rs at line 78
    [11.329][11.329:436]()
    get_file_diff: F,
    ) -> Element<'a, Msg, Theme>
    where
    F: Fn(&file::Id) -> Option<&'a file::Diff>,
    {
    [11.329]
    [11.436]
    ) -> Element<'a, Msg, Theme> {
  • replacement in inflorescence_view/src/app.rs at line 174
    [11.1802][11.1802:1905](),[11.1905][15.554:629]()
    let diffs = match get_file_diff(&id) {
    Some(file::Diff::Loaded(file)) => {
    diff::view(state.selected_diff, file).map(move |msg| {
    [11.1802]
    [11.2046]
    let diffs = match state.selected_diff {
    Some((file, state)) => {
    diff::view(state, file).map(move |msg| {
  • replacement in inflorescence_view/src/app.rs at line 183
    [11.2253][11.2253:2334]()
    None | Some(file::Diff::Loading) => el(text("Loading diff...")),
    [11.2253]
    [11.2334]
    None => el(text("Loading diff...")),
  • replacement in inflorescence_view/src/app.rs at line 197
    [11.2743][11.2743:2846](),[11.2846][15.630:705]()
    let diffs = match get_file_diff(&id) {
    Some(file::Diff::Loaded(file)) => {
    diff::view(state.selected_diff, file).map(move |msg| {
    [11.2743]
    [11.2987]
    let diffs = match state.selected_diff {
    Some((file, state)) => {
    diff::view(state, file).map(move |msg| {
  • replacement in inflorescence_view/src/app.rs at line 206
    [11.3194][11.3194:3275]()
    None | Some(file::Diff::Loading) => el(text("Loading diff...")),
    [11.3194]
    [11.3275]
    None => el(text("Loading diff...")),
  • replacement in inflorescence_view/src/app.rs at line 298
    [12.2381][15.706:1400]()
    let col_2 =
    match state.cursor.selection.as_ref() {
    Some(cursor::Selection::LogChange {
    ix: _,
    hash,
    message: _,
    file: Some(cursor::LogChangeFileSelection { ix: _, path }),
    }) => Some(el(column([
    el(column([
    view_diff_header(format!(
    "{path} changes in {}:",
    display_short_hash(hash)
    )),
    match state.selected_log_diff {
    Some((file, state)) => diff::view(Some(state), file)
    .map(|action| Msg::LogChangeFileDiffAction {
    [12.2381]
    [12.2887]
    let col_2 = match state.cursor.selection.as_ref() {
    Some(cursor::Selection::LogChange {
    ix: _,
    hash,
    message: _,
    file: Some(cursor::LogChangeFileSelection { ix: _, path }),
    }) => Some(el(column([
    el(column([
    view_diff_header(format!(
    "{path} changes in {}:",
    display_short_hash(hash)
    )),
    match state.selected_diff {
    Some((file, state)) => {
    diff::view(state, file).map(|action| {
    Msg::LogChangeFileDiffAction {
  • replacement in inflorescence_view/src/app.rs at line 317
    [12.3024][15.1401:2072]()
    }),
    None => el(text("Loading diff..")),
    },
    ])
    .width(Length::Fill)
    .height(Length::Fill)
    .spacing(SPACING)),
    // NOTE: This is currently never true - there are only up to 3
    // cols
    if hidden_cols == 2 {
    el(button(row([
    el(text("← ").font(Font::MONOSPACE)),
    el(text("Log")),
    ]))
    .on_press(Msg::Cursor(cursor::Msg::Left)))
    } else {
    el(row([]))
    [12.3024]
    [12.3159]
    }
    })
    }
    None => el(text("Loading diff..")),
  • replacement in inflorescence_view/src/app.rs at line 325
    [12.3213][15.2073:2106]()
    .spacing(SPACING))),
    [12.3213]
    [4.24109]
    .spacing(SPACING)),
    // NOTE: This is currently never true - there are only up to 3
    // cols
    if hidden_cols == 2 {
    el(button(row([
    el(text("← ").font(Font::MONOSPACE)),
    el(text("Log")),
    ]))
    .on_press(Msg::Cursor(cursor::Msg::Left)))
    } else {
    el(row([]))
    },
    ])
    .width(Length::Fill)
    .height(Length::Fill)
    .spacing(SPACING))),
  • replacement in inflorescence_view/src/app.rs at line 342
    [4.24110][15.2107:2318]()
    Some(cursor::Selection::UntrackedFile { .. })
    | Some(cursor::Selection::ChangedFile { .. })
    | Some(cursor::Selection::LogChange { .. })
    | None => None,
    };
    [4.24110]
    [4.24230]
    Some(cursor::Selection::UntrackedFile { .. })
    | Some(cursor::Selection::ChangedFile { .. })
    | Some(cursor::Selection::LogChange { .. })
    | None => None,
    };
  • replacement in inflorescence_view/src/app/test.rs at line 1
    [5.4223][5.4224:4264]()
    use super::{cursor, file, view, State};
    [5.4223]
    [9.932]
    use super::{cursor, view, State};
  • edit in inflorescence_view/src/app/test.rs at line 34
    [5.4917][5.4917:4953]()
    let diff = file::Diff::Loading;
  • edit in inflorescence_view/src/app/test.rs at line 42
    [15.2387][15.2387:2420]()
    selected_log_diff: None,
  • replacement in inflorescence_view/src/app/test.rs at line 43
    [5.5146][5.5146:5274]()
    test_view(
    &mut results,
    uniq_name,
    view(state, window_id, |_id| Some(&diff)),
    size,
    );
    [5.5146]
    [5.5274]
    test_view(&mut results, uniq_name, view(state, window_id), size);
  • edit in inflorescence_view/src/app/test.rs at line 63
    [15.2450][15.2450:2483]()
    selected_log_diff: None,
  • replacement in inflorescence_view/src/app/test.rs at line 64
    [6.296][6.296:424]()
    test_view(
    &mut results,
    uniq_name,
    view(state, window_id, |_id| Some(&diff)),
    size,
    );
    [6.296]
    [6.424]
    test_view(&mut results, uniq_name, view(state, window_id), size);
  • edit in inflorescence_view/src/app/test.rs at line 97
    [15.2513][15.2513:2546]()
    selected_log_diff: None,
  • replacement in inflorescence_view/src/app/test.rs at line 98
    [7.8467][7.8467:8482](),[7.8482][9.1027:1140]()
    test_view(
    &mut results,
    uniq_name,
    view(state, window_id, |_id| Some(&diff)),
    size,
    );
    [7.8467]
    [9.1140]
    test_view(&mut results, uniq_name, view(state, window_id), size);
  • edit in inflorescence_view/src/app/test.rs at line 111
    [15.2576][15.2576:2609]()
    selected_log_diff: None,
  • replacement in inflorescence_view/src/app/test.rs at line 115
    [7.8523][7.8523:8574]()
    view(state, window_id, |_id| Some(&diff)),
    [7.8523]
    [7.8574]
    view(state, window_id),
  • edit in inflorescence_view/src/app/test.rs at line 140
    [15.2639][15.2639:2672]()
    selected_log_diff: None,
  • replacement in inflorescence_view/src/app/test.rs at line 141
    [5.5829][5.5829:5957]()
    test_view(
    &mut results,
    uniq_name,
    view(state, window_id, |_id| Some(&diff)),
    size,
    );
    [5.5829]
    [5.5957]
    test_view(&mut results, uniq_name, view(state, window_id), size);
  • replacement in inflorescence/src/main.rs at line 124
    [15.3200][15.3200:3248]()
    log_diffs: HashMap<LogFileId, LogFileDiff>,
    [15.3200]
    [2.1025]
    log_diffs: HashMap<repo::LogFileId, LogFileDiff>,
  • edit in inflorescence/src/main.rs at line 150
    [15.3252][15.3252:3368]()
    #[derive(Debug, Clone, PartialEq, Eq, Hash)]
    struct LogFileId {
    pub hash: pijul::Hash,
    pub path: String,
    }
  • replacement in inflorescence/src/main.rs at line 211
    [13.3799][13.3799:3874]()
    if let Some(inflorescence_view::cursor::Selection::LogChange {
    [13.3799]
    [13.3874]
    if let Some(cursor::Selection::LogChange {
  • replacement in inflorescence/src/main.rs at line 219
    [13.4132][15.3681:3722]()
    let id = LogFileId {
    [13.4132]
    [15.3722]
    let id = repo::LogFileId {
  • replacement in inflorescence/src/main.rs at line 527
    [10.7740][15.4405:4438]()
    let id = LogFileId {
    [10.7740]
    [15.4438]
    let id = repo::LogFileId {
  • replacement in inflorescence/src/main.rs at line 754
    [15.5667][15.5667:5718]()
    let id = LogFileId { hash, path };
    [15.5667]
    [15.5718]
    let id = repo::LogFileId { hash, path };
  • replacement in inflorescence/src/main.rs at line 850
    [15.6509][15.6509:6542]()
    diffs_state.get(&id)
    [15.6509]
    [15.6542]
    let file = files.diffs_cache.inner.peek(&id);
    match file {
    Some(file::Diff::Loaded(file)) => {
    diffs_state.get(&id).map(|state| (file, state))
    }
    Some(file::Diff::Loading) | None => None,
    }
  • replacement in inflorescence/src/main.rs at line 863
    [15.6749][15.6749:6782]()
    diffs_state.get(&id)
    [15.6749]
    [15.6782]
    let file = files.diffs_cache.inner.peek(&id);
    match file {
    Some(file::Diff::Loaded(file)) => {
    diffs_state.get(&id).map(|state| (file, state))
    }
    Some(file::Diff::Loading) | None => None,
    }
  • edit in inflorescence/src/main.rs at line 871
    [15.6792][15.6792:6934]()
    Some(cursor::Selection::LogChange { .. }) | None => None,
    };
    let selected_log_diff = match state.cursor.selection.as_ref() {
  • replacement in inflorescence/src/main.rs at line 877
    [15.7127][15.7127:7160]()
    let id = LogFileId {
    [15.7127]
    [15.7160]
    let id = repo::LogFileId {
  • replacement in inflorescence/src/main.rs at line 883
    [15.7288][15.7288:7354]()
    .map(|LogFileDiff { diff, state }| (diff, state))
    [15.7288]
    [15.7354]
    .map(|LogFileDiff { diff: file, state }| (file, state))
  • replacement in inflorescence/src/main.rs at line 885
    [15.7364][15.7364:7383]()
    _ => None,
    [15.7364]
    [15.7383]
    Some(cursor::Selection::LogChange { file: None, .. }) | None => None,
  • edit in inflorescence/src/main.rs at line 896
    [15.7419][15.7419:7450]()
    selected_log_diff,
  • edit in inflorescence/src/main.rs at line 898
    [4.28944][4.28944:28991]()
    |id| files.diffs_cache.inner.peek(id),