Mercurial > hg > mercurial
changeset 595:f2a2bf159f4c
Eliminate SubrepoConfigChange usages
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Mon, 29 Apr 2013 13:44:45 +0400 |
parents | 9cbf9205208e |
children | a37960e1f0a0 |
files | mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java |
diffstat | 1 files changed, 37 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java Fri Apr 26 14:35:50 2013 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java Mon Apr 29 13:44:45 2013 +0400 @@ -299,21 +299,37 @@ if (!detectSubrepoChanges(hgRoot)) return emptyList(); - List<SubrepoConfigChange> subrepoConfigChanges = getSubrepoConfigChanges(ctx, changes); + List<HgSubrepoConfigChange> subrepoConfigChanges = getSubrepoConfigChanges(ctx, changes); List<ModificationData> subrepoChanges = new ArrayList<ModificationData>(); - for (SubrepoConfigChange configChange : subrepoConfigChanges) { - VcsRootImpl subrepo = new VcsRootImpl(root.getId(), configChange.getSubrepoRootParams()); - if (ctx.isProcessedSubrepoChanges(subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision())) + for (HgSubrepoConfigChange configChange : subrepoConfigChanges) { + SubRepo current = configChange.getCurrent(); + assert current != null; + + String subrepoUrl = current.url(); + String curRevision = current.revision(); + List<String> prevRevisions = new ArrayList<String>(0); + for (SubRepo prevSubrepo : configChange.getPrevious()) { + prevRevisions.add(prevSubrepo.revision()); + } + String path = configChange.getPath(); + + Map<String, String> subrepoParams = new HashMap<String, String>(hgRoot.getProperties()); + subrepoParams.put(Constants.REPOSITORY_PROP, subrepoUrl); + subrepoParams.put("teamcity.internal.subrepo", "true"); + subrepoParams.put("teamcity.internal.subrepo.path", path); + + VcsRootImpl subrepo = new VcsRootImpl(root.getId(), subrepoParams); + if (ctx.isProcessedSubrepoChanges(subrepo, prevRevisions, curRevision)) continue; - List<ModificationData> subChanges = collectChanges(ctx, subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision(), CheckoutRules.DEFAULT); + List<ModificationData> subChanges = collectChanges(ctx, subrepo, prevRevisions, curRevision, CheckoutRules.DEFAULT); for (ModificationData m : subChanges) { if (!ctx.isReportedModification(m)) { subrepoChanges.add(m); ctx.markAsReported(m); } } - ctx.markProcessedSubrepoChanges(subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision()); + ctx.markProcessedSubrepoChanges(subrepo, prevRevisions, curRevision); } List<ModificationData> subSubrepoChanges = getSubrepoChanges(ctx, root, subrepoChanges); @@ -327,8 +343,8 @@ } - private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull List<ModificationData> mainRootChanges) throws VcsException { - List<SubrepoConfigChange> subrepoConfigChanges = new ArrayList<SubrepoConfigChange>(); + private List<HgSubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull List<ModificationData> mainRootChanges) throws VcsException { + List<HgSubrepoConfigChange> subrepoConfigChanges = new ArrayList<HgSubrepoConfigChange>(); for (ModificationData m : mainRootChanges) { subrepoConfigChanges.addAll(getSubrepoConfigChanges(ctx, m)); } @@ -337,34 +353,29 @@ @NotNull - private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull ModificationData m) throws VcsException { - List<SubrepoConfigChange> configChanges = new ArrayList<SubrepoConfigChange>(); + private List<HgSubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull ModificationData m) throws VcsException { + List<HgSubrepoConfigChange> configChanges = new ArrayList<HgSubrepoConfigChange>(); HgVcsRoot mainRoot = myHgVcsRootFactory.createHgRoot(m.getVcsRoot()); ServerHgRepo repo = myVcs.createRepo(ctx, mainRoot); - try { - for (HgSubrepoConfigChange c : repo.getSubrepoConfigChanges(m.getVersion(), m.getParentRevisions())) { - if (!(c.subrepoUrlChanged() || c.subrepoAdded() || c.subrepoRemoved())) { + for (HgSubrepoConfigChange c : repo.getSubrepoConfigChanges(m.getVersion(), m.getParentRevisions())) { + if (!(c.subrepoUrlChanged() || c.subrepoAdded() || c.subrepoRemoved())) {//report only changes in revisions, because we collect changes only for such changes + //map url and path, relative to the main repository + try { SubRepo currentSubrepo = c.getCurrent(); assert currentSubrepo != null; String subrepoUrl = ctx.getStringFromPool(currentSubrepo.resolveUrl(mainRoot.getRepository())); String curRevision = ctx.getStringFromPool(currentSubrepo.revision()); - List<String> prevRevisions = new ArrayList<String>(0); - for (SubRepo prevSubrepo : c.getPrevious()) { - prevRevisions.add(ctx.getStringFromPool(prevSubrepo.revision())); - } + List<SubRepo> prevSubrepos = new ArrayList<SubRepo>(0); String path = ctx.getStringFromPool(mainRoot.expandSubrepoPath(c.getPath())); - configChanges.add(new SubrepoConfigChange(mainRoot) - .setSubrepoPath(ctx.getStringFromPool(path)) - .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, subrepoUrl) - .setSubrepoRootParamDiff("teamcity.internal.subrepo", "true") - .setSubrepoRootParamDiff("teamcity.internal.subrepo.path", path) - .setCurrentSubrepoRevision(curRevision) - .setPreviousSubrepoRevisions(prevRevisions)); + for (SubRepo prevSubrepo : c.getPrevious()) { + prevSubrepos.add(new SubRepo(path, subrepoUrl, ctx.getStringFromPool(prevSubrepo.revision()))); + } + configChanges.add(new HgSubrepoConfigChange(path, prevSubrepos, new SubRepo(path, subrepoUrl, curRevision))); + } catch (URISyntaxException e) { + throw new VcsException(e); } } - } catch (URISyntaxException e) { - throw new VcsException(e); } return configChanges; }