Skip to content

Commit 6f3a04f

Browse files
committedSep 29, 2018
Browse: Throttle submodule status updates
1 parent 9cec08c commit 6f3a04f

File tree

1 file changed

+8
-1
lines changed

1 file changed

+8
-1
lines changed
 

‎GitCommands/Submodules/SubmoduleStatusProvider.cs

+8-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public interface ISubmoduleStatusProvider : IDisposable
2121
public sealed class SubmoduleStatusProvider : ISubmoduleStatusProvider
2222
{
2323
private readonly CancellationTokenSequence _submodulesStatusSequence = new CancellationTokenSequence();
24+
private DateTime _previousSubmoduleUpdateTime;
2425

2526
public void Dispose()
2627
{
@@ -29,7 +30,10 @@ public void Dispose()
2930

3031
public bool HasSubmodulesStatusChanged([CanBeNull] IReadOnlyList<GitItemStatus> allChangedFiles)
3132
{
32-
if (allChangedFiles == null)
33+
TimeSpan elapsed = DateTime.Now - _previousSubmoduleUpdateTime;
34+
35+
// Throttle updates triggered from status updates
36+
if (allChangedFiles == null || elapsed.TotalSeconds <= 15)
3337
{
3438
return false;
3539
}
@@ -47,6 +51,7 @@ public void UpdateSubmodulesStatus(string workingDirectory,
4751
{
4852
// Cancel any previous async activities:
4953
var cancelToken = _submodulesStatusSequence.Next();
54+
_previousSubmoduleUpdateTime = DateTime.Now;
5055

5156
onUpdateBegin();
5257

@@ -68,6 +73,8 @@ public void UpdateSubmodulesStatus(string workingDirectory,
6873
await Task.WhenAll(submodulesTask, superTask);
6974

7075
await onUpdateCompleteAsync(result, cancelToken);
76+
77+
_previousSubmoduleUpdateTime = DateTime.Now;
7178
}).FileAndForget();
7279
}
7380

0 commit comments

Comments
 (0)
Please sign in to comment.