Mercurial > hg > mercurial
changeset 22:0d6f27953b30
synchronization fixes
line wrap: on
line diff
--- a/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/BaseCommandTestCase.java Thu Jul 17 00:44:10 2008 +0400 +++ b/mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/BaseCommandTestCase.java Thu Jul 17 00:58:04 2008 +0400 @@ -23,10 +23,10 @@ settings.setRepository(repository.getAbsolutePath()); TempFiles tf = new TempFiles(); File parentDir = tf.createTempDir(); - settings.setWorkingDir(new File(parentDir, "rep").getAbsolutePath()); + settings.setWorkingDir(new File(parentDir, "rep").getAbsoluteFile()); try { CloneCommand cl = new CloneCommand(settings); - cl.setDestDir(settings.getWorkingDir()); + cl.setDestDir(settings.getWorkingDir().getAbsolutePath()); cl.execute(); return executor.execute(settings);
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Thu Jul 17 00:44:10 2008 +0400 +++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Thu Jul 17 00:58:04 2008 +0400 @@ -62,7 +62,7 @@ File workFoldersParent = new File(myServerPaths.getCachesDir(), "mercurial"); if (!workFoldersParent.isDirectory()) return; - Set<File> dirNames = new HashSet<File>(); + Set<File> workDirs = new HashSet<File>(); File[] files = workFoldersParent.listFiles(new FileFilter() { public boolean accept(final File file) { return file.isDirectory() && file.getName().startsWith(Settings.DEFAULT_WORK_DIR_PREFIX); @@ -70,19 +70,24 @@ }); if (files != null) { for (File f: files) { - dirNames.add(FileUtil.getCanonicalFile(f)); + workDirs.add(FileUtil.getCanonicalFile(f)); } } for (VcsRoot vcsRoot: myVcsManager.getAllRegisteredVcsRoots()) { if (getName().equals(vcsRoot.getVcsName())) { Settings s = new Settings(myServerPaths, vcsRoot); - dirNames.remove(FileUtil.getCanonicalFile(new File(s.getWorkingDir()))); + workDirs.remove(FileUtil.getCanonicalFile(s.getWorkingDir())); } } - for (File f: dirNames) { - FileUtil.delete(f); + for (File f: workDirs) { + lockWorkDir(f); + try { + FileUtil.delete(f); + } finally { + unlockWorkDir(f); + } } } @@ -378,17 +383,17 @@ // updates current working copy of repository by pulling changes from the repository specified in VCS root private void updateWorkingDirectory(final VcsRoot root) throws VcsException { Settings settings = new Settings(myServerPaths, root); - String workDir = settings.getWorkingDir(); + File workDir = settings.getWorkingDir(); lockWorkDir(workDir); try { - if (hasRepositoryCopy(new File(workDir))) { + if (hasRepositoryCopy(workDir)) { // update PullCommand pull = new PullCommand(settings); pull.execute(); } else { // clone CloneCommand cl = new CloneCommand(settings); - cl.setDestDir(workDir); + cl.setDestDir(workDir.getAbsolutePath()); cl.setUpdateWorkingDir(false); cl.execute(); } @@ -397,19 +402,20 @@ } } - private void lockWorkDir(@NotNull String workDir) { + private void lockWorkDir(@NotNull File workDir) { getWorkDirLock(workDir).lock(); } - private void unlockWorkDir(@NotNull String workDir) { + private void unlockWorkDir(@NotNull File workDir) { getWorkDirLock(workDir).unlock(); } - private Lock getWorkDirLock(final String workDir) { - Lock lock = myWorkDirLocks.get(workDir); + private Lock getWorkDirLock(final File workDir) { + String path = workDir.getAbsolutePath(); + Lock lock = myWorkDirLocks.get(path); if (lock == null) { lock = new ReentrantLock(); - Lock curLock = myWorkDirLocks.putIfAbsent(workDir, lock); + Lock curLock = myWorkDirLocks.putIfAbsent(path, lock); if (curLock != null) { lock = curLock; }
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CatCommand.java Thu Jul 17 00:44:10 2008 +0400 +++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CatCommand.java Thu Jul 17 00:58:04 2008 +0400 @@ -37,7 +37,7 @@ GeneralCommandLine cli = new GeneralCommandLine(); cli.setExePath(mySettings.getHgCommandPath()); - cli.setWorkDirectory(mySettings.getWorkingDir()); + cli.setWorkDirectory(mySettings.getWorkingDir().getAbsolutePath()); cli.addParameter("cat"); cli.addParameter("-o"); cli.addParameter(tempDir.getAbsolutePath() + File.separator + "%p");
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java Thu Jul 17 00:44:10 2008 +0400 +++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java Thu Jul 17 00:58:04 2008 +0400 @@ -39,7 +39,7 @@ public List<ChangeSet> execute() throws VcsException { GeneralCommandLine cli = new GeneralCommandLine(); cli.setExePath(mySettings.getHgCommandPath()); - cli.setWorkDirectory(mySettings.getWorkingDir()); + cli.setWorkDirectory(mySettings.getWorkingDir().getAbsolutePath()); cli.addParameter("log"); cli.addParameter("-r"); String from = myFromId;
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java Thu Jul 17 00:44:10 2008 +0400 +++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/PullCommand.java Thu Jul 17 00:58:04 2008 +0400 @@ -18,7 +18,7 @@ public void execute() throws VcsException { GeneralCommandLine cli = new GeneralCommandLine(); cli.setExePath(mySettings.getHgCommandPath()); - cli.setWorkDirectory(mySettings.getWorkingDir()); + cli.setWorkDirectory(mySettings.getWorkingDir().getAbsolutePath()); cli.addParameter("pull"); cli.addParameter(mySettings.getRepository()); CommandUtil.runCommand(cli);
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java Thu Jul 17 00:44:10 2008 +0400 +++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/Settings.java Thu Jul 17 00:58:04 2008 +0400 @@ -17,7 +17,7 @@ private String myRepository; private String myHgCommandPath; private ServerPaths myServerPaths; - private String myWorkingDir; + private File myWorkingDir; public Settings(@NotNull ServerPaths paths, @NotNull VcsRoot vcsRoot) { myServerPaths = paths; @@ -54,8 +54,8 @@ myHgCommandPath = hgCommandPath; } - public void setWorkingDir(@NotNull final String workingDir) { - myWorkingDir = workingDir; + public void setWorkingDir(@NotNull final File workingDir) { + myWorkingDir = FileUtil.getCanonicalFile(workingDir); } /** @@ -63,7 +63,7 @@ * @return repository working directory */ @NotNull - public String getWorkingDir() { + public File getWorkingDir() { if (myWorkingDir != null) { return myWorkingDir; } @@ -73,13 +73,13 @@ public static String DEFAULT_WORK_DIR_PREFIX = "hg_"; - private static String getDefaultWorkDir(@NotNull ServerPaths serverPaths, @NotNull String repPath) { + private static File getDefaultWorkDir(@NotNull ServerPaths serverPaths, @NotNull String repPath) { String workingDirname = DEFAULT_WORK_DIR_PREFIX + String.valueOf(Hash.calc(normalize(repPath))); File workFoldersRootDir = new File(serverPaths.getCachesDir(), "mercurial"); if (!workFoldersRootDir.mkdirs() && !workFoldersRootDir.isDirectory()) { throw new RuntimeException("Cannot create directory: " + workFoldersRootDir.getAbsolutePath()); } - return FileUtil.getCanonicalFile(new File(workFoldersRootDir, workingDirname)).getAbsolutePath(); + return FileUtil.getCanonicalFile(new File(workFoldersRootDir, workingDirname)); } private static String normalize(final String path) {
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/StatusCommand.java Thu Jul 17 00:44:10 2008 +0400 +++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/StatusCommand.java Thu Jul 17 00:58:04 2008 +0400 @@ -28,7 +28,7 @@ public List<ModifiedFile> execute() throws VcsException { GeneralCommandLine cli = new GeneralCommandLine(); cli.setExePath(mySettings.getHgCommandPath()); - cli.setWorkDirectory(mySettings.getWorkingDir()); + cli.setWorkDirectory(mySettings.getWorkingDir().getAbsolutePath()); cli.addParameter("status"); cli.addParameter("--rev"); String from = myFromId;
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/TipCommand.java Thu Jul 17 00:44:10 2008 +0400 +++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/TipCommand.java Thu Jul 17 00:58:04 2008 +0400 @@ -22,7 +22,7 @@ @NotNull public ChangeSet execute() throws VcsException { GeneralCommandLine cli = new GeneralCommandLine(); - cli.setWorkDirectory(mySettings.getWorkingDir()); + cli.setWorkDirectory(mySettings.getWorkingDir().getAbsolutePath()); cli.setExePath(mySettings.getHgCommandPath()); cli.addParameter("tip"); ExecResult res = CommandUtil.runCommand(cli);
--- a/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/UpdateCommand.java Thu Jul 17 00:44:10 2008 +0400 +++ b/mercurial/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/UpdateCommand.java Thu Jul 17 00:58:04 2008 +0400 @@ -14,7 +14,7 @@ public void execute() throws VcsException { GeneralCommandLine cli = new GeneralCommandLine(); cli.setExePath(mySettings.getHgCommandPath()); - cli.setWorkDirectory(mySettings.getWorkingDir()); + cli.setWorkDirectory(mySettings.getWorkingDir().getAbsolutePath()); cli.addParameter("update"); cli.addParameter("-C"); CommandUtil.runCommand(cli);