From a0de963e8781e63ed882086daaa32f08ef295499 Mon Sep 17 00:00:00 2001 From: Pluto Date: Fri, 22 Aug 2025 13:58:17 +0530 Subject: [PATCH 1/2] fix: git panel not getting updated when phoenix gains focus --- src/extensions/default/Git/src/Main.js | 29 +++++++++----------- src/extensions/default/Git/src/git/GitCli.js | 2 ++ 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/extensions/default/Git/src/Main.js b/src/extensions/default/Git/src/Main.js index 344987077c..dc3e3d3d19 100644 --- a/src/extensions/default/Git/src/Main.js +++ b/src/extensions/default/Git/src/Main.js @@ -399,32 +399,29 @@ define(function (require, exports) { } } - let lastExecutionTime = 0; let isCommandExecuting = false; - const FOCUS_SWITCH_DEDUPE_TIME = 5000; function refreshOnFocusChange() { // to sync external git changes after switching to app. if (gitEnabled) { - const now = Date.now(); + const isGitPanelVisible = Panel.getPanel().is(":visible"); if (isCommandExecuting) { return; } - - if (now - lastExecutionTime > FOCUS_SWITCH_DEDUPE_TIME) { - isCommandExecuting = true; - lastExecutionTime = Date.now(); - Git.hasStatusChanged().then((hasChanged) => { - if(!hasChanged){ - return; - } - - CommandManager.execute(Constants.CMD_GIT_REFRESH).fail((err) => { - console.error("error refreshing on focus switch", err); - }); - }).finally(()=>{ + isCommandExecuting = true; + + // if the git panel is visible, its very likely user is working with git (maybe external) + // so when Phoenix gains focus, we do a complete git refresh to show latest status + if(isGitPanelVisible) { + CommandManager.execute(Constants.CMD_GIT_REFRESH).fail((err) => { + console.error("error refreshing on focus switch", err); + }).always(() => { isCommandExecuting = false; }); + } else { + // if panel not visible, we just refresh the git branch (shown in sidebar) + Branch.refresh(); + isCommandExecuting = false; } } } diff --git a/src/extensions/default/Git/src/git/GitCli.js b/src/extensions/default/Git/src/git/GitCli.js index 2ee6efd59a..39cd9aa56f 100644 --- a/src/extensions/default/Git/src/git/GitCli.js +++ b/src/extensions/default/Git/src/git/GitCli.js @@ -797,6 +797,8 @@ define(function (require, exports) { }); } + // this function right now is not being used anywhere, + // but leaving it here (we might need it in the future) function hasStatusChanged() { const prevStatus = lastGitStatusResults; return status().then(function (currentStatus) { From 860527cb8a54aa9de835dc11ef2742ab8d088dc2 Mon Sep 17 00:00:00 2001 From: Pluto Date: Sat, 23 Aug 2025 17:02:35 +0530 Subject: [PATCH 2/2] feat: add dedupe timer of 3s on focus change --- src/extensions/default/Git/src/Main.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/extensions/default/Git/src/Main.js b/src/extensions/default/Git/src/Main.js index dc3e3d3d19..3b50a63ed7 100644 --- a/src/extensions/default/Git/src/Main.js +++ b/src/extensions/default/Git/src/Main.js @@ -400,12 +400,22 @@ define(function (require, exports) { } let isCommandExecuting = false; + let scheduledRefresh = null; + const REFRESH_DEDUPE_TIME = 3000; + function refreshOnFocusChange() { // to sync external git changes after switching to app. if (gitEnabled) { const isGitPanelVisible = Panel.getPanel().is(":visible"); if (isCommandExecuting) { + // if we haven't already scheduled a refresh, queue one + if (!scheduledRefresh) { + scheduledRefresh = setTimeout(() => { + scheduledRefresh = null; + refreshOnFocusChange(); + }, REFRESH_DEDUPE_TIME); + } return; } isCommandExecuting = true; @@ -417,11 +427,24 @@ define(function (require, exports) { console.error("error refreshing on focus switch", err); }).always(() => { isCommandExecuting = false; + // if a refresh got queued while we were executing, run it immediately now + if (scheduledRefresh) { + clearTimeout(scheduledRefresh); + scheduledRefresh = null; + refreshOnFocusChange(); + } }); } else { // if panel not visible, we just refresh the git branch (shown in sidebar) Branch.refresh(); isCommandExecuting = false; + + // run if something got queued + if (scheduledRefresh) { + clearTimeout(scheduledRefresh); + scheduledRefresh = null; + refreshOnFocusChange(); + } } } }