Mercurial > hg > mercurial
annotate mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCollectChangesPolicy.java @ 611:a6c708e5bb10
TW-30920 - never use path returned by CheckoutRules.map() method + fix in exception handler
author | Pavel.Sher |
---|---|
date | Wed, 24 Jul 2013 17:19:53 +0200 |
parents | 6c480513e5c2 |
children | da9ab34663d8 |
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 |
600
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
20 private final static AscendingRevNums ASCENDING_REV_NUMS = new AscendingRevNums(); |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
21 |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
22 private final MercurialVcsSupport myVcs; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
23 private final ServerPluginConfig myConfig; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
24 private final HgVcsRootFactory myHgVcsRootFactory; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
25 private final RepoFactory myRepoFactory; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
26 private final HgPathProvider myHgPathProvider; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
29 public MercurialCollectChangesPolicy(@NotNull MercurialVcsSupport vcs, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
30 @NotNull ServerPluginConfig config, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
31 @NotNull HgVcsRootFactory hgVcsRootFactory, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
32 @NotNull RepoFactory repoFactory, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
33 @NotNull HgPathProvider hgPathProvider) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
34 myVcs = vcs; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
35 myConfig = config; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
36 myHgVcsRootFactory = hgVcsRootFactory; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
37 myRepoFactory = repoFactory; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
38 myHgPathProvider = hgPathProvider; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
42 @NotNull |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
43 public RepositoryStateData getCurrentState(@NotNull VcsRoot root) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
44 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
45 myVcs.syncRepository(hgRoot); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
46 Map<String, String> revisions = new HashMap<String, String>(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
47 revisions.putAll(getBookmarkRevisions(hgRoot)); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
48 revisions.putAll(getBranchesRevisions(hgRoot)); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
49 String defaultBranchName = hgRoot.getBranchName(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
50 if (revisions.get(defaultBranchName) == null) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
51 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
|
52 defaultBranchName + "' of vcs root " + myVcs.describeVcsRoot(root)); |
567
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 return RepositoryStateData.createVersionState(defaultBranchName, revisions); |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
58 @NotNull |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
59 private Map<String, String> getBranchesRevisions(@NotNull HgVcsRoot root) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
60 HgRepo repo = myVcs.createRepo(root); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
61 return repo.branches().call(); |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
65 @NotNull |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
66 private Map<String, String> getBookmarkRevisions(@NotNull HgVcsRoot root) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
67 ServerHgRepo repo = myVcs.createRepo(root); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
68 if (!myConfig.bookmarksEnabled()) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
69 return emptyMap(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
70 HgVersion version = repo.version().call(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
71 if (!version.isEqualsOrGreaterThan(BookmarksCommand.REQUIRED_HG_VERSION)) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
72 return emptyMap(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
73 return repo.bookmarks().call(); |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
77 @NotNull |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
78 public List<ModificationData> collectChanges(@NotNull VcsRoot fromRoot, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
79 @NotNull RepositoryStateData fromState, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
80 @NotNull VcsRoot toRoot, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
81 @NotNull RepositoryStateData toState, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
82 @NotNull CheckoutRules rules) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
83 return collectChanges(toRoot, fromState, toState, rules); |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
87 @NotNull |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
88 public List<ModificationData> collectChanges(@NotNull VcsRoot root, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
89 @NotNull RepositoryStateData fromState, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
90 @NotNull RepositoryStateData toState, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
91 @NotNull CheckoutRules rules) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
92 List<ModificationData> changes = new ArrayList<ModificationData>(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
93 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
94 OperationContext ctx = new OperationContext(myVcs, myRepoFactory, myHgPathProvider, fromState, toState); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
95 for (Map.Entry<String, String> entry : toState.getBranchRevisions().entrySet()) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
96 String branch = entry.getKey(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
97 String toRevision = entry.getValue(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
98 String fromRevision = fromState.getBranchRevisions().get(branch); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
99 if (fromRevision == null) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
100 fromRevision = fromState.getBranchRevisions().get(fromState.getDefaultBranchName()); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
101 if (toRevision.equals(fromRevision) || fromRevision == null) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
102 continue; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
103 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
104 Collection<String> fromRevisions = ctx.getFromRevisionsForBranch(hgRoot, fromRevision, toRevision); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
105 List<ModificationData> branchChanges = collectChanges(ctx, root, fromRevisions, toRevision, rules); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
106 for (ModificationData change : branchChanges) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
107 if (!ctx.isReportedModification(change)) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
108 changes.add(change); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
109 ctx.markAsReported(change); |
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 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
113 changes.addAll(getSubrepoChanges(ctx, root, changes)); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
114 return changes; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
118 @NotNull |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
119 public List<ModificationData> collectChanges(@NotNull VcsRoot fromRoot, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
120 @NotNull String fromRootRevision, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
121 @NotNull VcsRoot toRoot, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
122 @Nullable String toRootRevision, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
123 @NotNull CheckoutRules checkoutRules) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
124 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(toRoot); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
125 myVcs.syncRepository(hgRoot); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
126 String toRevision = toRootRevision != null ? toRootRevision : myVcs.getCurrentVersion(toRoot); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
127 String mergeBase = getMergeBase(hgRoot, fromRootRevision, toRevision); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
128 if (mergeBase == null) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
129 return Collections.emptyList(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
130 return collectChanges(toRoot, mergeBase, toRootRevision, checkoutRules); |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
134 public List<ModificationData> collectChanges(@NotNull VcsRoot root, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
135 @NotNull String fromVersion, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
136 @Nullable String currentVersion, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
137 @NotNull CheckoutRules checkoutRules) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
138 if (currentVersion == null) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
139 return emptyList(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
140 OperationContext ctx = new OperationContext(myVcs, myRepoFactory, myHgPathProvider, fromVersion, currentVersion); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
141 List<ModificationData> changes = collectChanges(ctx, root, asList(fromVersion), currentVersion, checkoutRules); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
142 changes.addAll(getSubrepoChanges(ctx, root, changes)); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
143 return changes; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
147 @Nullable |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
148 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
|
149 String result = myVcs.createRepo(root).mergeBase() |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
150 .revision1(revision1) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
151 .revision2(revision2) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
152 .call(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
153 if (result == null) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
154 result = getMinusNthCommit(root, 10); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
155 return result; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
159 @Nullable |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
160 private String getMinusNthCommit(@NotNull HgVcsRoot root, int n) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
161 LogCommand log = myVcs.createRepo(root).log() |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
162 .inBranch(root.getBranchName()) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
163 .toNamedRevision(root.getBranchName()); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
164 if (n > 0) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
165 log.setLimit(n); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
166 List<ChangeSet> changeSets = log.call(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
167 if (changeSets.isEmpty()) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
168 return null; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
169 return changeSets.get(0).getId(); |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
173 private List<ModificationData> collectChanges(@NotNull OperationContext ctx, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
174 @NotNull VcsRoot root, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
175 @NotNull Collection<String> fromVersion, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
176 @Nullable String currentVersion, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
177 @NotNull CheckoutRules checkoutRules) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
178 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
179 ctx.syncRepository(hgRoot); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
180 List<ModificationData> result = new ArrayList<ModificationData>(); |
600
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
181 List<ChangeSet> csets = getChangesets(ctx, hgRoot, fromVersion, currentVersion); |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
182 //When commit has no changes in subrepo configuration we can reuse |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
183 //subrepo revision table calculated for its parent commit(s). To do |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
184 //that parents should be processed before children: |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
185 Collections.sort(csets, ASCENDING_REV_NUMS); |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
186 for (ChangeSet cset : csets) { |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
187 result.add(createModificationData(ctx, cset, root, checkoutRules)); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
188 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
189 return result; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
190 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
191 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
192 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
193 @NotNull |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
194 private List<ChangeSet> getChangesets(@NotNull OperationContext ctx, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
195 @NotNull final HgVcsRoot root, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
196 @NotNull final Collection<String> fromVersions, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
197 @Nullable final String toVersion) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
198 if (toVersion == null) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
199 return emptyList(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
200 List<String> fromCommits = new ArrayList<String>(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
201 for (String fromVersion : fromVersions) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
202 fromCommits.add(new ChangeSetRevision(fromVersion).getId()); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
203 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
204 String toCommit = new ChangeSetRevision(toVersion).getId(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
205 try { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
206 ServerHgRepo repo = myVcs.createRepo(ctx, root); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
207 List<ChangeSet> csets = repo.collectChanges(root) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
208 .fromRevision(fromCommits) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
209 .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
|
210 .includeFromRevision(ctx.includeFromRevisions()) |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
211 .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
|
212 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
|
213 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
|
214 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
|
215 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
|
216 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
|
217 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
|
218 } |
567
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 return csets; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
221 } catch (UnknownRevisionException e) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
222 Loggers.VCS.warn("Revision '" + e.getRevision() + "' is unknown, will return no changes"); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
223 return emptyList(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
224 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
225 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
226 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
227 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
228 private ModificationData createModificationData(@NotNull OperationContext ctx, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
229 @NotNull final ChangeSet cset, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
230 @NotNull final VcsRoot root, |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
231 @NotNull final CheckoutRules checkoutRules) throws VcsException { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
232 List<ChangeSetRevision> parents = cset.getParents(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
233 if (parents.isEmpty()) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
234 throw new IllegalStateException("Commit " + cset.getId() + " has no parents"); |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
235 String version = ctx.getStringFromPool(cset.getId()); |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
236 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
|
237 final ModificationData result = new ModificationData(cset.getTimestamp(), files, cset.getDescription(), |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
238 ctx.getStringFromPool(cset.getUser()), root, version, version); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
239 for (ChangeSetRevision parent : parents) { |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
240 result.addParentRevision(ctx.getStringFromPool(parent.getId())); |
567
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 setCanBeIgnored(result, cset); |
600
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
243 result.setAttributes(getAttributes(ctx, root, result)); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
244 return result; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
245 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
246 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
247 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
248 private void setCanBeIgnored(@NotNull ModificationData md, @NotNull ChangeSet cset) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
249 if (md.getParentRevisions().size() > 1) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
250 //don't ignore merge commits |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
251 md.setCanBeIgnored(false); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
252 } else if (cset.getModifiedFiles().isEmpty()) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
253 //don't ignore empty commits |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
254 md.setCanBeIgnored(false); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
255 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
256 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
257 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
258 |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
259 private List<VcsChange> toVcsChanges(@NotNull OperationContext ctx, |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
260 @NotNull List<FileStatus> modifiedFiles, |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
261 @NotNull String prevVer, |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
262 @NotNull String curVer, |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
263 @NotNull CheckoutRules rules) { |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
264 List<VcsChange> files = new ArrayList<VcsChange>(0); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
265 for (FileStatus mf: modifiedFiles) { |
611
a6c708e5bb10
TW-30920 - never use path returned by CheckoutRules.map() method + fix in exception handler
Pavel.Sher
parents:
600
diff
changeset
|
266 if (rules.map(mf.getPath()) == null) |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
267 continue; |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
268 String normalizedPath = PathUtil.normalizeSeparator(mf.getPath()); |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
269 VcsChangeInfo.Type changeType = getChangeType(mf.getStatus()); |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
270 if (changeType == null) { |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
271 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
|
272 changeType = VcsChangeInfo.Type.NOT_CHANGED; |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
273 } |
611
a6c708e5bb10
TW-30920 - never use path returned by CheckoutRules.map() method + fix in exception handler
Pavel.Sher
parents:
600
diff
changeset
|
274 String path = ctx.getStringFromPool(normalizedPath); |
a6c708e5bb10
TW-30920 - never use path returned by CheckoutRules.map() method + fix in exception handler
Pavel.Sher
parents:
600
diff
changeset
|
275 files.add(new VcsChange(changeType, mf.getStatus().getName(), path, path, prevVer, curVer)); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
276 } |
576
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
277 if (files.isEmpty()) |
0dfa9ed1039a
Reuse strings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
574
diff
changeset
|
278 return emptyList(); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
279 return files; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
283 private VcsChangeInfo.Type getChangeType(final Status status) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
284 switch (status) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
285 case ADDED:return VcsChangeInfo.Type.ADDED; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
286 case MODIFIED:return VcsChangeInfo.Type.CHANGED; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
287 case REMOVED:return VcsChangeInfo.Type.REMOVED; |
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 return null; |
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
293 @NotNull |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
294 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
|
295 if (changes.isEmpty()) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
296 return emptyList(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
297 |
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
|
298 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
|
299 |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
300 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
301 if (!detectSubrepoChanges(hgRoot)) |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
302 return emptyList(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
303 |
595
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
304 List<HgSubrepoConfigChange> subrepoConfigChanges = getSubrepoConfigChanges(ctx, changes); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
305 List<ModificationData> subrepoChanges = new ArrayList<ModificationData>(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
306 |
595
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
307 for (HgSubrepoConfigChange configChange : subrepoConfigChanges) { |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
308 SubRepo current = configChange.getCurrent(); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
309 assert current != null; |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
310 |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
311 String subrepoUrl = current.url(); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
312 String curRevision = current.revision(); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
313 List<String> prevRevisions = new ArrayList<String>(0); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
314 for (SubRepo prevSubrepo : configChange.getPrevious()) { |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
315 prevRevisions.add(prevSubrepo.revision()); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
316 } |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
317 String path = configChange.getPath(); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
318 |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
319 Map<String, String> subrepoParams = new HashMap<String, String>(hgRoot.getProperties()); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
320 subrepoParams.put(Constants.REPOSITORY_PROP, subrepoUrl); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
321 subrepoParams.put("teamcity.internal.subrepo", "true"); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
322 subrepoParams.put("teamcity.internal.subrepo.path", path); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
323 |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
324 VcsRootImpl subrepo = new VcsRootImpl(root.getId(), subrepoParams); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
325 if (ctx.isProcessedSubrepoChanges(subrepo, prevRevisions, curRevision)) |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
326 continue; |
595
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
327 List<ModificationData> subChanges = collectChanges(ctx, subrepo, prevRevisions, curRevision, CheckoutRules.DEFAULT); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
328 for (ModificationData m : subChanges) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
329 if (!ctx.isReportedModification(m)) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
330 subrepoChanges.add(m); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
331 ctx.markAsReported(m); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
332 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
333 } |
595
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
334 ctx.markProcessedSubrepoChanges(subrepo, prevRevisions, curRevision); |
567
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 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
337 List<ModificationData> subSubrepoChanges = getSubrepoChanges(ctx, root, subrepoChanges); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
338 subrepoChanges.addAll(subSubrepoChanges); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
339 return subrepoChanges; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
340 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
341 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
342 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
343 private boolean detectSubrepoChanges(@NotNull HgVcsRoot root) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
344 return myConfig.detectSubrepoChanges() && root.detectSubrepoChanges(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
345 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
346 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
347 |
595
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
348 private List<HgSubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull List<ModificationData> mainRootChanges) throws VcsException { |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
349 List<HgSubrepoConfigChange> subrepoConfigChanges = new ArrayList<HgSubrepoConfigChange>(); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
350 for (ModificationData m : mainRootChanges) { |
594
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
351 subrepoConfigChanges.addAll(getSubrepoConfigChanges(ctx, m)); |
567
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 return subrepoConfigChanges; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
354 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
355 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
356 |
594
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
357 @NotNull |
595
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
358 private List<HgSubrepoConfigChange> getSubrepoConfigChanges(@NotNull OperationContext ctx, @NotNull ModificationData m) throws VcsException { |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
359 List<HgSubrepoConfigChange> configChanges = new ArrayList<HgSubrepoConfigChange>(); |
594
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
360 |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
361 HgVcsRoot mainRoot = myHgVcsRootFactory.createHgRoot(m.getVcsRoot()); |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
362 ServerHgRepo repo = myVcs.createRepo(ctx, mainRoot); |
600
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
363 for (HgSubrepoConfigChange c : repo.getSubrepoConfigChanges(m)) { |
595
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
364 if (!(c.subrepoUrlChanged() || c.subrepoAdded() || c.subrepoRemoved())) {//report only changes in revisions, because we collect changes only for such changes |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
365 //map url and path, relative to the main repository |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
366 try { |
594
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
367 SubRepo currentSubrepo = c.getCurrent(); |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
368 assert currentSubrepo != null; |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
369 String subrepoUrl = ctx.getStringFromPool(currentSubrepo.resolveUrl(mainRoot.getRepository())); |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
370 String curRevision = ctx.getStringFromPool(currentSubrepo.revision()); |
595
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
371 List<SubRepo> prevSubrepos = new ArrayList<SubRepo>(0); |
594
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
372 String path = ctx.getStringFromPool(mainRoot.expandSubrepoPath(c.getPath())); |
595
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
373 for (SubRepo prevSubrepo : c.getPrevious()) { |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
374 prevSubrepos.add(new SubRepo(path, subrepoUrl, ctx.getStringFromPool(prevSubrepo.revision()))); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
375 } |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
376 configChanges.add(new HgSubrepoConfigChange(path, prevSubrepos, new SubRepo(path, subrepoUrl, curRevision))); |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
377 } catch (URISyntaxException e) { |
f2a2bf159f4c
Eliminate SubrepoConfigChange usages
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
594
diff
changeset
|
378 throw new VcsException(e); |
594
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
379 } |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
380 } |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
381 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
382 return configChanges; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
383 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
384 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
385 |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
386 @NotNull |
600
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
387 private Map<String, String> getAttributes(@NotNull OperationContext ctx, @NotNull VcsRoot mainRoot, @NotNull ModificationData m) throws VcsException { |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
388 Map<String, String> attributes = new HashMap<String, String>(); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
389 HgVcsRoot root = myHgVcsRootFactory.createHgRoot(mainRoot); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
390 if (detectSubrepoChanges(root)) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
391 try { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
392 ServerHgRepo repo = myVcs.createRepo(ctx, root); |
593
ad112e314be5
Report subrepo revision in each commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
592
diff
changeset
|
393 SubrepoRevisionAttributesBuilder attrBuilder = new SubrepoRevisionAttributesBuilder(); |
600
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
394 for (SubRepo s : repo.getSubrepositories(m).values()) { |
594
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
395 attrBuilder.addSubrepo(new SubrepoConfig(root) |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
396 .setSubrepoPath(ctx.getStringFromPool(root.expandSubrepoPath(s.path()))) |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
397 .setSubrepoRootParamDiff(Constants.REPOSITORY_PROP, ctx.getStringFromPool(s.resolveUrl(root.getRepository()))) |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
398 .setSubrepoRootParamDiff("teamcity.internal.subrepo", "true") |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
399 .setSubrepoRootParamDiff("teamcity.internal.subrepo.path", ctx.getStringFromPool(root.expandSubrepoPath(s.path()))) |
9cbf9205208e
Do not report subrepo config changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
593
diff
changeset
|
400 .setSubrepoRevision(ctx.getStringFromPool(s.revision()))); |
593
ad112e314be5
Report subrepo revision in each commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
592
diff
changeset
|
401 } |
ad112e314be5
Report subrepo revision in each commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
592
diff
changeset
|
402 attributes.putAll(attrBuilder.buildAttributes()); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
403 } catch (Exception e) { |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
404 Loggers.VCS.warn("Error while reporting subrepo config changes", e); |
611
a6c708e5bb10
TW-30920 - never use path returned by CheckoutRules.map() method + fix in exception handler
Pavel.Sher
parents:
600
diff
changeset
|
405 if (e instanceof VcsException) |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
406 throw (VcsException) e; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
407 throw new VcsException(e); |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
408 } |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
409 } |
574
0b7e05418aa2
Reuse empty maps to reduce memory
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
568
diff
changeset
|
410 if (attributes.isEmpty()) |
0b7e05418aa2
Reuse empty maps to reduce memory
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
568
diff
changeset
|
411 return emptyMap(); |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
412 return attributes; |
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
413 } |
600
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
414 |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
415 private final static class AscendingRevNums implements Comparator<ChangeSet> { |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
416 public int compare(ChangeSet o1, ChangeSet o2) { |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
417 int revnum1 = o1.getRevNumber(); |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
418 int revnum2 = o2.getRevNumber(); |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
419 if (revnum1 < revnum2) |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
420 return -1; |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
421 if (revnum1 > revnum2) |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
422 return 1; |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
423 return 0; |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
424 } |
6c480513e5c2
Optimize subrepo changes calculation: reuse subrepo revision table calculated for parent commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
595
diff
changeset
|
425 } |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
426 } |