Mercurial > hg > mercurial
view mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialResetCacheHandler.java @ 719:59a3b5ef91a9
drop legacy
author | eugene.petrenko@jetbrains.com |
---|---|
date | Mon, 13 Jan 2014 19:42:22 +0100 |
parents | efba721f9a1d |
children | 31a1aca3305c |
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.List; import java.util.Map; 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"); } }