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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }