Download raw body.
tog: tree view move-to-parent bug
On Fri, Nov 27, 2020 at 12:11:11AM +0100, Christian Weisgerber wrote:
> Your diff fixes the problem, but looking at the loop in
> tree_view_walk_path(), I wonder if it isn't overly complicated:
>
> > @@ -1907,7 +1910,8 @@ tree_view_walk_path(struct tog_tree_view_state *s,
> > if (err)
> > break;
> >
> > - err = tree_view_visit_subtree(tree, s);
> > + err = tree_view_visit_subtree(tree, s,
> > + s->selected_entry, s->selected_entry, 0);
> > if (err) {
> > got_object_tree_close(tree);
> > break;
>
> You are effectively setting
> s->first_displayed_entry = s->selected_entry;
> s->selected = 0;
> here.
>
> But lo and behold, that's exactly what happens earlier for the
> !S_ISDIR case. And those are the only two non-error exits from the
> loop.
>
> So I think we can just always set
> s->first_displayed_entry = s->selected_entry;
> and s->selected is initialized when the view is calloc()ed.
Yes, I like this simpler fix, too. Ok.
> diff 16aeacf7088dcd3cd5e654af46a3015cecf41426 /home/naddy/got
> blob - feaac17d0e83e59b9ef24e80a5f347f16db2f891
> file + tog/tog.c
> --- tog/tog.c
> +++ tog/tog.c
> @@ -1875,17 +1875,10 @@ tree_view_walk_path(struct tog_tree_view_state *s,
> break;
> }
> free(te_name);
> - s->selected_entry = te;
> - s->selected = got_tree_entry_get_index(te);
> - if (s->tree != s->root)
> - s->selected++; /* skip '..' */
> + s->first_displayed_entry = s->selected_entry = te;
>
> - if (!S_ISDIR(got_tree_entry_get_mode(s->selected_entry))) {
> - /* Jump to this file's entry. */
> - s->first_displayed_entry = s->selected_entry;
> - s->selected = 0;
> - break;
> - }
> + if (!S_ISDIR(got_tree_entry_get_mode(s->selected_entry)))
> + break; /* jump to this file's entry */
>
> slash = strchr(p, '/');
> if (slash)
> --
> Christian "naddy" Weisgerber naddy@mips.inka.de
>
>
tog: tree view move-to-parent bug