git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: tig: Improving startup time and interactivity

From
Jonas Fonseca <jonas.fonseca@gmail.com>
Date
Nov 12, 2014, 14:35 UTC
Message-ID
<CAFuPQ1Lm95ztfa3wOZ4LQD05XdV-30UKr4Y9+HoHYbQyw9qj-g@mail.gmail.com>
In-Reply-To
<20141111085014.GA26147@linux.vnet.ibm.com>
On Tue, Nov 11, 2014 at 3:50 AM, Dominik Vogt <vogt@linux.vnet.ibm.com> wrote:
> Hi Jonas,
HI Dominik,
Good to hear from you.
Show 9 quoted lines
> working on a relatively old machine with a crypted disk, there are
> really two performance problems with tig on large repos like gcc
> or the Linux kernel.  I wonder what would be necessary to improve
> these two problems:
>
>  1) Firing up tig for the first time in the kernel repo, the screen
>     goes blank for about a minute.  After that it comes up
>     quickly.  This is probably caused by decrypting lots of
>     on-disk-objects.

You are not alone at reporting this problem. The main reason is that when the revision graph is enabled, tig automatically passes --topo-order to git-log. This commit order seems to cause quite a slow down before the first commits are available in the output in the Linux kernel repo, I assume, due to its many merges.

I recently added an option to disable the automatic forcing of topological commit order. So assuming you are using tig from current master, you can do this using `set main-view-commit-title-graph = no-topo`, but I will probably move this setting to another option before the next release (so if it breaks take a look at the NEWS file). Alternatively you can disable the revision graph completely using `set main-view-commit-title-graph = no`.

Before the next commit I plan to also investigate whether tig can first load a screen full of commits without --topo-order and then restart git-log, so the main view has content faster.

>  2) When I cherry pick commits inside tig, it reloads the whole
>     commit history of the active branch before tig accepts new
>     commands.

This should should be able to disable this behaviour using `set refresh-mode = manual` if you don't want tig to automatically reload the view.

> I guess both issues are caused by tig reading the whole commit
> history before user input is allowed.  Is there a way to do that
> in the background, or interrupt loading when the user presses a
> key, or to load the history in small chunks?

The loading should already happen while also accepting user input (modulo any bugs).

> After all, you're
> usually interested only in the last 100 commits or so, and there's
> no need to block the UI while loading the rest.

True. Well, The only part of the loading that is blocking is the .git/index refreshing that takes place when display of work tree changes is enabled in the main view (when `set show-changes = yes`).

I will review this again.
> Could you point me to the right source file?  I'm not used to the
> sources split into multiple files yet.  :-)
Try: tig grep main_open
> Ciao
Have a great day.
-- 
Jonas Fonseca
Message 1 of 1 in “Re: tig: Improving startup time and interactivity”
  1. Jonas FonsecaNov 12, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.