Mercurial > hg > mercurial
changeset 366:a75f2b73b1d8
TW-19984
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Fri, 03 Feb 2012 13:23:18 +0400 |
parents | a1d70e112d47 |
children | 061e5f3a6bad |
files | mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/Cleanup.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/CleanupTest.java |
diffstat | 3 files changed, 50 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/Cleanup.java Mon Jan 30 10:41:01 2012 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/Cleanup.java Fri Feb 03 13:23:18 2012 +0400 @@ -9,8 +9,11 @@ import org.jetbrains.annotations.NotNull; import java.io.File; +import java.io.FileFilter; import java.util.*; +import static java.util.Arrays.asList; + /** * @author dmitry.neverov */ @@ -20,22 +23,56 @@ private final VcsManager myVcsManager; private final MirrorManager myMirrorManager; + private final PluginConfig myConfig; private final HgPathProvider myHgPathProvider; public Cleanup(@NotNull final VcsManager vcsManager, @NotNull final MirrorManager mirrorManager, + @NotNull final PluginConfig config, @NotNull final HgPathProvider hgPathProvider) { myVcsManager = vcsManager; myMirrorManager = mirrorManager; + myConfig = config; myHgPathProvider = hgPathProvider; } public void run() { - Map<String, File> allMirrorDirs = myMirrorManager.getMappings(); + delete(unusedDirs()); + } + + private Collection<File> unusedDirs() { + List<File> existingDirs = existingDirs(); + List<File> mirrorsInUse = mirrorDirsOfRootsInUse(); + existingDirs.removeAll(mirrorsInUse); + return existingDirs; + } + + private List<File> existingDirs() { + File[] files = listDirs(); + if (files != null) + return new ArrayList<File>(asList(files)); + if (myConfig.getCachesDir().isDirectory()) + LOG.warn("Cannot list files in " + myConfig.getCachesDir()); + return Collections.emptyList(); + } + + private File[] listDirs() { + return myConfig.getCachesDir().listFiles(new FileFilter() { + public boolean accept(File f) { + return f.isDirectory(); + } + }); + } + + private List<File> mirrorDirsOfRootsInUse() { + Map<String, File> mirrorMap = myMirrorManager.getMappings(); + List<File> result = new ArrayList<File>(); for (VcsRoot root : mercurialVcsRoots()) { - allMirrorDirs.remove(urlOf(root)); + File mirrorDir = mirrorMap.get(urlOf(root)); + if (mirrorDir != null) + result.add(mirrorDir); } - deleteDirs(allMirrorDirs.values()); + return result; } private String urlOf(VcsRoot root) { @@ -57,7 +94,7 @@ return Constants.VCS_NAME.equals(root.getVcsName()); } - private void deleteDirs(Collection<File> dirs) { + private void delete(Collection<File> dirs) { logUnusedLocalClones(dirs); for (File dir : dirs) { myMirrorManager.lockDir(dir); @@ -83,6 +120,8 @@ } private void logUnusedLocalClones(@NotNull Collection<File> dirs) { + if (dirs.isEmpty()) + return; StringBuilder sb = new StringBuilder(); sb.append("Unused local clones: "); Iterator<File> iter = dirs.iterator();
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Mon Jan 30 10:41:01 2012 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Fri Feb 03 13:23:18 2012 +0400 @@ -76,7 +76,7 @@ dispatcher.addListener(new BuildServerAdapter() { @Override public void cleanupFinished() { - server.getExecutor().submit(new Cleanup(myVcsManager, myMirrorManager, myHgPathProvider)); + server.getExecutor().submit(new Cleanup(myVcsManager, myMirrorManager, myConfig, myHgPathProvider)); } @Override
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/CleanupTest.java Mon Jan 30 10:41:01 2012 +0400 +++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/CleanupTest.java Fri Feb 03 13:23:18 2012 +0400 @@ -48,7 +48,7 @@ myMirrorManager = new MirrorManagerImpl(config); myVcsManager = myContext.mock(VcsManager.class); - myCleanup = new Cleanup(myVcsManager, myMirrorManager, new ServerHgPathProvider(config)); + myCleanup = new Cleanup(myVcsManager, myMirrorManager, config, new ServerHgPathProvider(config)); } @AfterMethod @@ -64,6 +64,7 @@ createDirFor(url1); createDirFor(url2); createDirFor(url3); + createUnusedDir(); myContext.checking(new Expectations() {{ atLeast(1).of(myVcsManager).getAllRegisteredVcsRoots(); will(returnValue(asList(build(vcsRoot().withUrl(url1)), build(vcsRoot().withUrl(url2))))); @@ -77,6 +78,10 @@ assertThat(mappingsFile(), containsOnly(directoriesInside(myCachesDir))); } + private void createUnusedDir() { + new File(myCachesDir, "some unused dir").mkdirs(); + } + private void createDirFor(@NotNull String url) { myMirrorManager.getMirrorDir(url);