package com.atlassian.stash.internal.scm;

import com.atlassian.bitbucket.scm.Scm;
import com.atlassian.stash.internal.maintenance.latch.Latch;

/**
 * Describes a latch over <i>all</i> {@link Scm SCMs}. Acquiring this latch prevents new
 * <i>write</i> operations from being started, and allows draining existing write operations. Some examples of
 * write operations are:
 * <ul>
 *     <li>Pushes</li>
 *     <li>Pull request merges</li>
 * </ul>
 * <p>
 * <b>Warning</b>: The underlying implementation for this latch is currently very weak, and does not reliably
 * prevent new write operations unless the {@link com.atlassian.stash.internal.db.DatabaseLatch DatabaseLatch}
 * is <i>also</i> held.
 *
 * @since 3.0
 */
public interface ScmLatch extends Latch {
}
