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