Mercurial > hg > mercurial
changeset 225:1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Wed, 06 Apr 2011 11:46:39 +0400 |
parents | 65dc850d16af |
children | 2b2dab847ac8 |
files | mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java |
diffstat | 1 files changed, 44 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Wed Apr 06 11:40:22 2011 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Wed Apr 06 11:46:39 2011 +0400 @@ -140,11 +140,12 @@ @NotNull public byte[] getContent(@NotNull final String filePath, @NotNull final VcsRoot vcsRoot, @NotNull final String version) throws VcsException { - syncClonedRepository(vcsRoot); + ChangeSet cset = new ChangeSet(version); + syncClonedRepository(vcsRoot, cset); Settings settings = createSettings(vcsRoot); File workingDir = getWorkingDir(settings); CatCommand cc = new CatCommand(settings, workingDir); - cc.setRevId(new ChangeSet(version).getId()); + cc.setRevId(cset.getId()); File parentDir = cc.execute(Collections.singletonList(filePath)); try { File file = new File(parentDir, filePath); @@ -383,6 +384,29 @@ } } + /** + * clone the repo if it doesn't exist, pull the repo if it doesn't contain specified changeSet + */ + private void syncClonedRepository(final VcsRoot root, final ChangeSet cset) throws VcsException { + Settings settings = createSettings(root); + File workingDir = getWorkingDir(settings); + lockWorkDir(workingDir); + try { + if (Settings.isValidRepository(workingDir)) { + if (!isChangeSetExist(settings, workingDir, cset)) { + PullCommand pull = new PullCommand(settings, workingDir); + pull.execute(); + } + } else { + CloneCommand cl = new CloneCommand(settings, workingDir); + cl.setUpdateWorkingDir(false); + cl.execute(); + } + } finally { + unlockWorkDir(workingDir); + } + } + // updates current working copy of repository by pulling changes from the repository specified in VCS root private void syncClonedRepository(final VcsRoot root) throws VcsException { Settings settings = createSettings(root); @@ -402,6 +426,24 @@ } } + /** + * Check if changeSet is present in local repository. + * @param settings root settings + * @param cset change set of interest + * @return true if changeSet is present in local repository + */ + private boolean isChangeSetExist(Settings settings, File workDir, ChangeSet cset) { + try { + IdentifyCommand identify = new IdentifyCommand(settings, workDir); + identify.setInLocalRepository(true); + identify.setChangeSet(cset); + identify.execute(); + return true; + } catch (VcsException e) { + return false; + } + } + @Override public LabelingSupport getLabelingSupport() { return this;