add option to select remote for pull

tzemanovic
Mar 31, 2026, 10:57 AM
VQ3THWJJWXPH77ZYMYKNLUGUYBMYAOWOW2EJ5VYSF7WGUKQXVCVQC

Dependencies

  • [2] ZD56BUSU add back +/- bg colors
  • [3] A6Z4O6RC actions menu
  • [4] 5ZRDYL6K fork channel, fix recording esc key
  • [5] WAOGSCOJ very nice refactor, wip adding channels logs
  • [6] EJPSD5XO shared allowed actions conditions between update and view
  • [7] 7WCB5YQJ refactor msgs and modules
  • [8] LFEMJYYD start of to_record selection
  • [9] ODCT4QJN add pull
  • [10] UTDTZCTX pull+push status, add info reports
  • [11] TEDT26JQ add push and pull sub-menus
  • [12] BJ3CYLUT allow to reset changed file
  • [13] YRGDFHAB project dir picker
  • [14] LPSUBGUB add projects picker
  • [15] 5BAPU7K6 dir picker key navigation
  • [16] TMDH7GPV dir picker scrollables handling + confirmation
  • [17] T4UECD3S picking projects key nav and scrollable
  • [18] J3AD2D2J improve push and pull keys
  • [19] BGOQFXP7 update pijul
  • [20] L3COZCOY improve error messages
  • [21] IOXNOVX2 allow to initiate a new repo
  • [22] XQDYES5M add support for git import
  • [23] YVPFT7XI show error traces
  • [24] 6E6MSENZ allow to add untracked files recursively
  • [25] E7HE2UFT handle multiple or no pijul identity
  • [26] DNTMUCMO allow to compare local with remote records
  • [27] O46EFE5J add option to select remote for push
  • [28] YGZ3VCW4 add push
  • [29] IMJQ4PML fix and refactor action bindings
  • [30] YK3MOJJL chonky refactor, wip other channels logs & diffs
  • [31] JZXYSIYD channel selection!
  • [32] PKLUHYE4 allow to copy change hash
  • [*] SWWE2R6M display basic repo stuff
  • [*] 23SFYK4Q big view refactor into a new crate
  • [*] OPXFZKEB view tests setup
  • [*] MYGIBRRH wip custom theme
  • [*] 6YZAVBWU Initial commit

Change contents

  • edit in libflorescence/src/repo.rs at line 150
    [10.61]
    [10.61]
    remote: String,
  • edit in libflorescence/src/repo.rs at line 199
    [10.198]
    [10.198]
    remote: String,
  • replacement in libflorescence/src/repo.rs at line 603
    [9.142][10.696:875]()
    MsgIn::Pull { channel } => {
    let result = pull(&internal_state.path, &channel).await;
    let _ = msg_out_tx.send(MsgOut::Pulled { channel, result });
    [9.142]
    [12.53]
    MsgIn::Pull { remote, channel } => {
    let result = pull(&internal_state.path, &remote, &channel).await;
    let _ = msg_out_tx.send(MsgOut::Pulled {
    remote,
    channel,
    result,
    });
  • replacement in libflorescence/src/repo.rs at line 1532
    [9.392][10.1332:1411]()
    async fn pull(repo_path: &Path, channel_name: &str) -> Result<(), PullError> {
    [9.392]
    [9.455]
    async fn pull(
    repo_path: &Path,
    remote_name: &str,
    channel_name: &str,
    ) -> Result<(), PullError> {
  • edit in libflorescence/src/repo.rs at line 1545
    [19.760][19.760:829](),[19.829][9.765:790](),[9.765][9.765:790](),[9.790][10.1615:1663](),[10.1663][9.822:829](),[9.822][9.822:829]()
    let remote_name = if let Some(ref def) = config.default_remote {
    def
    } else {
    return Err(anyhow!("Missing remote"))?;
    };
  • edit in inflorescence_view/src/view.rs at line 47
    [27.521]
    [6.404]
    SubMenuPullSelectRemote(String),
  • replacement in inflorescence_view/src/view.rs at line 72
    [27.662][27.662:686]()
    remote,
    [27.662]
    [27.686]
    remote: _,
    selecting_remote,
  • replacement in inflorescence_view/src/view.rs at line 81
    [27.963][27.963:995]()
    remote,
    [27.963]
    [27.995]
    selecting_remote,
    sub_menu,
    );
    }
    },
    model::SubMenu::Pull {
    opt: Some(opt),
    remote: _,
    selecting_remote,
    } => match opt {
    model::PullOption::SelectingRemote => {
    return pull_selecting_remote(
    state,
    *window_size,
    allowed_actions,
    report,
    selecting_remote,
  • replacement in inflorescence_view/src/view.rs at line 103
    [27.1136][27.1136:1171]()
    | model::SubMenu::Pull
    [27.1136]
    [27.1171]
    | model::SubMenu::Pull { opt: None, .. }
  • edit in inflorescence_view/src/view.rs at line 216
    [27.2024]
    [27.2024]
    false,
  • edit in inflorescence_view/src/view.rs at line 271
    [27.2210]
    [27.2210]
    false,
  • edit in inflorescence_view/src/view.rs at line 302
    [27.2286]
    [13.20367]
    false,
  • edit in inflorescence_view/src/view.rs at line 327
    [27.2313]
    [25.762]
    false,
  • edit in inflorescence_view/src/view.rs at line 351
    [27.2363]
    [25.1218]
    false,
  • edit in inflorescence_view/src/view.rs at line 364
    [27.2397]
    [27.2397]
    state: &'a model::State,
    window_size: iced::Size,
    allowed_actions: &'a [action::Binding],
    report: &'a report::Container,
    remote: &'a Option<String>,
    sub_menu: &'a Option<model::SubMenu>,
    ) -> Element<'a, Msg, Theme> {
    view_selecting_remote(
    state,
    window_size,
    allowed_actions,
    report,
    remote,
    sub_menu,
    Msg::SubMenuPushSelectRemote,
    )
    }
    fn pull_selecting_remote<'a>(
  • edit in inflorescence_view/src/view.rs at line 390
    [27.2639]
    [27.2639]
    view_selecting_remote(
    state,
    window_size,
    allowed_actions,
    report,
    remote,
    sub_menu,
    Msg::SubMenuPullSelectRemote,
    )
    }
    fn view_selecting_remote<'a>(
    state: &'a model::State,
    window_size: iced::Size,
    allowed_actions: &'a [action::Binding],
    report: &'a report::Container,
    remote: &'a Option<String>,
    sub_menu: &'a Option<model::SubMenu>,
    on_select: impl FnOnce(String) -> Msg + Copy + 'static,
    ) -> Element<'a, Msg, Theme> {
  • replacement in inflorescence_view/src/view.rs at line 417
    [27.2908][27.2908:2987]()
    let mut cols = Vec::with_capacity(default.iter().len() + other.len());
    [27.2908]
    [27.2987]
    let mut cols =
    Vec::with_capacity(1 + default.iter().len() + other.len());
    cols.push(view_header("Select remote:"));
  • replacement in inflorescence_view/src/view.rs at line 422
    [27.3081][27.3081:3159]()
    .on_press_with(|| Msg::SubMenuPushSelectRemote(name.clone()))
    [27.3081]
    [27.3159]
    .on_press_with(move || on_select(name.clone()))
  • edit in inflorescence_view/src/view.rs at line 443
    [27.3640]
    [27.3640]
    false,
  • edit in inflorescence_view/src/view.rs at line 476
    [27.3689]
    [13.20736]
    force_highlight_actions: bool,
  • edit in inflorescence_view/src/view.rs at line 484
    [27.3872]
    [27.3872]
    opt: _,
    remote: Some(remote),
    selecting_remote: _,
    } => {
    actions_inner =
    actions_inner.push(el(text(format!("Remote: {remote}"))));
    }
    model::SubMenu::Pull {
  • edit in inflorescence_view/src/view.rs at line 494
    [27.3934]
    [27.3934]
    selecting_remote: _,
  • replacement in inflorescence_view/src/view.rs at line 500
    [27.4132][27.4132:4167]()
    | model::SubMenu::Pull
    [27.4132]
    [27.4167]
    | model::SubMenu::Pull { remote: None, .. }
  • edit in inflorescence_view/src/view.rs at line 509
    [27.4421]
    [13.20847]
    let highlight_actions = force_highlight_actions || sub_menu.is_some();
  • replacement in inflorescence_view/src/view.rs at line 512
    [13.20968][13.20968:21012]()
    .class(theme::Container::ActionsBg)
    [13.20968]
    [13.21012]
    .class(if highlight_actions {
    theme::Container::ActionsHighlightBg
    } else {
    theme::Container::ActionsBg
    })
  • edit in inflorescence_view/src/view.rs at line 1900
    [10.3499]
    [5.20014]
    let mut force_highlight_actions = false;
  • edit in inflorescence_view/src/view.rs at line 1904
    [6.2604]
    [4.3532]
    force_highlight_actions = true;
  • edit in inflorescence_view/src/view.rs at line 1924
    [27.4483]
    [13.21407]
    force_highlight_actions,
  • replacement in inflorescence_view/src/view.rs at line 2048
    [10.4262][10.4262:4297]()
    Job::Pull { channel } => {
    [10.4262]
    [10.4297]
    Job::Pull { remote, channel } => {
  • replacement in inflorescence_view/src/view.rs at line 2050
    [10.4341][10.4341:4377]()
    el(text("Pulling"))
    [10.4341]
    [10.4377]
    el(text(format!("Pulling from remote {remote}")))
  • replacement in inflorescence_view/src/view.rs at line 2052
    [10.4398][10.4398:4453]()
    el(text(format!("Pulling {channel}")))
    [10.4398]
    [10.4453]
    el(text(format!(
    "Pulling from remote {remote}, channel {channel}"
    )))
  • edit in inflorescence_view/src/view/test.rs at line 329
    [27.4770]
    [27.4770]
    selecting_remote: None,
  • edit in inflorescence_view/src/theme.rs at line 105
    [3.102]
    [2.163]
    ActionsHighlightBg,
  • edit in inflorescence_view/src/theme.rs at line 282
    [3.247]
    [2.200]
    Container::ActionsHighlightBg => container::Style {
    background: Some(Background::Color(MAGENTA_DARKEST)),
    ..default()
    },
  • edit in inflorescence_model/src/model.rs at line 85
    [27.4833]
    [27.4833]
    /// Confirmed remote
  • edit in inflorescence_model/src/model.rs at line 87
    [27.4865]
    [27.4865]
    /// Set while selecting remote and discarded on cancel
    selecting_remote: Option<String>,
  • replacement in inflorescence_model/src/model.rs at line 91
    [27.4905][11.531958:531968](),[11.531958][11.531958:531968]()
    Pull,
    [27.4905]
    [12.1812]
    Pull {
    /// Confirmed remote
    remote: Option<String>,
    /// Set while selecting remote and discarded on cancel
    selecting_remote: Option<String>,
    opt: Option<PullOption>,
    },
  • edit in inflorescence_model/src/model.rs at line 119
    [11.531971]
    [7.4338]
    #[derive(Clone, Debug, PartialEq, Eq, Hash)]
    pub enum PullOption {
    SelectingRemote,
    }
  • replacement in inflorescence_model/src/model.rs at line 251
    [10.5258][10.5258:5288]()
    Pull { channel: String },
    [10.5258]
    [27.4998]
    Pull { remote: String, channel: String },
  • edit in inflorescence_model/src/action.rs at line 59
    [27.5091]
    [25.2285]
    SubMenuPullOption(model::PullOption),
  • edit in inflorescence_model/src/action.rs at line 126
    [27.5311]
    [25.2306]
    (SubMenuPullOption(left), SubMenuPullOption(right)) => left == right,
  • edit in inflorescence_model/src/action.rs at line 150
    [27.5356]
    [25.2357]
    (SubMenuPullOption(_), _) => false,
  • replacement in inflorescence_model/src/action.rs at line 198
    [11.532243][27.5357:5414]()
    model::SubMenu::Push { remote: _, opt } => {
    [11.532243]
    [27.5414]
    model::SubMenu::Push {
    remote: _,
    selecting_remote: _,
    opt,
    } => {
  • edit in inflorescence_model/src/action.rs at line 220
    [27.6177]
    [27.6177]
    select_remote(Some(FilteredMsg::SubMenuPushOption(
    model::PushOption::SelectingRemote,
    ))),
    cancel(),
    ]
    } else {
    vec![
    confirm("confirm remote selection"),
    down(),
    up(),
    cancel(),
    ]
    }
    }
    model::SubMenu::Pull {
    remote: _,
    selecting_remote: _,
    opt,
    } => {
    if opt.is_none() {
    vec![
  • replacement in inflorescence_model/src/action.rs at line 242
    [27.6211][27.6211:6375](),[27.6375][18.44066:44116](),[18.44066][18.44066:44116](),[18.44116][27.6376:6630]()
    keys_str: "r",
    keys: ModKeys::One(ModKey {
    key: Key::Character("r".into()),
    mods: Mods::NONE,
    }),
    label: "select remote",
    msg: Some(FilteredMsg::SubMenuPushOption(
    model::PushOption::SelectingRemote,
    )),
    [27.6211]
    [27.6630]
    keys_str: "Enter | S-f",
    keys: ModKeys::Two(
    ModKey {
    key: Key::Named(Named::Enter),
    mods: Mods::NONE,
    },
    ModKey {
    key: Key::Character("f".into()),
    mods: Mods::SHIFT,
    },
    ),
    label: "confirm pull",
    msg: Some(FilteredMsg::Confirm),
  • edit in inflorescence_model/src/action.rs at line 256
    [27.6657]
    [27.6657]
    select_remote(Some(FilteredMsg::SubMenuPullOption(
    model::PullOption::SelectingRemote,
    ))),
  • edit in inflorescence_model/src/action.rs at line 269
    [27.6961][11.532373:532461](),[18.44533][11.532373:532461](),[11.532373][11.532373:532461](),[11.532461][18.44534:45246]()
    }
    model::SubMenu::Pull => {
    // TODO add options
    vec![
    Binding {
    keys_str: "Enter | S-f",
    keys: ModKeys::Two(
    ModKey {
    key: Key::Named(Named::Enter),
    mods: Mods::NONE,
    },
    ModKey {
    key: Key::Character("f".into()),
    mods: Mods::SHIFT,
    },
    ),
    label: "confirm pull",
    msg: Some(FilteredMsg::Confirm),
    },
    cancel(),
    ]
  • edit in inflorescence_model/src/action.rs at line 791
    [27.7098]
    [27.7098]
    selecting_remote: None,
  • replacement in inflorescence_model/src/action.rs at line 805
    [16.1204][16.1204:1307]()
    msg: can_pull
    .then_some(FilteredMsg::EnterSubMenu(model::SubMenu::Pull)),
    [16.1204]
    [26.20302]
    msg: can_pull.then_some(FilteredMsg::EnterSubMenu(
    model::SubMenu::Pull {
    remote: None,
    selecting_remote: None,
    opt: None,
    },
    )),
  • replacement in inflorescence_model/src/action.rs at line 1251
    [10.6297][27.7165:7205]()
    model::Job::Pull { channel: c }
    [10.6297]
    [27.7205]
    model::Job::Pull {
    remote: _,
    channel: c,
    }
  • edit in inflorescence_model/src/action.rs at line 1694
    [15.5854]
    fn select_remote(msg: Option<FilteredMsg>) -> Binding {
    Binding {
    keys_str: "r",
    keys: ModKeys::One(ModKey {
    key: Key::Character("r".into()),
    mods: Mods::NONE,
    }),
    label: "select remote",
    msg,
    }
    }
  • replacement in inflorescence/src/main.rs at line 471
    [27.7374][27.7374:7447]()
    | action::FilteredMsg::SubMenuPushOption(_) => Task::none(),
    [27.7374]
    [17.4920]
    | action::FilteredMsg::SubMenuPushOption(_)
    | action::FilteredMsg::SubMenuPullOption(_) => Task::none(),
  • replacement in inflorescence/src/main.rs at line 493
    [27.7487][27.7487:7552]()
    | view::Msg::SubMenuPushSelectRemote(_) => Task::none(),
    [27.7487]
    [14.21507]
    | view::Msg::SubMenuPushSelectRemote(_)
    | view::Msg::SubMenuPullSelectRemote(_) => Task::none(),
  • replacement in inflorescence/src/main.rs at line 961
    [27.7605][22.34180:34227](),[22.34180][22.34180:34227]()
    | model::SubMenu::Pull
    [27.7605]
    [24.3051]
    | model::SubMenu::Pull { .. }
  • replacement in inflorescence/src/main.rs at line 1002
    [27.7656][27.7656:7729]()
    | action::FilteredMsg::SubMenuPushOption(_) => Task::none(),
    [27.7656]
    [15.19107]
    | action::FilteredMsg::SubMenuPushOption(_)
    | action::FilteredMsg::SubMenuPullOption(_) => Task::none(),
  • replacement in inflorescence/src/main.rs at line 1020
    [27.7769][27.7769:7834]()
    | view::Msg::SubMenuPushSelectRemote(_) => Task::none(),
    [27.7769]
    [13.3616655]
    | view::Msg::SubMenuPushSelectRemote(_)
    | view::Msg::SubMenuPullSelectRemote(_) => Task::none(),
  • edit in inflorescence/src/main.rs at line 1156
    [27.8017]
    [27.8017]
    *remote = Some(selection);
    }
    Task::none()
    }
    view::Msg::SubMenuPullSelectRemote(selection) => {
    if let Some(model::SubMenu::Pull { remote, .. }) = sub_menu {
  • replacement in inflorescence/src/main.rs at line 1181
    [21.5957][27.8061:8121]()
    Some(model::SubMenu::Push { remote, opt }) => {
    [21.5957]
    [27.8121]
    Some(model::SubMenu::Push {
    remote,
    selecting_remote,
    opt,
    }) => {
  • replacement in inflorescence/src/main.rs at line 1188
    [27.8216][27.8216:8264]()
    remote: remote.clone(),
    [27.8216]
    [27.8264]
    remote: selecting_remote.clone(),
    selecting_remote: None,
  • replacement in inflorescence/src/main.rs at line 1197
    [27.8486][21.6029:6101](),[21.6029][21.6029:6101]()
    Some(model::SubMenu::Pull) => pull(state, model, sub_menu),
    [27.8486]
    [21.6101]
    Some(model::SubMenu::Pull {
    remote,
    selecting_remote,
    opt,
    }) => {
    if opt.is_some() {
    *sub_menu = Some(model::SubMenu::Pull {
    remote: selecting_remote.clone(),
    selecting_remote: None,
    opt: None,
    });
    Task::none()
    } else {
    pull(state, model, sub_menu, report, remote.clone())
    }
    }
  • replacement in inflorescence/src/main.rs at line 1349
    [7.12836][27.8487:8529]()
    if let Some(sub) = sub_menu {
    [7.12836]
    [27.8529]
    if let Some(sub) = sub_menu.take() {
  • replacement in inflorescence/src/main.rs at line 1351
    [27.8557][27.8557:8622]()
    model::SubMenu::Push { remote: _, opt } => {
    [27.8557]
    [27.8622]
    model::SubMenu::Push {
    remote,
    selecting_remote: _,
    opt,
    } => {
  • replacement in inflorescence/src/main.rs at line 1358
    [27.8733][27.8733:8779]()
    remote: None,
    [27.8733]
    [27.8779]
    remote,
    selecting_remote: None,
    opt: None,
    });
    return Task::none();
    }
    }
    model::SubMenu::Pull {
    remote,
    selecting_remote: _,
    opt,
    } => {
    if opt.is_some() {
    *sub_menu = Some(model::SubMenu::Pull {
    remote,
    selecting_remote: None,
  • edit in inflorescence/src/main.rs at line 1376
    [27.8854]
    [27.8854]
    return Task::none();
  • replacement in inflorescence/src/main.rs at line 1379
    [27.8902][27.8902:8993]()
    model::SubMenu::Pull
    | model::SubMenu::ResetChange
    [27.8902]
    [27.8993]
    model::SubMenu::ResetChange
  • edit in inflorescence/src/main.rs at line 1385
    [27.9238][27.9238:9239](),[27.9239][13.3618093:3618127](),[13.3618093][13.3618093:3618127]()
    *sub_menu = None;
  • replacement in inflorescence/src/main.rs at line 1419
    [27.9353][27.9353:9385]()
    remote,
    [27.9353]
    [27.9385]
    remote: _,
    selecting_remote,
  • replacement in inflorescence/src/main.rs at line 1427
    [27.9660][27.9660:9716]()
    msg, remote, opt, repo,
    [27.9660]
    [27.9716]
    msg,
    selecting_remote,
    opt,
    repo,
    );
    }
    }
    model::SubMenu::Pull {
    remote: _,
    selecting_remote,
    opt: Some(opt),
    } => {
    if let Some(ReadyState { repo, .. }) =
    model::is_ready_mut(model)
    {
    return sub_menu_pull_opt_selection(
    msg,
    selecting_remote,
    opt,
    repo,
  • replacement in inflorescence/src/main.rs at line 1451
    [27.9843][27.9843:9886]()
    | model::SubMenu::Pull
    [27.9843]
    [27.9886]
    | model::SubMenu::Pull { .. }
  • replacement in inflorescence/src/main.rs at line 1656
    [27.10293][27.10293:10364]()
    if let Some(model::SubMenu::Push { opt, .. }) = sub_menu {
    [27.10293]
    [27.10364]
    if let Some(model::SubMenu::Push {
    opt,
    remote,
    selecting_remote,
    }) = sub_menu
    {
    match &new_opt {
    model::PushOption::SelectingRemote => {
    *selecting_remote = remote.clone();
    }
    }
  • edit in inflorescence/src/main.rs at line 1671
    [8.18195]
    [25.12604]
    action::FilteredMsg::SubMenuPullOption(new_opt) => {
    if let Some(model::SubMenu::Pull {
    opt,
    remote,
    selecting_remote,
    }) = sub_menu
    {
    match &new_opt {
    model::PullOption::SelectingRemote => {
    *selecting_remote = remote.clone();
    }
    }
    *opt = Some(new_opt);
    }
    Task::none()
    }
  • replacement in inflorescence/src/main.rs at line 1849
    [27.10646][27.10646:10709]()
    let names: Vec<_> = default.iter().chain(other).collect();
    [27.10646]
    [27.10709]
    let remote_names: Vec<_> = default.iter().chain(other).collect();
  • replacement in inflorescence/src/main.rs at line 1851
    [27.10725][27.10725:11431]()
    model::PushOption::SelectingRemote => match msg {
    selection::Msg::PressDir(dir) => match dir {
    selection::Dir::Down => {
    if let Some(current) = remote {
    let ix =
    names.iter().enumerate().find_map(|(ix, name)| {
    (*name == current).then_some(ix)
    });
    if let Some(ix) = ix
    && ix < names.len().saturating_sub(1)
    {
    *remote = names.into_iter().nth(ix + 1).cloned();
    return Task::none();
    }
    [27.10725]
    [27.11431]
    model::PushOption::SelectingRemote => {
    remote_selection(msg, remote, remote_names)
    }
    }
    }
    fn sub_menu_pull_opt_selection(
    msg: selection::Msg,
    remote: &mut Option<String>,
    opt: &mut model::PullOption,
    repo: &mut repo::State,
    ) -> Task<Msg> {
    let repo::Remotes { default, other } = &repo.remotes;
    let remote_names: Vec<_> = default.iter().chain(other).collect();
    match opt {
    model::PullOption::SelectingRemote => {
    remote_selection(msg, remote, remote_names)
    }
    }
    }
    fn remote_selection(
    msg: selection::Msg,
    remote: &mut Option<String>,
    remote_names: Vec<&String>,
    ) -> Task<Msg> {
    match msg {
    selection::Msg::PressDir(dir) => match dir {
    selection::Dir::Down => {
    if let Some(current) = remote {
    let ix = remote_names.iter().enumerate().find_map(
    |(ix, name)| (*name == current).then_some(ix),
    );
    if let Some(ix) = ix
    && ix < remote_names.len().saturating_sub(1)
    {
    *remote = remote_names.into_iter().nth(ix + 1).cloned();
    return Task::none();
  • edit in inflorescence/src/main.rs at line 1890
    [27.11453][27.11453:11518]()
    *remote = names.into_iter().next().cloned();
  • replacement in inflorescence/src/main.rs at line 1891
    [27.11536][27.11536:12097]()
    selection::Dir::Up => {
    if let Some(current) = remote {
    let ix =
    names.iter().enumerate().find_map(|(ix, name)| {
    (*name == current).then_some(ix)
    });
    if let Some(ix) = ix
    && ix > 0
    {
    *remote = names.into_iter().nth(ix - 1).cloned();
    return Task::none();
    }
    [27.11536]
    [27.12097]
    *remote = remote_names.into_iter().next().cloned();
    }
    selection::Dir::Up => {
    if let Some(current) = remote {
    let ix = remote_names.iter().enumerate().find_map(
    |(ix, name)| (*name == current).then_some(ix),
    );
    if let Some(ix) = ix
    && ix > 0
    {
    *remote = remote_names.into_iter().nth(ix - 1).cloned();
    return Task::none();
  • edit in inflorescence/src/main.rs at line 1904
    [27.12119][27.12119:12189]()
    *remote = names.into_iter().next_back().cloned();
  • replacement in inflorescence/src/main.rs at line 1905
    [27.12207][27.12207:12338]()
    selection::Dir::Right | selection::Dir::Left => {}
    },
    selection::Msg::AltPressDir(_) => {}
    [27.12207]
    [27.12338]
    *remote = remote_names.into_iter().next_back().cloned();
    }
    selection::Dir::Right | selection::Dir::Left => {}
  • edit in inflorescence/src/main.rs at line 1909
    [27.12349]
    [27.12349]
    selection::Msg::AltPressDir(_) => {}
  • edit in inflorescence/src/main.rs at line 1966
    [13.3619766]
    [21.8113]
    report: &mut report::Container,
    remote: Option<String>,
  • replacement in inflorescence/src/main.rs at line 1970
    [13.3619873][11.534900:535070](),[11.534900][11.534900:535070]()
    jobs.insert(model::Job::Pull {
    channel: repo.channel.clone(),
    });
    state
    .repo_tx_in
    .send(repo::MsgIn::Pull {
    [13.3619873]
    [11.535070]
    if let Some(remote) =
    remote.clone().or_else(|| repo.remotes.default.clone())
    {
    jobs.insert(model::Job::Pull {
    remote: remote.clone(),
  • replacement in inflorescence/src/main.rs at line 1976
    [11.535117][11.535117:535155]()
    })
    .unwrap();
    [11.535117]
    [11.535155]
    });
    state
    .repo_tx_in
    .send(repo::MsgIn::Pull {
    remote,
    channel: repo.channel.clone(),
    })
    .unwrap();
    } else {
    report::show_err(
    report,
    "Cannot pull as there is no default remote configured."
    .to_string(),
    );
    }
  • replacement in inflorescence/src/main.rs at line 2164
    [26.49191][26.49191:49290]()
    repo,
    record_dichotomy,
    ..
    [26.49191]
    [26.49290]
    record_dichotomy, ..
  • replacement in inflorescence/src/main.rs at line 2167
    [26.49398][26.49398:49823]()
    repo.remotes.default.as_ref().and_then(
    |default_remote| {
    model::get_record_dichotomy_mut(
    record_dichotomy,
    default_remote,
    &channel,
    )
    },
    [26.49398]
    [26.49823]
    model::get_record_dichotomy_mut(
    record_dichotomy,
    &remote,
    &channel,
  • replacement in inflorescence/src/main.rs at line 2187
    [26.50577][14.25382:25460](),[14.25382][14.25382:25460]()
    report::show_info(report, format!("Pushed to {channel}"))
    [26.50577]
    [14.25460]
    report::show_info(
    report,
    format!("Pushed to {remote}, channel {channel}"),
    )
  • replacement in inflorescence/src/main.rs at line 2194
    [14.25572][14.25572:25633]()
    format!("Nothing to push to {channel}"),
    [14.25572]
    [14.25633]
    format!("Nothing to push to {remote}, channel {channel}"),
  • replacement in inflorescence/src/main.rs at line 2198
    [20.1028][23.1673:1748]()
    "Failed to push to channel {channel} with {err:?}"
    [20.1028]
    [20.1101]
    "Failed to push to {remote}, channel {channel} with {err:?}"
  • replacement in inflorescence/src/main.rs at line 2208
    [14.25898][14.25898:25952]()
    repo::MsgOut::Pulled { channel, result } => {
    [14.25898]
    [14.25952]
    repo::MsgOut::Pulled {
    remote,
    channel,
    result,
    } => {
  • replacement in inflorescence/src/main.rs at line 2216
    [26.50623][26.50623:50722]()
    repo,
    record_dichotomy,
    ..
    [26.50623]
    [26.50722]
    record_dichotomy, ..
  • replacement in inflorescence/src/main.rs at line 2219
    [26.50830][26.50830:51255]()
    repo.remotes.default.as_ref().and_then(
    |default_remote| {
    model::get_record_dichotomy_mut(
    record_dichotomy,
    default_remote,
    &channel,
    )
    },
    [26.50830]
    [26.51255]
    model::get_record_dichotomy_mut(
    record_dichotomy,
    &remote,
    &channel,
  • replacement in inflorescence/src/main.rs at line 2233
    [26.51688][14.26007:26087](),[14.26007][14.26007:26087]()
    report::show_info(report, format!("Pulled from {channel}"))
    [26.51688]
    [14.26087]
    report::show_info(
    report,
    format!("Pulled from {remote}, channel {channel}"),
    )
  • replacement in inflorescence/src/main.rs at line 2240
    [14.26199][14.26199:26262]()
    format!("Nothing to pull from {channel}"),
    [14.26199]
    [14.26262]
    format!("Nothing to pull from {remote}, channel {channel}"),
  • replacement in inflorescence/src/main.rs at line 2244
    [20.1263][23.1749:1826]()
    "Failed to pull from channel {channel} with {err:?}"
    [20.1263]
    [20.1338]
    "Failed to pull from {remote}, channel {channel} with {err:?}"
  • replacement in inflorescence/src/main.rs at line 2250
    [14.26433][14.26433:26491]()
    jobs.swap_remove(&Job::Pull { channel });
    [14.26433]
    [10.9093]
    jobs.swap_remove(&Job::Pull { remote, channel });