git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
From: Stefan Haller <stefan@haller-berlin.de>
To: Pratyush Yadav <me@yadavpratyush.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 1/2] git-gui: Delay rescan until idle time
Date: Mon, 2 Nov 2020 20:29:24 +0100	[thread overview]
Message-ID: <def489e0-c888-8a2b-e49c-598034f683e7@haller-berlin.de> (raw)
In-Reply-To: <20201102154550.2tvvsswokscg42ba@yadavpratyush.com>

On 02.11.20 16:45, Pratyush Yadav wrote:
> Hi Stefan,
> 
> On 01/11/20 06:05PM, Stefan Haller wrote:
>> This is to ensure that a rescan is only performed once, even if it is
>> requested multiple times during one event. We don't need this yet, because
>> we only ever call do_rescan once per event so far; this is going to change
>> with the next commit, when we also call it from FocusIn.
> 
> I don't understand what this is trying to achieve. The calls to 
> do_rescan below only happen when the user explicitly does something, 
> like stage/unstage selected lines. Why would that event coincide with 
> the FocusIn event?
> 
> If you mean to account for a situation where the rescan for 
> "Apply/Reverse Line" is executed before the rescan from FocusIn 
> finishes, then in that case the procedure rescan already accounts for it 
> by checking $rescan_active and the index lock.

I'm aware that the rescan runs asynchronously, but I wasn't worried
about the case where it's triggered concurrently while another one is
running already; I was worried about the case where a rescan (e.g.
coming from "Apply/Reverse Line") was so fast that it was already
finished by the time the FocusIn comes. But I guess I misunderstood Tk's
threading model, and this can never happen.

So it does indeed seem that the existing $rescan_active logic is enough
to prevent unnecessary rescans; I'll drop this commit.

> Have you noticed multiple rescans in parallel? If yes then we might want 
> to look at why the check is not working.
>  
>> Signed-off-by: Stefan Haller <stefan@haller-berlin.de>
>> ---
>>  git-gui.sh | 21 +++++++++++++++++----
>>  1 file changed, 17 insertions(+), 4 deletions(-)
>>
>> diff --git a/git-gui.sh b/git-gui.sh
>> index 867b8ce..8864c14 100755
>> --- a/git-gui.sh
>> +++ b/git-gui.sh
>> @@ -2376,8 +2376,21 @@ proc do_quit {{rc {1}}} {
>>  	destroy .
>>  }
>>  
>> +# Not to be called directly; use schedule_rescan instead
>>  proc do_rescan {} {
>> +	global rescan_id
>> +
>>  	rescan ui_ready
>> +	unset rescan_id
> 
> Not sure if you're aware of it already, but it is worth mentioning that 
> rescan is asynchronous. The procedure call will return before the rescan 
> in actually complete. See the `fileevent` calls in rescan and 
> rescan_stage2.
> 
> So in this case, rescan_id will be unset before the rescan is actually 
> done. This can be the right or wrong thing depending on what you want to 
> accomplish, which I'm not clear on.
> 
>> +}
>> +
>> +proc schedule_rescan {} {
>> +	global rescan_id
>> +
>> +	if {[info exists rescan_id]} {
>> +		after cancel $rescan_id
>> +	}
>> +	set rescan_id [after idle do_rescan]
>>  }
>>  
>>  proc ui_do_rescan {} {
>> @@ -3683,7 +3696,7 @@ set ui_diff_applyhunk [$ctxm index last]
>>  lappend diff_actions [list $ctxm entryconf $ui_diff_applyhunk -state]
>>  $ctxm add command \
>>  	-label [mc "Apply/Reverse Line"] \
>> -	-command {apply_or_revert_range_or_line $cursorX $cursorY 0; do_rescan}
>> +	-command {apply_or_revert_range_or_line $cursorX $cursorY 0; schedule_rescan}
>>  set ui_diff_applyline [$ctxm index last]
>>  lappend diff_actions [list $ctxm entryconf $ui_diff_applyline -state]
>>  $ctxm add separator
>> @@ -3694,12 +3707,12 @@ set ui_diff_reverthunk [$ctxm index last]
>>  lappend diff_actions [list $ctxm entryconf $ui_diff_reverthunk -state]
>>  $ctxm add command \
>>  	-label [mc "Revert Line"] \
>> -	-command {apply_or_revert_range_or_line $cursorX $cursorY 1; do_rescan}
>> +	-command {apply_or_revert_range_or_line $cursorX $cursorY 1; schedule_rescan}
>>  set ui_diff_revertline [$ctxm index last]
>>  lappend diff_actions [list $ctxm entryconf $ui_diff_revertline -state]
>>  $ctxm add command \
>>  	-label [mc "Undo Last Revert"] \
>> -	-command {undo_last_revert; do_rescan}
>> +	-command {undo_last_revert; schedule_rescan}
>>  set ui_diff_undorevert [$ctxm index last]
>>  lappend diff_actions [list $ctxm entryconf $ui_diff_undorevert -state]
>>  $ctxm add separator
>> @@ -4171,7 +4184,7 @@ after 1 {
>>  	if {[is_enabled initialamend]} {
>>  		force_amend
>>  	} else {
>> -		do_rescan
>> +		schedule_rescan
>>  	}
>>  
>>  	if {[is_enabled nocommitmsg]} {
>> -- 
>> 2.29.2
>>
> 

  reply	other threads:[~2020-11-02 19:29 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-01 17:05 [PATCH 0/2] git-gui: Auto-rescan on activate Stefan Haller
2020-11-01 17:05 ` [PATCH 1/2] git-gui: Delay rescan until idle time Stefan Haller
2020-11-02 15:45   ` Pratyush Yadav
2020-11-02 19:29     ` Stefan Haller [this message]
2020-11-01 17:05 ` [PATCH 2/2] git-gui: Auto-rescan on activate Stefan Haller
2020-11-02 15:48   ` Pratyush Yadav
2020-11-02 19:31     ` Stefan Haller
2020-11-02 13:15 ` [PATCH 0/2] " Pratyush Yadav
2020-11-02 19:24   ` Stefan Haller
2020-11-03 16:16     ` [PATCH v2 0/1] " Stefan Haller
2020-11-03 16:16       ` [PATCH v2 1/1] " Stefan Haller
2020-11-14 19:14         ` Stefan Haller
2020-11-17  7:36           ` Pratyush Yadav
2020-11-17 11:13             ` Stefan Haller
2020-11-17 12:05               ` Pratyush Yadav
2020-11-18  9:17                 ` Stefan Haller
2020-12-17 19:45 ` [PATCH 0/2] " Johannes Sixt
2020-12-17 20:10   ` Pratyush Yadav
2020-12-17 22:21     ` Johannes Sixt
2020-12-18 10:36   ` Stefan Haller
2020-12-18 18:07     ` Johannes Sixt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=def489e0-c888-8a2b-e49c-598034f683e7@haller-berlin.de \
    --to=stefan@haller-berlin.de \
    --cc=git@vger.kernel.org \
    --cc=me@yadavpratyush.com \
    --subject='Re: [PATCH 1/2] git-gui: Delay rescan until idle time' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).