Mercurial > hg > mercurial
annotate mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialCommitsInfoBuilderSupport.java @ 1024:c0c4bf1db865
TW-66329 fix
using archive command for creating full patch: previous implementation using clone produces very large overhead for big project repositories in case when settings are stored in the project repo since in case of freezing build settings, core system asks plugin to build full patch and cloning repos into temp dir even from local mirror can take tens of minutes
author | Maxim Zaytsev <Maxim.Zaytsev@jetbrains.com> |
---|---|
date | Mon, 15 Jun 2020 13:07:12 +0300 |
parents | 7bf4d943d5bb |
children | 10dc26b32c35 |
rev | line source |
---|---|
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
1 /* |
976 | 2 * Copyright 2000-2018 JetBrains s.r.o. |
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
3 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
5 * you may not use this file except in compliance with the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
6 * You may obtain a copy of the License at |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
7 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
9 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
13 * See the License for the specific language governing permissions and |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
14 * limitations under the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
15 */ |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
731
diff
changeset
|
16 |
655 | 17 package jetbrains.buildServer.buildTriggers.vcs.mercurial; |
18 | |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
19 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.CommitsAndMountPointsCommand; |
655 | 20 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot; |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
21 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.LogCommand; |
731
5becb1dfecbd
make it compile (post-merge issues)
eugene.petrenko@jetbrains.com
parents:
729
diff
changeset
|
22 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.WrongSubrepoUrlException; |
745 | 23 import jetbrains.buildServer.dataStructures.MultiMapToList; |
655 | 24 import jetbrains.buildServer.vcs.*; |
25 import org.jetbrains.annotations.NotNull; | |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
26 import org.jetbrains.annotations.Nullable; |
655 | 27 |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
28 import java.util.Date; |
745 | 29 import java.util.Map; |
655 | 30 |
31 /** | |
32 * Created 30.09.13 13:05 | |
33 * | |
34 * @author Eugene Petrenko (eugene.petrenko@jetbrains.com) | |
35 */ | |
36 public class MercurialCommitsInfoBuilderSupport implements CommitsInfoBuilder, MercurialServerExtension { | |
37 private final MercurialVcsSupport mySupport; | |
38 private final HgVcsRootFactory myHgVcsRootFactory; | |
39 | |
40 public MercurialCommitsInfoBuilderSupport(@NotNull MercurialVcsSupport vcs, | |
41 @NotNull HgVcsRootFactory vcsRootFactory) { | |
42 vcs.addExtension(this); | |
43 mySupport = vcs; | |
44 myHgVcsRootFactory = vcsRootFactory; | |
45 } | |
46 | |
745 | 47 @NotNull |
48 private static MultiMapToList<String, String> commitToBranchs(@NotNull final Map<String, String> branchToCommit) { | |
49 final MultiMapToList<String, String> map = new MultiMapToList<String, String>(); | |
50 for (Map.Entry<String, String> e : branchToCommit.entrySet()) { | |
51 map.add(e.getValue(), e.getKey()); | |
52 } | |
53 return map; | |
54 } | |
55 | |
684
7fb8ecf0d35a
update CommitsInfoBuilder service API
eugene.petrenko@gmail.com
parents:
676
diff
changeset
|
56 public void collectCommits(@NotNull final VcsRoot root, |
7fb8ecf0d35a
update CommitsInfoBuilder service API
eugene.petrenko@gmail.com
parents:
676
diff
changeset
|
57 @NotNull final CheckoutRules rules, |
7fb8ecf0d35a
update CommitsInfoBuilder service API
eugene.petrenko@gmail.com
parents:
676
diff
changeset
|
58 @NotNull final CommitsConsumer consumer) throws VcsException { |
662
c3c0ebc63d77
CommitsInfoBuilder command now returns all commits without respect to state parameter (API update will follow)
eugene.petrenko@gmail.com
parents:
655
diff
changeset
|
59 |
655 | 60 final HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
61 final ServerHgRepo repo = mySupport.createRepo(hgRoot); | |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
62 VcsCallable<MultiMapToList<String, String>> cmd = new VcsCallable<MultiMapToList<String, String>>() { |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
745
diff
changeset
|
63 public MultiMapToList<String, String> call() throws VcsException { |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
745
diff
changeset
|
64 return commitToBranchs(mySupport.getCollectChangesPolicy().getHeads(hgRoot)); |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
745
diff
changeset
|
65 } |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
66 }; |
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
67 final MultiMapToList<String, String> heads = mySupport.syncRepository(hgRoot, new SyncSettings<MultiMapToList<String, String>>(cmd)); |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
68 repo.logSubstates().call(new CommitsAndMountPointsCommand.Callback() { |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
69 private final MercurialCommitsInfoBuilderStates subs = new MercurialCommitsInfoBuilderStates(); |
655 | 70 |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
71 public void processHGSubFile(@NotNull String fileId, @NotNull String text) { |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
72 subs.addSubNode(fileId, text); |
690
e6d203e5c6e3
fix commit message and author for commits with no parents
eugene.petrenko@gmail.com
parents:
684
diff
changeset
|
73 } |
673
2d566ca0fa65
include user/message in CommitsInfoBuilder
eugene.petrenko@gmail.com
parents:
663
diff
changeset
|
74 |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
75 public void processHGSubStateFile(@NotNull String fileId, @NotNull String text) { |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
76 subs.addStateNode(fileId, text); |
684
7fb8ecf0d35a
update CommitsInfoBuilder service API
eugene.petrenko@gmail.com
parents:
676
diff
changeset
|
77 } |
7fb8ecf0d35a
update CommitsInfoBuilder service API
eugene.petrenko@gmail.com
parents:
676
diff
changeset
|
78 |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
79 public void onCommit(@NotNull String commitNum, |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
80 @NotNull String commitId, |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
81 @NotNull String[] parents, |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
82 @NotNull String branch, |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
83 @NotNull String[] tags, |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
84 @NotNull String author, |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
85 @NotNull String message, |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
86 @NotNull Date timestamp, |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
87 @Nullable String hgsubNodeId, |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
88 @Nullable String hgsubstateNodeId) { |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
89 |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
90 final CommitDataBean bean = new CommitDataBean( |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
91 HgRepo.shortId(commitId), |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
92 HgRepo.shortId(commitId), |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
93 timestamp |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
94 ); |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
95 |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
96 for (String parent : parents) { |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
97 if (LogCommand.ZERO_PARENT_ID.equals(parent)) continue; |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
98 if (LogCommand.ZERO_PARENT_SHORT_ID.equals(parent)) continue; |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
99 bean.addParentRevision(HgRepo.shortId(parent)); |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
100 } |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
101 |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
102 for (String tag : tags) { |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
103 if ("tip".equals(tag)) continue; |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
104 |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
105 bean.addTag(tag); |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
106 } |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
107 |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
108 bean.addBranch(branch); |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
109 bean.setCommitAuthor(author); |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
110 bean.setCommitMessage(message); |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
111 |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
112 for (SubRepo subRepo : subs.mounts(hgsubNodeId, hgsubstateNodeId).values()) { |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
113 try { |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
114 bean.addMountPoint(new CommitMountPointDataBean( |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
115 subRepo.vcsType().getVcsPluginName(), |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
116 subRepo.resolveUrl(hgRoot.getRepository()), |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
117 subRepo.path(), |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
118 subRepo.revision() |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
119 )); |
731
5becb1dfecbd
make it compile (post-merge issues)
eugene.petrenko@jetbrains.com
parents:
729
diff
changeset
|
120 } catch (WrongSubrepoUrlException e) { |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
121 //NOP |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
122 } |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
123 } |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
124 |
745 | 125 bean.setHeads(heads.getValues(bean.getVersion())); |
126 | |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
127 consumer.consumeCommit(bean); |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
128 } |
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
129 }); |
655 | 130 } |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
690
diff
changeset
|
131 |
655 | 132 } |