refactoring [git]: Add tracing for git command lock acquisition

GitOrigin-RevId: a820c8c5d1454a485965697dc410baea1c7a8dd3
This commit is contained in:
Ilia.Shulgin
2026-02-16 19:09:56 +00:00
committed by intellij-monorepo-bot
parent d7842d780c
commit e1e73d85dd
@@ -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 &&