annotate mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java @ 590:87754c01d304

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