Download raw body.
tog is sluggish with FreeBSD src.git
On Sat, Dec 26, 2020 at 09:39:25PM +0100, Christian Weisgerber wrote:
> Stefan Sperling:
>
> > > Another change we may want is optional skipping of got_ref_list() inside
> > > got_repo_match_object_id(). It needs refs to match user input with tag names.
> >
> > This patch implements the above idea (on top of the previous patch).
> > Now 'tog diff A B' will not read references twice on startup.
> > And got and gotweb also avoid loading references repeatedly.
> >
>
> > diff refs/heads/togref refs/heads/match_object_id_refs
>
> That looks fine. One comment:
>
> > @@ -6380,9 +6383,12 @@ tog_log_with_path(int argc, char *argv[])
> > if (error)
> > goto done;
> >
> > + error = got_ref_list(&refs, repo, NULL, got_ref_cmp_by_name, NULL);
> > + if (error)
> > + goto done;
> > error = got_repo_match_object_id(&commit_id, NULL, worktree ?
> > got_worktree_get_head_ref_name(worktree) : GOT_REF_HEAD,
> > - GOT_OBJ_TYPE_COMMIT, 1, repo);
> > + GOT_OBJ_TYPE_COMMIT, &refs, repo);
> > if (error)
> > goto done;
> >
>
> So the mpi special loads the ref list twice.
> Could we also call tog_load_refs() there and have cmd_log() skip it?
> Too hackish?
Fine with me. Please commit this on top of my patch with my Ok.
> --- tog.c.orig Sat Dec 26 21:26:54 2020
> +++ tog.c Sat Dec 26 21:33:57 2020
> @@ -2756,9 +2756,12 @@ cmd_log(int argc, char *argv[])
> if (error)
> goto done;
>
> - error = tog_load_refs(repo);
> - if (error)
> - goto done;
> + /* already loaded by tog_log_with_path()? */
> + if (SIMPLEQ_EMPTY(&tog_refs)) {
> + error = tog_load_refs(repo);
> + if (error)
> + goto done;
> + }
>
> if (start_commit == NULL) {
> error = got_repo_match_object_id(&start_id, &label,
> @@ -6353,10 +6356,7 @@ tog_log_with_path(int argc, char *argv[])
> struct got_object_id *commit_id = NULL, *id = NULL;
> char *cwd = NULL, *repo_path = NULL, *in_repo_path = NULL;
> char *commit_id_str = NULL, **cmd_argv = NULL;
> - struct got_reflist_head refs;
>
> - SIMPLEQ_INIT(&refs);
> -
> cwd = getcwd(NULL, 0);
> if (cwd == NULL)
> return got_error_from_errno("getcwd");
> @@ -6383,12 +6383,12 @@ tog_log_with_path(int argc, char *argv[])
> if (error)
> goto done;
>
> - error = got_ref_list(&refs, repo, NULL, got_ref_cmp_by_name, NULL);
> + error = tog_load_refs(repo);
> if (error)
> goto done;
> error = got_repo_match_object_id(&commit_id, NULL, worktree ?
> got_worktree_get_head_ref_name(worktree) : GOT_REF_HEAD,
> - GOT_OBJ_TYPE_COMMIT, &refs, repo);
> + GOT_OBJ_TYPE_COMMIT, &tog_refs, repo);
> if (error)
> goto done;
>
> @@ -6435,7 +6435,7 @@ done:
> free(cmd_argv[i]);
> free(cmd_argv);
> }
> - got_ref_list_free(&refs);
> + tog_free_refs();
> return error;
> }
>
> --
> Christian "naddy" Weisgerber naddy@mips.inka.de
>
>
tog is sluggish with FreeBSD src.git