Mercurial > hg > mercurial
annotate mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java @ 585:d1203382ce76
Collect subrepo changes from first parent commit
Before that we collected changes between both previous
commits. It was possible that second parent had different
.hgsubstate, but first parent had the same. In web UI we show
diff with the first parent and it was confusing: .hgsubstate
wasn't changed but new subrepo changes collected.
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Thu, 11 Apr 2013 21:30:50 +0400 |
parents | 0dfa9ed1039a |
children | 87754c01d304 |
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"); |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
229 String version = ctx.getStringFromPool(cset.getId()); |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
230 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
|
231 final ModificationData result = new ModificationData(cset.getTimestamp(), files, cset.getDescription(), |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
232 ctx.getStringFromPool(cset.getUser()), root, version, version); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
233 for (ChangeSetRevision parent : parents) { |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
234 result.addParentRevision(ctx.getStringFromPool(parent.getId())); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
235 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
236 setCanBeIgnored(result, cset); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
237 result.setAttributes(getAttributes(ctx, root, cset)); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
238 return result; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
242 private void setCanBeIgnored(@NotNull ModificationData md, @NotNull ChangeSet cset) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
243 if (md.getParentRevisions().size() > 1) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
244 //don't ignore merge commits |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
245 md.setCanBeIgnored(false); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
246 } else if (cset.getModifiedFiles().isEmpty()) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
247 //don't ignore empty commits |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
248 md.setCanBeIgnored(false); |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
252 |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
253 private List<VcsChange> toVcsChanges(@NotNull OperationContext ctx, |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
254 @NotNull List<FileStatus> modifiedFiles, |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
255 @NotNull String prevVer, |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
256 @NotNull String curVer, |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
257 @NotNull CheckoutRules rules) { |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
258 List<VcsChange> files = new ArrayList<VcsChange>(0); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
259 for (FileStatus mf: modifiedFiles) { |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
260 String path = rules.map(mf.getPath()); |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
261 if (!shouldInclude(path)) |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
262 continue; |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
263 String normalizedPath = PathUtil.normalizeSeparator(mf.getPath()); |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
264 VcsChangeInfo.Type changeType = getChangeType(mf.getStatus()); |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
265 if (changeType == null) { |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
266 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
|
267 changeType = VcsChangeInfo.Type.NOT_CHANGED; |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
268 } |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
269 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
|
270 } |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
271 if (files.isEmpty()) |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
272 return emptyList(); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
273 return files; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
277 private boolean shouldInclude(String path) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
278 return path != null; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
282 private VcsChangeInfo.Type getChangeType(final Status status) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
283 switch (status) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
284 case ADDED:return VcsChangeInfo.Type.ADDED; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
285 case MODIFIED:return VcsChangeInfo.Type.CHANGED; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
286 case REMOVED:return VcsChangeInfo.Type.REMOVED; |
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 return null; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
292 @NotNull |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
293 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
|
294 if (changes.isEmpty()) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
295 return emptyList(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
296 |
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
|
297 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
|
298 |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
299 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
300 if (!detectSubrepoChanges(hgRoot)) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
301 return emptyList(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
302 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
303 List<SubrepoConfigChange> subrepoConfigChanges = getSubrepoConfigChanges(changes); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
304 List<ModificationData> subrepoChanges = new ArrayList<ModificationData>(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
305 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
306 for (SubrepoConfigChange configChange : subrepoConfigChanges) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
307 VcsRootImpl subrepo = new VcsRootImpl(root.getId(), configChange.getSubrepoRootParams()); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
308 if (ctx.isProcessedSubrepoChanges(subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision())) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
309 continue; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
310 List<ModificationData> subChanges = collectChanges(ctx, subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision(), CheckoutRules.DEFAULT); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
311 for (ModificationData m : subChanges) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
312 if (!ctx.isReportedModification(m)) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
313 subrepoChanges.add(m); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
314 ctx.markAsReported(m); |
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 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
317 ctx.markProcessedSubrepoChanges(subrepo, configChange.getPreviousSubrepoRevisions(), configChange.getCurrentSubrepoRevision()); |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
320 List<ModificationData> subSubrepoChanges = getSubrepoChanges(ctx, root, subrepoChanges); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
321 subrepoChanges.addAll(subSubrepoChanges); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
322 return subrepoChanges; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
326 private boolean detectSubrepoChanges(@NotNull HgVcsRoot root) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
327 return myConfig.detectSubrepoChanges() && root.detectSubrepoChanges(); |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
331 private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull List<ModificationData> mainRootChanges) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
332 List<SubrepoConfigChange> subrepoConfigChanges = new ArrayList<SubrepoConfigChange>(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
333 for (ModificationData m : mainRootChanges) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
334 subrepoConfigChanges.addAll(getSubrepoConfigChanges(m)); |
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 return subrepoConfigChanges; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
340 private List<SubrepoConfigChange> getSubrepoConfigChanges(@NotNull ModificationData m) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
341 List<SubrepoConfigChange> configChanges = new ArrayList<SubrepoConfigChange>(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
342 for (SubrepoConfigChange configChange : SubrepoConfigChangesAttributes.readSubrepoConfigChanges(m.getAttributes())) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
343 if (configChange.getSubrepoRootParams().isEmpty()) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
344 continue; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
345 if (configChange.getPreviousSubrepoRevisions().isEmpty()) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
346 continue; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
347 configChanges.add(configChange); |
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 return configChanges; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
353 @NotNull |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
354 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
|
355 Map<String, String> attributes = new HashMap<String, String>(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
356 HgVcsRoot root = myHgVcsRootFactory.createHgRoot(mainRoot); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
357 if (detectSubrepoChanges(root)) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
358 try { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
359 ServerHgRepo repo = myVcs.createRepo(ctx, root); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
360 SubrepoConfigChangesAttributes builder = new SubrepoConfigChangesAttributes(); |
585
d1203382ce76
Collect subrepo changes from first parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
576
diff
changeset
|
361 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
|
362 fillSubrepoConfigChanges(ctx, builder, root, c); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
363 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
364 attributes.putAll(builder.buildAttributes()); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
365 } catch (Exception e) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
366 Loggers.VCS.warn("Error while reporting subrepo config changes", e); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
367 if (e instanceof VcsExtension) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
368 throw (VcsException) e; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
369 throw new VcsException(e); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
370 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
371 } |
574
0b7e05418aa2
Reuse empty maps to reduce memory
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
568
diff
changeset
|
372 if (attributes.isEmpty()) |
0b7e05418aa2
Reuse empty maps to reduce memory
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
568
diff
changeset
|
373 return emptyMap(); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
374 return attributes; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
377 |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
378 private void fillSubrepoConfigChanges(@NotNull OperationContext ctx, |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
379 @NotNull SubrepoConfigChangesAttributes builder, |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
380 @NotNull HgVcsRoot mainRoot, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
381 @NotNull HgSubrepoConfigChange c) throws URISyntaxException, VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
382 List<String> prevRevisions = new ArrayList<String>(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
383 if (!(c.subrepoUrlChanged() || c.subrepoAdded() || c.subrepoRemoved())) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
384 String subrepoUrl = c.getCurrent().resolveUrl(mainRoot.getRepository()); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
385 String curRevision = c.getCurrent().revision(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
386 for (SubRepo prevSubrepo : c.getPrevious()) { |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
387 prevRevisions.add(ctx.getStringFromPool(prevSubrepo.revision())); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
388 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
389 builder.addSubrepoConfigChange(new SubrepoConfigChange(mainRoot) |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
390 .setSubrepoPath(ctx.getStringFromPool(c.getPath())) |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
391 .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, ctx.getStringFromPool(subrepoUrl)) |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
392 .setCurrentSubrepoRevision(ctx.getStringFromPool(curRevision)) |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
393 .setPreviousSubrepoRevisions(prevRevisions)); |
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 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
396 } |