"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
Re: tog is sluggish with FreeBSD src.git
To:
Christian Weisgerber <naddy@mips.inka.de>
Cc:
gameoftrees@openbsd.org
Date:
Sat, 26 Dec 2020 21:47:48 +0100

Download raw body.

Thread
  • Christian Weisgerber:

    tog is sluggish with FreeBSD src.git

  • Christian Weisgerber:

    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
    > 
    > 
    
    
    
  • Christian Weisgerber:

    tog is sluggish with FreeBSD src.git

  • Christian Weisgerber:

    tog is sluggish with FreeBSD src.git