From e1e73d85dd403c3949389fb5b10e2b0cd4ac331b Mon Sep 17 00:00:00 2001 From: "Ilia.Shulgin" Date: Thu, 12 Feb 2026 18:01:43 +0100 Subject: [PATCH] refactoring [git]: Add tracing for git command lock acquisition GitOrigin-RevId: a820c8c5d1454a485965697dc410baea1c7a8dd3 --- .../src/git4idea/commands/GitImplBase.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/plugins/git4idea/src/git4idea/commands/GitImplBase.java b/plugins/git4idea/src/git4idea/commands/GitImplBase.java index 6709aa462b8f..935286c0a9b3 100644 --- a/plugins/git4idea/src/git4idea/commands/GitImplBase.java +++ b/plugins/git4idea/src/git4idea/commands/GitImplBase.java @@ -424,15 +424,34 @@ public abstract class GitImplBase implements Git { ReadWriteLock executionLock = GitVcs.getInstance(project).getCommandLock(); Lock lock = executionLock.writeLock(); + long startTime = System.currentTimeMillis(); + if (LOG.isTraceEnabled()) { + LOG.trace("Acquiring lock for command '%s'".formatted(handler)); + } ProgressIndicatorUtils.awaitWithCheckCanceled(lock); + long acquisitionTime = System.currentTimeMillis() - startTime; + if (LOG.isTraceEnabled()) { + LOG.trace(new Throwable(getLockAcquiredMessage(handler, acquisitionTime))); + } + else if (LOG.isDebugEnabled()) { + LOG.debug(getLockAcquiredMessage(handler, acquisitionTime)); + } + return new AccessToken() { @Override public void finish() { lock.unlock(); + if (LOG.isTraceEnabled()) { + LOG.trace("Lock released by '%s'".formatted(handler)); + } } }; } + private static @NotNull String getLockAcquiredMessage(@NotNull GitLineHandler handler, long acquisitionTime) { + return "Acquired lock for command '%s' in %dms".formatted(handler, acquisitionTime); + } + private static boolean shouldTakeWriteLock(@NotNull GitLineHandler handler, boolean canSuppressOptionalLocks) { LockingPolicy lockingPolicy = handler.getCommand().lockingPolicy(); return lockingPolicy != READ &&