annotate mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java @ 574:0b7e05418aa2

Reuse empty maps to reduce memory
author Dmitry Neverov <dmitry.neverov@jetbrains.com>
date Wed, 27 Mar 2013 13:07:02 +0400
parents 333a1ddcbf94
children 0dfa9ed1039a
rev   line source
567
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
1 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
2
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
3 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.*;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
4 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.UnknownRevisionException;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
5 import jetbrains.buildServer.log.Loggers;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
6 import jetbrains.buildServer.serverSide.impl.LogUtil;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
7 import jetbrains.buildServer.vcs.*;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
8 import jetbrains.buildServer.vcs.impl.VcsRootImpl;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
9 import org.jetbrains.annotations.NotNull;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
10 import org.jetbrains.annotations.Nullable;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
11
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
12 import java.net.URISyntaxException;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
13 import java.util.*;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
14
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
15 import static java.util.Arrays.asList;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
16 import static java.util.Collections.emptyList;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
17 import static java.util.Collections.emptyMap;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
18
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
19 public class MercurialCollectChangesPolicy implements CollectChangesBetweenRoots, CollectChangesBetweenRepositories {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
20
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
21 private final MercurialVcsSupport myVcs;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
22 private final ServerPluginConfig myConfig;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
23 private final HgVcsRootFactory myHgVcsRootFactory;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
24 private final RepoFactory myRepoFactory;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
25 private final HgPathProvider myHgPathProvider;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
26
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
27
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
28 public MercurialCollectChangesPolicy(@NotNull MercurialVcsSupport vcs,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
29 @NotNull ServerPluginConfig config,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
30 @NotNull HgVcsRootFactory hgVcsRootFactory,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
31 @NotNull RepoFactory repoFactory,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
32 @NotNull HgPathProvider hgPathProvider) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
33 myVcs = vcs;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
34 myConfig = config;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
35 myHgVcsRootFactory = hgVcsRootFactory;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
36 myRepoFactory = repoFactory;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
37 myHgPathProvider = hgPathProvider;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
38 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
39
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
40
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
41 @NotNull
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
42 public RepositoryStateData getCurrentState(@NotNull VcsRoot root) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
43 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
44 myVcs.syncRepository(hgRoot);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
45 Map<String, String> revisions = new HashMap<String, String>();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
46 revisions.putAll(getBookmarkRevisions(hgRoot));
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
47 revisions.putAll(getBranchesRevisions(hgRoot));
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
48 String defaultBranchName = hgRoot.getBranchName();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
49 if (revisions.get(defaultBranchName) == null) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
50 throw new VcsException("Cannot find revision of the default branch '" +
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
51 defaultBranchName + "' of vcs root " + LogUtil.describe(root));
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
52 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
53 return RepositoryStateData.createVersionState(defaultBranchName, revisions);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
54 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
55
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
56
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
57 @NotNull
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
58 private Map<String, String> getBranchesRevisions(@NotNull HgVcsRoot root) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
59 HgRepo repo = myVcs.createRepo(root);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
60 return repo.branches().call();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
61 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
62
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
63
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
64 @NotNull
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
65 private Map<String, String> getBookmarkRevisions(@NotNull HgVcsRoot root) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
66 ServerHgRepo repo = myVcs.createRepo(root);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
67 if (!myConfig.bookmarksEnabled())
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
68 return emptyMap();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
69 HgVersion version = repo.version().call();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
70 if (!version.isEqualsOrGreaterThan(BookmarksCommand.REQUIRED_HG_VERSION))
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
71 return emptyMap();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
72 return repo.bookmarks().call();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
73 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
74
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
75
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
76 @NotNull
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
77 public List<ModificationData> collectChanges(@NotNull VcsRoot fromRoot,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
78 @NotNull RepositoryStateData fromState,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
79 @NotNull VcsRoot toRoot,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
80 @NotNull RepositoryStateData toState,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
81 @NotNull CheckoutRules rules) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
82 return collectChanges(toRoot, fromState, toState, rules);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
83 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
84
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
85
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
86 @NotNull
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
87 public List<ModificationData> collectChanges(@NotNull VcsRoot root,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
88 @NotNull RepositoryStateData fromState,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
89 @NotNull RepositoryStateData toState,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
90 @NotNull CheckoutRules rules) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
91 List<ModificationData> changes = new ArrayList<ModificationData>();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
92 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
93 OperationContext ctx = new OperationContext(myVcs, myRepoFactory, myHgPathProvider, fromState, toState);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
94 for (Map.Entry<String, String> entry : toState.getBranchRevisions().entrySet()) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
95 String branch = entry.getKey();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
96 String toRevision = entry.getValue();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
97 String fromRevision = fromState.getBranchRevisions().get(branch);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
98 if (fromRevision == null)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
99 fromRevision = fromState.getBranchRevisions().get(fromState.getDefaultBranchName());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
100 if (toRevision.equals(fromRevision) || fromRevision == null)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
101 continue;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
102
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
103 Collection<String> fromRevisions = ctx.getFromRevisionsForBranch(hgRoot, fromRevision, toRevision);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
104 List<ModificationData> branchChanges = collectChanges(ctx, root, fromRevisions, toRevision, rules);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
105 for (ModificationData change : branchChanges) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
106 if (!ctx.isReportedModification(change)) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
107 changes.add(change);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
108 ctx.markAsReported(change);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
109 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
110 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
111 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
112 changes.addAll(getSubrepoChanges(ctx, root, changes));
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
113 return changes;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
114 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
115
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
116
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
117 @NotNull
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
118 public List<ModificationData> collectChanges(@NotNull VcsRoot fromRoot,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
119 @NotNull String fromRootRevision,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
120 @NotNull VcsRoot toRoot,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
121 @Nullable String toRootRevision,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
122 @NotNull CheckoutRules checkoutRules) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
123 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(toRoot);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
124 myVcs.syncRepository(hgRoot);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
125 String toRevision = toRootRevision != null ? toRootRevision : myVcs.getCurrentVersion(toRoot);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
126 String mergeBase = getMergeBase(hgRoot, fromRootRevision, toRevision);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
127 if (mergeBase == null)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
128 return Collections.emptyList();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
129 return collectChanges(toRoot, mergeBase, toRootRevision, checkoutRules);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
130 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
131
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
132
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
133 public List<ModificationData> collectChanges(@NotNull VcsRoot root,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
134 @NotNull String fromVersion,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
135 @Nullable String currentVersion,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
136 @NotNull CheckoutRules checkoutRules) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
137 if (currentVersion == null)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
138 return emptyList();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
139 OperationContext ctx = new OperationContext(myVcs, myRepoFactory, myHgPathProvider, fromVersion, currentVersion);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
140 List<ModificationData> changes = collectChanges(ctx, root, asList(fromVersion), currentVersion, checkoutRules);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
141 changes.addAll(getSubrepoChanges(ctx, root, changes));
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
142 return changes;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
143 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
144
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
145
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
146 @Nullable
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
147 private String getMergeBase(@NotNull HgVcsRoot root, @NotNull String revision1, @NotNull String revision2) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
148 String result = myVcs.createRepo(root).mergeBase()
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
149 .revision1(revision1)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
150 .revision2(revision2)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
151 .call();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
152 if (result == null)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
153 result = getMinusNthCommit(root, 10);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
154 return result;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
155 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
156
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
157
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
158 @Nullable
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
159 private String getMinusNthCommit(@NotNull HgVcsRoot root, int n) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
160 LogCommand log = myVcs.createRepo(root).log()
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
161 .inBranch(root.getBranchName())
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
162 .toNamedRevision(root.getBranchName());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
163 if (n > 0)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
164 log.setLimit(n);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
165 List<ChangeSet> changeSets = log.call();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
166 if (changeSets.isEmpty())
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
167 return null;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
168 return changeSets.get(0).getId();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
169 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
170
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
171
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
172 private List<ModificationData> collectChanges(@NotNull OperationContext ctx,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
173 @NotNull VcsRoot root,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
174 @NotNull Collection<String> fromVersion,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
175 @Nullable String currentVersion,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
176 @NotNull CheckoutRules checkoutRules) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
177 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
178 ctx.syncRepository(hgRoot);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
179 List<ModificationData> result = new ArrayList<ModificationData>();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
180 for (ChangeSet cset : getChangesets(ctx, hgRoot, fromVersion, currentVersion)) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
181 result.add(createModificationData(ctx, cset, root, checkoutRules));
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
182 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
183 return result;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
184 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
185
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
186
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
187 @NotNull
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
188 private List<ChangeSet> getChangesets(@NotNull OperationContext ctx,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
189 @NotNull final HgVcsRoot root,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
190 @NotNull final Collection<String> fromVersions,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
191 @Nullable final String toVersion) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
192 if (toVersion == null)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
193 return emptyList();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
194 List<String> fromCommits = new ArrayList<String>();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
195 for (String fromVersion : fromVersions) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
196 fromCommits.add(new ChangeSetRevision(fromVersion).getId());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
197 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
198 String toCommit = new ChangeSetRevision(toVersion).getId();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
199 try {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
200 ServerHgRepo repo = myVcs.createRepo(ctx, root);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
201 List<ChangeSet> csets = repo.collectChanges(root)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
202 .fromRevision(fromCommits)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
203 .toRevision(toCommit)
568
333a1ddcbf94 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 567
diff changeset
204 .includeFromRevision(ctx.includeFromRevisions())
567
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
205 .call();
568
333a1ddcbf94 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 567
diff changeset
206 if (!ctx.includeFromRevisions()) {
333a1ddcbf94 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 567
diff changeset
207 Iterator<ChangeSet> iter = csets.iterator();
333a1ddcbf94 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 567
diff changeset
208 while (iter.hasNext()) {
333a1ddcbf94 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 567
diff changeset
209 ChangeSet cset = iter.next();
333a1ddcbf94 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 567
diff changeset
210 if (fromVersions.contains(cset.getId()))
333a1ddcbf94 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 567
diff changeset
211 iter.remove();
333a1ddcbf94 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 567
diff changeset
212 }
567
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
213 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
214 return csets;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
215 } catch (UnknownRevisionException e) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
216 Loggers.VCS.warn("Revision '" + e.getRevision() + "' is unknown, will return no changes");
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
217 return emptyList();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
218 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
219 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
220
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
221
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
222 private ModificationData createModificationData(@NotNull OperationContext ctx,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
223 @NotNull final ChangeSet cset,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
224 @NotNull final VcsRoot root,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
225 @NotNull final CheckoutRules checkoutRules) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
226 List<ChangeSetRevision> parents = cset.getParents();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
227 if (parents.isEmpty())
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
228 throw new IllegalStateException("Commit " + cset.getId() + " has no parents");
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
229 List<VcsChange> files = toVcsChanges(cset.getModifiedFiles(), parents.get(0).getId(), cset.getId(), checkoutRules);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
230 final ModificationData result = new ModificationData(cset.getTimestamp(), files, cset.getDescription(), cset.getUser(), root, cset.getId(), cset.getId());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
231 for (ChangeSetRevision parent : parents) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
232 result.addParentRevision(parent.getId());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
233 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
234 setCanBeIgnored(result, cset);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
235 result.setAttributes(getAttributes(ctx, root, cset));
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
236 return result;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
237 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
238
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
239
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
240 private void setCanBeIgnored(@NotNull ModificationData md, @NotNull ChangeSet cset) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
241 if (md.getParentRevisions().size() > 1) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
242 //don't ignore merge commits
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
243 md.setCanBeIgnored(false);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
244 } else if (cset.getModifiedFiles().isEmpty()) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
245 //don't ignore empty commits
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
246 md.setCanBeIgnored(false);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
247 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
248 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
249
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
250
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
251 private List<VcsChange> toVcsChanges(final List<FileStatus> modifiedFiles, String prevVer, String curVer, CheckoutRules rules) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
252 List<VcsChange> files = new ArrayList<VcsChange>();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
253 for (FileStatus mf: modifiedFiles) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
254 final String path = rules.map(mf.getPath());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
255 if (shouldInclude(path))
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
256 files.add(toVcsChange(mf, prevVer, curVer, path));
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
257 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
258 return files;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
259 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
260
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
261
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
262 private boolean shouldInclude(String path) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
263 return path != null;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
264 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
265
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
266
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
267 private VcsChange toVcsChange(FileStatus mf, String prevVer, String curVer, String mappedPath) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
268 String normalizedPath = PathUtil.normalizeSeparator(mf.getPath());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
269 VcsChangeInfo.Type changeType = getChangeType(mf.getStatus());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
270 if (changeType == null) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
271 Loggers.VCS.warn("Unable to convert status: " + mf.getStatus() + " to VCS change type");
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
272 changeType = VcsChangeInfo.Type.NOT_CHANGED;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
273 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
274 return new VcsChange(changeType, mf.getStatus().getName(), normalizedPath, mappedPath, prevVer, curVer);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
275 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
276
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
277
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
278 private VcsChangeInfo.Type getChangeType(final Status status) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
279 switch (status) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
280 case ADDED:return VcsChangeInfo.Type.ADDED;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
281 case MODIFIED:return VcsChangeInfo.Type.CHANGED;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
282 case REMOVED:return VcsChangeInfo.Type.REMOVED;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
283 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
284 return null;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
285 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
286
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
287
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
288 @NotNull
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
289 private List<ModificationData> getSubrepoChanges(@NotNull OperationContext ctx, @NotNull VcsRoot root, @NotNull List<ModificationData> changes) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
290 if (changes.isEmpty())
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
291 return emptyList();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
292
568
333a1ddcbf94 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 567
diff changeset
293 ctx.setIncludeFromRevisions(true);
333a1ddcbf94 Changes from subrepos should include from revisions otherwise TeamCity doesn't show them in UI
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 567
diff changeset
294
567
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
295 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
296 if (!detectSubrepoChanges(hgRoot))
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
297 return emptyList();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
298
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
299 List<SubrepoConfigChange> subrepoConfigChanges = getSubrepoConfigChanges(changes);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
300 List<ModificationData> subrepoChanges = new ArrayList<ModificationData>();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
301
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
302 for (SubrepoConfigChange configChange : subrepoConfigChanges) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
303 VcsRootImpl subrepo = new VcsRootImpl(root.getId(), configChange.getSubrepoRootParams());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
304 if (ctx.isProcessedSubrepoChanges(subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision()))
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
305 continue;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
306 List<ModificationData> subChanges = collectChanges(ctx, subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision(), CheckoutRules.DEFAULT);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
307 for (ModificationData m : subChanges) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
308 if (!ctx.isReportedModification(m)) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
309 subrepoChanges.add(m);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
310 ctx.markAsReported(m);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
311 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
312 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
313 ctx.markProcessedSubrepoChanges(subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
314 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
315
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
316 List<ModificationData> subSubrepoChanges = getSubrepoChanges(ctx, root, subrepoChanges);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
317 subrepoChanges.addAll(subSubrepoChanges);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
318 return subrepoChanges;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
319 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
320
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
321
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
322 private boolean detectSubrepoChanges(@NotNull HgVcsRoot root) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
323 return myConfig.detectSubrepoChanges() && root.detectSubrepoChanges();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
324 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
325
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
326
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
327 private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull List<ModificationData> mainRootChanges) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
328 List<SubrepoConfigChange> subrepoConfigChanges = new ArrayList<SubrepoConfigChange>();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
329 for (ModificationData m : mainRootChanges) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
330 subrepoConfigChanges.addAll(getSubrepoConfigChanges(m));
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
331 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
332 return subrepoConfigChanges;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
333 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
334
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
335
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
336 private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull ModificationData m) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
337 List<SubrepoConfigChange> configChanges = new ArrayList<SubrepoConfigChange>();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
338 for (SubrepoConfigChange configChange : SubrepoConfigChangesAttributes.readSubrepoConfigChanges(m.getAttributes())) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
339 if (configChange.getSubrepoRootParams().isEmpty())
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
340 continue;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
341 if (configChange.getPreviousSubrepoRevisions().isEmpty())
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
342 continue;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
343 configChanges.add(configChange);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
344 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
345 return configChanges;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
346 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
347
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
348
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
349 @NotNull
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
350 private Map<String, String> getAttributes(@NotNull OperationContext ctx, @NotNull VcsRoot mainRoot, @NotNull ChangeSet cset) throws VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
351 Map<String, String> attributes = new HashMap<String, String>();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
352 HgVcsRoot root = myHgVcsRootFactory.createHgRoot(mainRoot);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
353 if (detectSubrepoChanges(root)) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
354 try {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
355 ServerHgRepo repo = myVcs.createRepo(ctx, root);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
356 SubrepoConfigChangesAttributes builder = new SubrepoConfigChangesAttributes();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
357 for (HgSubrepoConfigChange c : repo.getSubrepoConfigChanges(cset)) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
358 fillSubrepoConfigChanges(builder, root, c);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
359 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
360 attributes.putAll(builder.buildAttributes());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
361 } catch (Exception e) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
362 Loggers.VCS.warn("Error while reporting subrepo config changes", e);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
363 if (e instanceof VcsExtension)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
364 throw (VcsException) e;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
365 throw new VcsException(e);
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
366 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
367 }
574
0b7e05418aa2 Reuse empty maps to reduce memory
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 568
diff changeset
368 if (attributes.isEmpty())
0b7e05418aa2 Reuse empty maps to reduce memory
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 568
diff changeset
369 return emptyMap();
567
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
370 return attributes;
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
371 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
372
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
373
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
374 private void fillSubrepoConfigChanges(@NotNull SubrepoConfigChangesAttributes builder,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
375 @NotNull HgVcsRoot mainRoot,
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
376 @NotNull HgSubrepoConfigChange c) throws URISyntaxException, VcsException {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
377 List<String> prevRevisions = new ArrayList<String>();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
378 if (!(c.subrepoUrlChanged() || c.subrepoAdded() || c.subrepoRemoved())) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
379 String subrepoUrl = c.getCurrent().resolveUrl(mainRoot.getRepository());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
380 String curRevision = c.getCurrent().revision();
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
381 for (SubRepo prevSubrepo : c.getPrevious()) {
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
382 prevRevisions.add(prevSubrepo.revision());
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
383 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
384 builder.addSubrepoConfigChange(new SubrepoConfigChange(mainRoot)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
385 .setSubrepoPath(c.getPath())
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
386 .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, subrepoUrl)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
387 .setCurrentSubrepoRevision(curRevision)
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
388 .setPreviousSubrepoRevisions(prevRevisions));
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
389 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
390 }
27cd2503cea3 Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
391 }