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