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

Re: [PATCH] git-gui: Perform rescan on window focus-in

From
Pratyush Yadav <me@yadavpratyush.com>
Date
Jul 28, 2019, 22:10 UTC
Message-ID
<e3f296a6-f33b-7b52-c4cb-9acf65145e64@yadavpratyush.com>
In-Reply-To
<20190728213634.GB162590@genre.crustytoothpaste.net>
Hi Brian,
On 29/07/19 3:06 AM, brian m. carlson wrote:
Show 16 quoted lines
> On 2019-07-28 at 15:17:26, Pratyush Yadav wrote:
>> If any changes are made to the tree while git-gui is open, the user has
>> to manually rescan to see those changes in the gui. With this change, a
>> rescan will be performed whenever the window comes in focus, removing
>> the need for manual rescans in most cases. A manual rescan will still be
>> needed when something makes changes to the tree while git-gui is still
>> in focus.
> 
> I don't use git-gui, so I have no opinion on this change either way, but
> I do have some questions.
> 
> What exactly is involved in a rescan? Is it potentially expensive? If
> so, it might be better to leave it explicit, since people can
> accidentally give focus to the wrong window (bad click, focus follows
> mouse, etc.).
> 

The function is not documented, and I only started spelunking the code a couple days back, so I'll try to answer with what I know. It might not be the full picture.

Running git-gui --trace, these commands are executed during a rescan:

/usr/lib/git-core/git-rev-parse --verify HEAD /usr/lib/git-core/git-update-index -q --unmerged --ignore-missing --refresh

Since I'm not too familiar with the details of these, I'll let you be the judge on how expensive these operations are. But I'll add that rescans are pretty fast on my relatively slow hard disk.

> Is there ever a situation in which someone might want to see the old
> state? For example, would a rescan change the active commit shown?
> Someone might be looking at a particular commit message or object ID for
> the current commit; would this interfere with that?

At least in my workflow, there is no such situation. I use git-gui to look at uncommitted changes, and stage and commit them. To look at older commits, I use gitk. And from what I understand, git-gui is not designed to browse old commits. In the options menu, it simply opens gitk if you click "Visualise master's history". There is no history browsing in git-gui itself.

Yes, a rescan will remove the old commit and will show the latest changes. This includes the old diff that was there before it was committed or removed from outside of git-gui. So this change will certainly interfere with the old state.

Show 14 quoted lines
> 
>> diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh
>> index 6de74ce639..8ca2033dc8 100755
>> --- a/git-gui/git-gui.sh
>> +++ b/git-gui/git-gui.sh
>> @@ -3849,6 +3849,7 @@ if {[is_enabled transport]} {
>>   }
>>   
>>   bind .   <Key-F5>     ui_do_rescan
>> +bind .   <FocusIn>    do_rescan
> 
> What's the difference between these two? Why are we using do_rescan
> instead of ui_do_rescan?
> 

ui_do_rescan changes the focus to the first diff. It is executed when you press F5 or choose Rescan from the menu. do_rescan does not do that.

Resetting to first diff on focus change will get annoying when you are in the middle of looking at some other file. do_rescan just updates the software state without changing what file you are looking at or where in that file you are looking at.

Show 7 quoted lines
>>   bind .   <$M1B-Key-r> ui_do_rescan
>>   bind .   <$M1B-Key-R> ui_do_rescan
>>   bind .   <$M1B-Key-s> do_signoff
> 
> The answers to a lot of these questions can go in your commit message to
> help reviewers and future readers understand your change better.
> 

I'm never too sure what I should put in the commit message, so I took the conservative route. I'll add more details in the v2 patch.

-- 
Regards,
Pratyush Yadav
Previous: brian m. carlsonNext: Pratyush Yadav
Message 3 of 23 in “git-gui: Perform rescan on window focus-in”
  1. git-gui: Perform rescan on window focus-inPratyush Yadav, Jul 28, 2019
  2. brian m. carlsonJul 28, 2019
  3. Pratyush YadavJul 28, 2019
  4. Pratyush YadavJul 28, 2019
  5. brian m. carlsonJul 28, 2019
  6. Mark LevedahlJul 29, 2019
  7. Mark LevedahlJul 29, 2019
  8. Pratyush YadavJul 29, 2019
  9. Johannes SchindelinJul 31, 2019
  10. Pratyush YadavAug 1, 2019
  11. Johannes SchindelinAug 2, 2019
  12. Pratyush YadavAug 2, 2019
  13. Johannes SchindelinAug 3, 2019
  14. Pratyush YadavAug 4, 2019
  15. Johannes SchindelinAug 4, 2019
  16. Pratyush YadavAug 4, 2019
  17. Junio C HamanoAug 2, 2019
  18. Pratyush YadavAug 2, 2019
  19. Johannes SchindelinAug 4, 2019
  20. Mark LevedahlJul 29, 2019
  21. Junio C HamanoJul 29, 2019
  22. Pratyush YadavJul 29, 2019
  23. Pratyush YadavJul 28, 2019

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.