Mercurial > hg > mercurial
view mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialResetCacheHandler.java @ 373:1350f99b43bc
Wording
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Thu, 09 Feb 2012 13:29:09 +0400 |
parents | 2869f49b9211 |
children | efba721f9a1d |
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial; import com.intellij.openapi.diagnostic.Logger; import jetbrains.buildServer.util.cache.ResetCacheHandler; import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import static com.intellij.openapi.util.io.FileUtil.delete; import static java.util.Collections.singletonList; /** * @author dmitry.neverov */ public class MercurialResetCacheHandler implements ResetCacheHandler { private static Logger LOG = Logger.getInstance(MercurialResetCacheHandler.class.getName()); private static final String MERCURIAL_CACHE_NAME = "mercurial"; private final MirrorManager myMirrorManager; private AtomicBoolean myResetRunning = new AtomicBoolean(false); public MercurialResetCacheHandler(@NotNull MirrorManager mirrorManager) { myMirrorManager = mirrorManager; } @NotNull public List<String> listCaches() { return singletonList(MERCURIAL_CACHE_NAME); } public boolean isEmpty(@NotNull final String cache) { return myMirrorManager.getMappings().isEmpty(); } public void resetCache(@NotNull final String cache) { boolean started = startReset(); if (!started) { LOG.info("Mercurial mirrors reset is already running"); return; } resetAllMirrors(); finishReset(); } private boolean startReset() { return myResetRunning.compareAndSet(false, true); } private void finishReset() { myResetRunning.set(false); } private void resetAllMirrors() { LOG.info("Start reseting mercurial caches"); for (Map.Entry<String, File> entry : myMirrorManager.getMappings().entrySet()) { String url = entry.getKey(); File mirror = entry.getValue(); try { lockMirror(url, mirror); resetMirror(mirror); } finally { unlockMirror(url, mirror); } } LOG.info("Mercurial caches reset"); } private void lockMirror(@NotNull final String url, @NotNull final File mirror) { LOG.debug("Lock mirror of " + url); myMirrorManager.lockDir(mirror); LOG.debug("Mirror of " + url + " is locked"); } private void resetMirror(@NotNull final File mirror) { LOG.debug("Reset mercurial mirror " + mirror.getAbsolutePath()); myMirrorManager.forgetDir(mirror); delete(mirror); LOG.debug("Mercurial mirror " + mirror.getAbsolutePath() + " reset"); } private void unlockMirror(@NotNull final String url, @NotNull final File mirror) { myMirrorManager.unlockDir(mirror); LOG.debug("Mirror of " + url + " is unlocked"); } }