Mercurial > hg > mercurial
annotate mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/CheckoutRepository.java @ 977:38adef4f1b8f Indore-2017.2.x
Update copyright
author | pavel.sher |
---|---|
date | Mon, 22 Jan 2018 11:40:45 +0100 |
parents | a6405f5aad54 |
children | f342d25311c1 |
rev | line source |
---|---|
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
1 /* |
977 | 2 * Copyright 2000-2018 JetBrains s.r.o. |
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
3 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
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:
697
diff
changeset
|
6 * You may obtain a copy of the License at |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
7 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
9 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
13 * See the License for the specific language governing permissions and |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
14 * limitations under the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
15 */ |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
16 |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
17 package jetbrains.buildServer.buildTriggers.vcs.mercurial; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
18 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
19 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot; |
697
d1469a7cc038
Skip collecting changes in subrepos which url cannot be resolved
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
649
diff
changeset
|
20 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.WrongSubrepoUrlException; |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
21 import jetbrains.buildServer.vcs.VcsException; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
22 import org.jetbrains.annotations.NotNull; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
23 import org.jetbrains.annotations.Nullable; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
24 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
25 import java.io.File; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
26 import java.io.IOException; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
27 import java.util.Map; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
28 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
29 import static jetbrains.buildServer.util.FileUtil.delete; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
30 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
31 /** |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
32 * Repository checkout which uses mirrors (updates them first) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
33 * and supports subrepos. |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
34 */ |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
35 public class CheckoutRepository { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
36 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
37 private final MirrorManager myMirrorManager; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
38 private final HgRepoFactory myHgRepoFactory; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
39 private final int myPullTimeout; |
649
0b50d7952a7d
TW-23468 support tags as branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
645
diff
changeset
|
40 private boolean myGlobalTagsAsBranches; |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
41 private final HgVcsRoot myRoot; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
42 private final File myWorkingDir; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
43 private String myRevision; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
44 private String myBranch; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
45 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
46 CheckoutRepository(@NotNull MirrorManager mirrorManager, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
47 @NotNull HgRepoFactory hgRepoFactory, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
48 int pullTimeout, |
649
0b50d7952a7d
TW-23468 support tags as branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
645
diff
changeset
|
49 boolean globalTagsAsBranches, |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
50 @NotNull HgVcsRoot root, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
51 @NotNull File workingDir) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
52 myMirrorManager = mirrorManager; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
53 myHgRepoFactory = hgRepoFactory; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
54 myPullTimeout = pullTimeout; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
55 myRoot = root; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
56 myWorkingDir = workingDir; |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
57 myGlobalTagsAsBranches = globalTagsAsBranches; |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
58 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
59 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
60 public CheckoutRepository setRevision(String revision) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
61 myRevision = revision; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
62 return this; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
63 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
64 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
65 public CheckoutRepository setBranch(String branch) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
66 myBranch = branch; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
67 return this; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
68 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
69 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
70 public void checkout() throws VcsException { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
71 checkout(myRoot, myWorkingDir, myRevision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
72 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
73 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
74 private void checkout(@NotNull HgVcsRoot root, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
75 @NotNull File workingDir, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
76 @Nullable String revision) throws VcsException { |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
77 revision = updateRepository(root, workingDir, revision); |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
78 if (revision == null) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
79 return; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
80 updateSubrepos(root, workingDir, revision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
81 updateWorkingDir(root, workingDir, revision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
82 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
83 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
84 |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
85 @Nullable |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
86 private String updateRepository(@NotNull HgVcsRoot root, |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
87 @NotNull File workingDir, |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
88 @Nullable String revision) throws VcsException { |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
89 HgRepo repo = myHgRepoFactory.createRepo(root, workingDir); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
90 if (revision != null && repo.containsRevision(revision)) |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
91 return revision; |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
92 |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
93 String rev = updateMirror(root, revision); |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
94 String mirrorUrl = getMirrorUrl(root); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
95 |
872
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
96 if (!repo.isValidRepository()) |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
97 repo.init().call(); |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
98 repo.pull().fromRepository(mirrorUrl) |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
99 .withTimeout(myPullTimeout) |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
100 .call(); |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
101 repo.setDefaultPath(root.getRepository()); |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
102 repo.setTeamCityConfig(root.getCustomHgConfig()); |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
103 return rev; |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
104 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
105 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
106 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
107 private void updateWorkingDir(@NotNull HgVcsRoot root, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
108 @NotNull File workingDir, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
109 @NotNull String revision) throws VcsException { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
110 HgRepo repo = myHgRepoFactory.createRepo(root, workingDir); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
111 repo.update().toRevision(revision).call(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
112 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
113 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
114 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
115 private void updateSubrepos(@NotNull HgVcsRoot root, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
116 @NotNull File workingDir, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
117 @Nullable String revision) throws VcsException { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
118 HgRepo repo = myHgRepoFactory.createRepo(root, workingDir); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
119 if (!repo.hasSubreposAtRevision(revision)) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
120 return; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
121 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
122 String workingDirRevision = repo.getWorkingDirRevision(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
123 Map<String, SubRepo> workingDirSubrepos = repo.getSubrepositories(workingDirRevision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
124 Map<String, SubRepo> subrepos = repo.getSubrepositories(revision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
125 for (Map.Entry<String, SubRepo> entry : subrepos.entrySet()) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
126 String path = entry.getKey(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
127 SubRepo subrepoConfig = entry.getValue(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
128 SubRepo workingDirSubrepo = workingDirSubrepos.get(path); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
129 if (workingDirSubrepo != null && subrepoConfig.hasDifferentUrlThan(workingDirSubrepo)) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
130 delete(subrepoConfigDir(repo, subrepoConfig)); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
131 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
132 File subrepoDir = new File(workingDir, subrepoConfig.path()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
133 String subrepoUrl; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
134 try { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
135 subrepoUrl = subrepoConfig.resolveUrl(root.getRepository()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
136 if (subrepoConfig.vcsType() == SubRepo.VcsType.hg && !isRelativeUrl(subrepoUrl)) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
137 HgVcsRoot subrepoRoot = root.withUrl(subrepoUrl); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
138 updateRepository(subrepoRoot, subrepoDir, subrepoConfig.revision()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
139 } |
697
d1469a7cc038
Skip collecting changes in subrepos which url cannot be resolved
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
649
diff
changeset
|
140 } catch (WrongSubrepoUrlException e) { |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
141 subrepoUrl = subrepoConfig.url(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
142 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
143 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
144 updateSubrepos(root.withUrl(subrepoUrl), subrepoDir, subrepoConfig.revision()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
145 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
146 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
147 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
148 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
149 private boolean isRelativeUrl(@NotNull String url) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
150 return url.startsWith("."); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
151 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
152 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
153 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
154 private File subrepoConfigDir(@NotNull HgRepo parentRepo, @NotNull SubRepo subrepo) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
155 return new File(parentRepo.getWorkingDir(), subrepo.path()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
156 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
157 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
158 |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
159 /** |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
160 * @return the given revision if it was not null, or revision of the myBranch if myBranch != null, |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
161 * otherwise returns null. Need to resolve a branch revision with mirror lock because bookmarks |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
162 * can be deleted by another thread. |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
163 */ |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
164 @Nullable |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
165 private String updateMirror(@NotNull HgVcsRoot root, @Nullable String revision) throws VcsException { |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
166 String url = root.getRepository(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
167 File mirrorDir = myMirrorManager.getMirrorDir(url); |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
168 myMirrorManager.lockDir(mirrorDir); |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
169 try { |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
170 HgRepo repo = myHgRepoFactory.createRepo(root, mirrorDir); |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
171 if (revision != null && repo.containsRevision(revision)) { |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
172 return revision; |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
173 } |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
174 |
872
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
175 if (!repo.isValidRepository()) |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
176 repo.init().call(); |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
177 |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
178 repo.pull().fromRepository(root.getRepository()) |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
179 .withTimeout(myPullTimeout) |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
180 .call(); |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
181 repo.setDefaultPath(root.getRepository()); |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
783
diff
changeset
|
182 repo.setTeamCityConfig(root.getCustomHgConfig()); |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
183 |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
184 if (revision != null) |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
185 return revision; |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
186 if (myBranch == null) |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
187 return null; |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
188 boolean includeTags = myGlobalTagsAsBranches && root.useTagsAsBranches(); |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
189 return repo.getBranchRevisions(true, includeTags).get(myBranch); |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
190 } finally { |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
732
diff
changeset
|
191 myMirrorManager.unlockDir(mirrorDir); |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
192 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
193 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
194 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
195 private String getMirrorUrl(@NotNull HgVcsRoot root) throws VcsException { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
196 try { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
197 return myMirrorManager.getMirrorDir(root.getRepository()).getCanonicalPath(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
198 } catch (IOException e) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
199 throw new VcsException(e); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
200 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
201 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
202 } |