Mercurial > hg > mercurial
annotate mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/CheckoutRepository.java @ 671:3cc513b9e3c1
Use non-interactive merge
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Wed, 16 Oct 2013 14:33:41 +0400 |
parents | 0b50d7952a7d |
children | d1469a7cc038 |
rev | line source |
---|---|
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
1 package jetbrains.buildServer.buildTriggers.vcs.mercurial; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
2 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
3 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.HgVcsRoot; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
4 import jetbrains.buildServer.vcs.VcsException; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
5 import org.jetbrains.annotations.NotNull; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
6 import org.jetbrains.annotations.Nullable; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
7 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
8 import java.io.File; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
9 import java.io.IOException; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
10 import java.net.URISyntaxException; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
11 import java.util.Map; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
12 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
13 import static jetbrains.buildServer.util.FileUtil.delete; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
14 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
15 /** |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
16 * Repository checkout which uses mirrors (updates them first) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
17 * and supports subrepos. |
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 public class CheckoutRepository { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
20 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
21 private final MirrorManager myMirrorManager; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
22 private final HgRepoFactory myHgRepoFactory; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
23 private final int myPullTimeout; |
649
0b50d7952a7d
TW-23468 support tags as branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
645
diff
changeset
|
24 private boolean myGlobalTagsAsBranches; |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
25 private final HgVcsRoot myRoot; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
26 private final File myWorkingDir; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
27 private String myRevision; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
28 private String myBranch; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
29 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
30 CheckoutRepository(@NotNull MirrorManager mirrorManager, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
31 @NotNull HgRepoFactory hgRepoFactory, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
32 int pullTimeout, |
649
0b50d7952a7d
TW-23468 support tags as branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
645
diff
changeset
|
33 boolean globalTagsAsBranches, |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
34 @NotNull HgVcsRoot root, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
35 @NotNull File workingDir) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
36 myMirrorManager = mirrorManager; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
37 myHgRepoFactory = hgRepoFactory; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
38 myPullTimeout = pullTimeout; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
39 myRoot = root; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
40 myWorkingDir = workingDir; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
41 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
42 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
43 public CheckoutRepository setRevision(String revision) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
44 myRevision = revision; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
45 return this; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
46 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
47 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
48 public CheckoutRepository setBranch(String branch) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
49 myBranch = branch; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
50 return this; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
51 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
52 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
53 public void checkout() throws VcsException { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
54 checkout(myRoot, myWorkingDir, myRevision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
55 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
56 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
57 private void checkout(@NotNull HgVcsRoot root, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
58 @NotNull File workingDir, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
59 @Nullable String revision) throws VcsException { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
60 updateRepository(root, workingDir, revision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
61 if (revision == null && myBranch != null) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
62 HgRepo repo = myHgRepoFactory.createRepo(root, workingDir); |
649
0b50d7952a7d
TW-23468 support tags as branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
645
diff
changeset
|
63 boolean includeTags = myGlobalTagsAsBranches && root.useTagsAsBranches(); |
0b50d7952a7d
TW-23468 support tags as branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
645
diff
changeset
|
64 Map<String, String> revisions = repo.getBranchRevisions(true, includeTags); |
645
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
65 revision = revisions.get(myBranch); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
66 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
67 if (revision == null) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
68 return; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
69 updateSubrepos(root, workingDir, revision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
70 updateWorkingDir(root, workingDir, revision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
71 } |
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 updateRepository(@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 { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
77 HgRepo repo = myHgRepoFactory.createRepo(root, workingDir); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
78 if (revision != null && repo.containsRevision(revision)) |
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 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
81 updateMirror(root, revision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
82 String mirrorUrl = getMirrorUrl(root); |
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 if (repo.isValidRepository()) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
85 repo.pull().fromRepository(mirrorUrl) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
86 .withTimeout(myPullTimeout) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
87 .call(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
88 } else { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
89 repo.doClone().fromRepository(mirrorUrl) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
90 .setUpdateWorkingDir(false) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
91 .call(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
92 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
93 repo.setDefaultPath(root.getRepository()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
94 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
95 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
96 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
97 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
98 private void updateWorkingDir(@NotNull HgVcsRoot root, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
99 @NotNull File workingDir, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
100 @NotNull String revision) throws VcsException { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
101 HgRepo repo = myHgRepoFactory.createRepo(root, workingDir); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
102 repo.update().toRevision(revision).call(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
103 } |
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 private void updateSubrepos(@NotNull HgVcsRoot root, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
107 @NotNull File workingDir, |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
108 @Nullable String revision) throws VcsException { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
109 HgRepo repo = myHgRepoFactory.createRepo(root, workingDir); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
110 if (!repo.hasSubreposAtRevision(revision)) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
111 return; |
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 String workingDirRevision = repo.getWorkingDirRevision(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
114 Map<String, SubRepo> workingDirSubrepos = repo.getSubrepositories(workingDirRevision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
115 Map<String, SubRepo> subrepos = repo.getSubrepositories(revision); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
116 for (Map.Entry<String, SubRepo> entry : subrepos.entrySet()) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
117 String path = entry.getKey(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
118 SubRepo subrepoConfig = entry.getValue(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
119 SubRepo workingDirSubrepo = workingDirSubrepos.get(path); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
120 if (workingDirSubrepo != null && subrepoConfig.hasDifferentUrlThan(workingDirSubrepo)) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
121 delete(subrepoConfigDir(repo, subrepoConfig)); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
122 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
123 File subrepoDir = new File(workingDir, subrepoConfig.path()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
124 String subrepoUrl; |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
125 try { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
126 subrepoUrl = subrepoConfig.resolveUrl(root.getRepository()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
127 if (subrepoConfig.vcsType() == SubRepo.VcsType.hg && !isRelativeUrl(subrepoUrl)) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
128 HgVcsRoot subrepoRoot = root.withUrl(subrepoUrl); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
129 updateRepository(subrepoRoot, subrepoDir, subrepoConfig.revision()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
130 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
131 } catch (URISyntaxException e) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
132 subrepoUrl = subrepoConfig.url(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
133 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
134 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
135 updateSubrepos(root.withUrl(subrepoUrl), subrepoDir, subrepoConfig.revision()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
136 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
137 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
138 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
139 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
140 private boolean isRelativeUrl(@NotNull String url) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
141 return url.startsWith("."); |
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 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
145 private File subrepoConfigDir(@NotNull HgRepo parentRepo, @NotNull SubRepo subrepo) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
146 return new File(parentRepo.getWorkingDir(), subrepo.path()); |
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 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
150 private void updateMirror(@NotNull HgVcsRoot root, @Nullable String revision) throws VcsException { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
151 String url = root.getRepository(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
152 File mirrorDir = myMirrorManager.getMirrorDir(url); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
153 HgRepo repo = myHgRepoFactory.createRepo(root, mirrorDir); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
154 if (revision != null && repo.containsRevision(revision)) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
155 return; |
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 if (repo.isValidRepository()) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
159 repo.pull().fromRepository(root.getRepository()) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
160 .withTimeout(myPullTimeout) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
161 .call(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
162 } else { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
163 repo.doClone().fromRepository(root.getRepository()) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
164 .setUpdateWorkingDir(false) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
165 .useUncompressedTransfer(root.isUncompressedTransfer()) |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
166 .call(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
167 repo.setDefaultPath(root.getRepository()); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
168 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
169 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
170 |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
171 private String getMirrorUrl(@NotNull HgVcsRoot root) throws VcsException { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
172 try { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
173 return myMirrorManager.getMirrorDir(root.getRepository()).getCanonicalPath(); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
174 } catch (IOException e) { |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
175 throw new VcsException(e); |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
176 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
177 } |
4cf1ab3cd162
Merge in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff
changeset
|
178 } |