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 &&