Mercurial > hg > mercurial
annotate mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java @ 541:bf0b43e4da97
report subrepo added/removed
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Wed, 30 Jan 2013 11:21:56 +0400 |
parents | 8468457fe4d3 |
children | 6c8911ed66f2 |
rev | line source |
---|---|
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
1 /* |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
2 * Copyright 2000-2011 JetBrains s.r.o. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
3 * |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
5 * you may not use this file except in compliance with the License. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
6 * You may obtain a copy of the License at |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
7 * |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
9 * |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
13 * See the License for the specific language governing permissions and |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
14 * limitations under the License. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
15 */ |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
16 package jetbrains.buildServer.buildTriggers.vcs.mercurial; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
17 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
18 import jetbrains.buildServer.Used; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
19 import jetbrains.buildServer.buildTriggers.vcs.AbstractVcsPropertiesProcessor; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
20 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.*; |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
21 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.UnknownRevisionException; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
22 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.UnrelatedRepositoryException; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
23 import jetbrains.buildServer.log.Loggers; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
24 import jetbrains.buildServer.serverSide.*; |
461
b21f3b3a33b1
Throw exception when current state does not contain revision of the default branch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
25 import jetbrains.buildServer.serverSide.impl.LogUtil; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
26 import jetbrains.buildServer.util.EventDispatcher; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
27 import jetbrains.buildServer.util.FileUtil; |
372
2869f49b9211
TW-17252 handle mercurial caches correctly
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
371
diff
changeset
|
28 import jetbrains.buildServer.util.cache.ResetCacheRegister; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
29 import jetbrains.buildServer.vcs.*; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
30 import jetbrains.buildServer.vcs.patches.PatchBuilder; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
31 import org.jetbrains.annotations.NotNull; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
32 import org.jetbrains.annotations.Nullable; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
33 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
34 import java.io.File; |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
35 import java.io.FileFilter; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
36 import java.io.FileInputStream; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
37 import java.io.IOException; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
38 import java.util.*; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
39 |
529
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
40 import static java.util.Collections.emptyMap; |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
474
diff
changeset
|
41 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.HgFileUtil.deleteDir; |
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
474
diff
changeset
|
42 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
43 /** |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
44 * Mercurial VCS plugin for TeamCity works as follows: |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
45 * <ul> |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
46 * <li>clones repository to internal storage |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
47 * <li>before any operation with working copy of repository pulls changes from the original repository |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
48 * <li>executes corresponding hg command |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
49 * </ul> |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
50 * |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
51 * <p>Working copy of repository is created in the $TEAMCITY_DATA_PATH/system/caches/hg_<hash code> folder. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
52 * <p>Personal builds (remote runs) are not yet supported, they require corresponding functionality from the IDE. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
53 */ |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
54 public class MercurialVcsSupport extends ServerVcsSupport implements LabelingSupport, VcsFileContentProvider, |
446
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
55 CollectChangesBetweenRoots, CollectChangesBetweenRepositories, BuildPatchByCheckoutRules { |
355
69d66e4f60e3
Extract MirrorManager interface
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
352
diff
changeset
|
56 private final MirrorManager myMirrorManager; |
329
ef091b782acc
Add ability to specify timeout for pull operation (teamcity.hg.pull.timeout.seconds)
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
289
diff
changeset
|
57 private final ServerPluginConfig myConfig; |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
58 private final HgPathProvider myHgPathProvider; |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
59 private final RepoFactory myRepoFactory; |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
60 private final HgVcsRootFactory myHgVcsRootFactory; |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
61 private final FileFilter myIgnoreDotHgFilter = new IgnoreDotHgFilter(); |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
62 private final FileFilter myAcceptAllFilter = new AcceptAllFilter(); |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
63 private final HgTestConnectionSupport myTestConnection; |
514
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
64 private Collection<MercurialServerExtension> myExtensions; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
65 |
514
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
66 public MercurialVcsSupport(@NotNull final EventDispatcher<ServerListener> dispatcher, |
372
2869f49b9211
TW-17252 handle mercurial caches correctly
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
371
diff
changeset
|
67 @NotNull final ResetCacheRegister resetCacheHandlerManager, |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
68 @NotNull final ServerPluginConfig config, |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
69 @NotNull final HgPathProvider hgPathProvider, |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
70 @NotNull final RepoFactory repoFactory, |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
71 @NotNull final MirrorManager mirrorManager, |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
72 @NotNull final HgVcsRootFactory hgVcsRootFactory, |
514
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
73 @NotNull final HgTestConnectionSupport testConnection) { |
256
73708ca4521f
Add ability to disable pull protocol
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
252
diff
changeset
|
74 myConfig = config; |
356
53b430731041
TW-19984 ensure map file cleaned as well
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
355
diff
changeset
|
75 myMirrorManager = mirrorManager; |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
76 myHgPathProvider = hgPathProvider; |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
77 myRepoFactory = repoFactory; |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
78 myHgVcsRootFactory = hgVcsRootFactory; |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
79 myTestConnection = testConnection; |
372
2869f49b9211
TW-17252 handle mercurial caches correctly
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
371
diff
changeset
|
80 resetCacheHandlerManager.registerHandler(new MercurialResetCacheHandler(myMirrorManager)); |
514
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
81 dispatcher.addListener(new ServerListenerAdapter() { |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
82 @Override |
408
b34ffc622efc
TW-20295 store log.template in the temp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
404
diff
changeset
|
83 public void serverShutdown() { |
b34ffc622efc
TW-20295 store log.template in the temp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
404
diff
changeset
|
84 myRepoFactory.dispose(); |
b34ffc622efc
TW-20295 store log.template in the temp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
404
diff
changeset
|
85 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
86 }); |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
87 logUsedHg(); |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
88 } |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
89 |
514
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
90 public void setExtensions(@NotNull Collection<MercurialServerExtension> extensions) { |
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
91 myExtensions = extensions; |
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
92 } |
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
93 |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
94 private void logUsedHg() { |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
95 String hgPath = myConfig.getHgPath(); |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
96 if (hgPath != null) |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
97 Loggers.VCS.info("Use server-wide hg path " + hgPath + ", path in the VCS root settings will be ignored"); |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
98 else |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
99 Loggers.VCS.info("Server-wide hg path is not set, will use path from the VCS root settings"); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
100 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
101 |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
102 private List<VcsChange> toVcsChanges(final List<FileStatus> modifiedFiles, String prevVer, String curVer, CheckoutRules rules) { |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
103 List<VcsChange> files = new ArrayList<VcsChange>(); |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
104 for (FileStatus mf: modifiedFiles) { |
260 | 105 final String path = rules.map(mf.getPath()); |
106 if (shouldInclude(path)) | |
107 files.add(toVcsChange(mf, prevVer, curVer, path)); | |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
108 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
109 return files; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
110 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
111 |
260 | 112 private boolean shouldInclude(String path) { |
113 return path != null; | |
114 } | |
115 | |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
116 private VcsChange toVcsChange(FileStatus mf, String prevVer, String curVer, String mappedPath) { |
260 | 117 String normalizedPath = PathUtil.normalizeSeparator(mf.getPath()); |
118 VcsChangeInfo.Type changeType = getChangeType(mf.getStatus()); | |
119 if (changeType == null) { | |
120 Loggers.VCS.warn("Unable to convert status: " + mf.getStatus() + " to VCS change type"); | |
121 changeType = VcsChangeInfo.Type.NOT_CHANGED; | |
122 } | |
123 return new VcsChange(changeType, mf.getStatus().getName(), normalizedPath, mappedPath, prevVer, curVer); | |
124 } | |
125 | |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
126 private VcsChangeInfo.Type getChangeType(final Status status) { |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
127 switch (status) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
128 case ADDED:return VcsChangeInfo.Type.ADDED; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
129 case MODIFIED:return VcsChangeInfo.Type.CHANGED; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
130 case REMOVED:return VcsChangeInfo.Type.REMOVED; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
131 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
132 return null; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
133 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
134 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
135 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
136 public byte[] getContent(@NotNull final VcsModification vcsModification, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
137 @NotNull final VcsChangeInfo change, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
138 @NotNull final VcsChangeInfo.ContentType contentType, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
139 @NotNull final VcsRoot vcsRoot) throws VcsException { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
140 String version = contentType == VcsChangeInfo.ContentType.AFTER_CHANGE ? change.getAfterChangeRevisionNumber() : change.getBeforeChangeRevisionNumber(); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
141 return getContent(change.getRelativeFileName(), vcsRoot, version); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
142 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
143 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
144 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
145 public byte[] getContent(@NotNull final String filePath, @NotNull final VcsRoot vcsRoot, @NotNull final String version) throws VcsException { |
225
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
146 ChangeSet cset = new ChangeSet(version); |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
147 HgVcsRoot root = myHgVcsRootFactory.createHgRoot(vcsRoot); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
148 syncRepository(root, cset); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
149 HgRepo repo = createRepo(root); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
150 File parentDir = repo.cat().files(filePath).atRevision(cset).call(); |
397
36b1bc5add89
Method getContent() should throw exception for non-existing files
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
380
diff
changeset
|
151 File file = new File(parentDir, filePath); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
152 try { |
397
36b1bc5add89
Method getContent() should throw exception for non-existing files
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
380
diff
changeset
|
153 return FileUtil.loadFileBytes(file); |
36b1bc5add89
Method getContent() should throw exception for non-existing files
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
380
diff
changeset
|
154 } catch (IOException e) { |
36b1bc5add89
Method getContent() should throw exception for non-existing files
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
380
diff
changeset
|
155 throw new VcsException("Failed to load content of file " + filePath + " at revision " + version, e); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
156 } finally { |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
474
diff
changeset
|
157 deleteDir(parentDir, Loggers.VCS); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
158 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
159 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
160 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
161 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
162 public String getName() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
163 return Constants.VCS_NAME; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
164 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
165 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
166 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
167 @Used("jsp") |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
168 public String getDisplayName() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
169 return "Mercurial"; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
170 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
171 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
172 @Nullable |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
173 public PropertiesProcessor getVcsPropertiesProcessor() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
174 return new AbstractVcsPropertiesProcessor() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
175 public Collection<InvalidProperty> process(final Map<String, String> properties) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
176 List<InvalidProperty> result = new ArrayList<InvalidProperty>(); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
177 if (isEmpty(properties.get(Constants.HG_COMMAND_PATH_PROP))) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
178 result.add(new InvalidProperty(Constants.HG_COMMAND_PATH_PROP, "Path to 'hg' command must be specified")); |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
179 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
180 if (isEmpty(properties.get(Constants.REPOSITORY_PROP))) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
181 result.add(new InvalidProperty(Constants.REPOSITORY_PROP, "Repository must be specified")); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
182 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
183 return result; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
184 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
185 }; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
186 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
187 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
188 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
189 public String getVcsSettingsJspFilePath() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
190 return "mercurialSettings.jsp"; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
191 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
192 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
193 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
194 public String getCurrentVersion(@NotNull final VcsRoot root) throws VcsException { |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
195 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
196 syncRepository(hgRoot); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
197 HgRepo repo = createRepo(hgRoot); |
529
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
198 Map<String, String> result = repo.branches().call(); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
199 String revision = result.get(hgRoot.getBranchName()); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
200 if (revision == null) |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
201 throw new VcsException("Unable to find current version for the branch: " + hgRoot.getBranchName()); |
529
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
202 return revision; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
203 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
204 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
205 public boolean sourcesUpdatePossibleIfChangesNotFound(@NotNull final VcsRoot root) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
206 return false; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
207 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
208 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
209 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
210 public String describeVcsRoot(final VcsRoot vcsRoot) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
211 return "mercurial: " + vcsRoot.getProperty(Constants.REPOSITORY_PROP); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
212 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
213 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
214 @Override |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
215 public TestConnectionSupport getTestConnectionSupport() { |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
216 return myTestConnection; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
217 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
218 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
219 @Nullable |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
220 public Map<String, String> getDefaultVcsProperties() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
221 Map<String, String> defaults = new HashMap<String, String>(); |
501
a3dc94c399d4
Add a default branch name
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
478
diff
changeset
|
222 defaults.put(Constants.BRANCH_NAME_PROP, "default"); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
223 defaults.put(Constants.HG_COMMAND_PATH_PROP, "hg"); |
502
2755266b7dd5
Use uncompressed transfer explicitly
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
501
diff
changeset
|
224 defaults.put(Constants.UNCOMPRESSED_TRANSFER, "true"); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
225 return defaults; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
226 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
227 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
228 public String getVersionDisplayName(@NotNull final String version, @NotNull final VcsRoot root) throws VcsException { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
229 return new ChangeSet(version).getId(); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
230 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
231 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
232 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
233 public Comparator<String> getVersionComparator() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
234 // comparator is called when TeamCity needs to sort modifications in the order of their appearance, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
235 // currently we sort changes by revision number, not sure however that this is a good idea, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
236 // probably it would be better to sort them by timestamp (and to add timestamp into the version). |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
237 return new Comparator<String>() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
238 public int compare(final String o1, final String o2) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
239 try { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
240 return new ChangeSet(o1).getRevNumber() - new ChangeSet(o2).getRevNumber(); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
241 } catch (Exception e) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
242 return 1; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
243 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
244 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
245 }; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
246 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
247 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
248 // builds patch from version to version |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
249 private void buildIncrementalPatch(@NotNull final HgVcsRoot root, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
250 @NotNull final ChangeSet fromVer, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
251 @NotNull final ChangeSet toVer, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
252 @NotNull final PatchBuilder builder, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
253 @NotNull final CheckoutRules checkoutRules) |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
254 throws VcsException, IOException { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
255 HgRepo repo = createRepo(root); |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
256 List<FileStatus> modifiedFiles = repo.status().fromRevision(fromVer).toRevision(toVer).call(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
257 List<String> notDeletedFiles = new ArrayList<String>(); |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
258 for (FileStatus f: modifiedFiles) { |
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
259 if (f.getStatus() != Status.REMOVED) { |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
260 notDeletedFiles.add(f.getPath()); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
261 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
262 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
263 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
264 if (notDeletedFiles.isEmpty()) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
265 return; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
266 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
267 File parentDir = repo.cat().files(notDeletedFiles).atRevision(toVer).call(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
268 try { |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
269 for (FileStatus f: modifiedFiles) { |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
270 String mappedPath = checkoutRules.map(f.getPath()); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
271 if (mappedPath == null) continue; // skip |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
272 final File virtualFile = new File(mappedPath); |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
273 if (f.getStatus() == Status.REMOVED) { |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
274 builder.deleteFile(virtualFile, true); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
275 } else { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
276 File realFile = new File(parentDir, f.getPath()); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
277 FileInputStream is = new FileInputStream(realFile); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
278 try { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
279 builder.changeOrCreateBinaryFile(virtualFile, null, is, realFile.length()); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
280 } finally { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
281 is.close(); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
282 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
283 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
284 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
285 } finally { |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
474
diff
changeset
|
286 deleteDir(parentDir, Loggers.VCS); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
287 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
288 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
289 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
290 // builds patch by exporting files using specified version |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
291 private void buildFullPatch(@NotNull final HgVcsRoot root, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
292 @NotNull final ChangeSet toVer, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
293 @NotNull final PatchBuilder builder, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
294 @NotNull final CheckoutRules checkoutRules) throws IOException, VcsException { |
417
74487e2c6356
Use shorter temp directory names
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
416
diff
changeset
|
295 File tempDir = HgFileUtil.createTempDir(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
296 try { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
297 HgRepo repo = createRepo(root); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
298 if (repo.hasSubreposAtRevision(toVer)) { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
299 Loggers.VCS.debug("Repository '" + root.getRepository() + "' has submodules at revision " + toVer.getId() + ", use 'hg clone' to build clean patch"); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
300 File mirrorDir = getWorkingDir(root); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
301 HgRepo cloneOfTheMirror = createRepo(root, tempDir); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
302 cloneOfTheMirror.doClone().fromRepository(mirrorDir) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
303 .setUpdateWorkingDir(false) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
304 .setUsePullProtocol(false) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
305 .useUncompressedTransfer(false) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
306 .call(); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
307 cloneOfTheMirror.setDefaultPath(root.getRepository()); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
308 cloneOfTheMirror.update().toRevision(toVer).call(); |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
309 buildPatchFromDirectory(builder, tempDir, checkoutRules, myIgnoreDotHgFilter); |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
310 } else { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
311 Loggers.VCS.debug("Repository '" + root.getRepository() + "' doesn't have submodules at revision " + toVer.getId() + ", use 'hg archive' to build clean patch"); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
312 repo.archive().revision(toVer).toDir(tempDir).call(); |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
313 buildPatchFromDirectory(builder, tempDir, checkoutRules, myAcceptAllFilter); |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
314 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
315 } finally { |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
474
diff
changeset
|
316 deleteDir(tempDir, Loggers.VCS); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
317 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
318 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
319 |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
320 private void buildPatchFromDirectory(final PatchBuilder builder, final File repRoot, final CheckoutRules checkoutRules, @NotNull final FileFilter filter) throws IOException { |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
321 buildPatchFromDirectory(repRoot, builder, repRoot, checkoutRules, filter); |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
322 } |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
323 |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
324 private void buildPatchFromDirectory(File curDir, final PatchBuilder builder, final File repRoot, final CheckoutRules checkoutRules, @NotNull final FileFilter filter) throws IOException { |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
325 File[] files = curDir.listFiles(filter); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
326 if (files != null) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
327 for (File realFile: files) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
328 String relPath = realFile.getAbsolutePath().substring(repRoot.getAbsolutePath().length()); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
329 String mappedPath = checkoutRules.map(relPath); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
330 if (mappedPath != null && mappedPath.length() > 0) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
331 final File virtualFile = new File(mappedPath); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
332 if (realFile.isDirectory()) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
333 builder.createDirectory(virtualFile); |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
334 buildPatchFromDirectory(realFile, builder, repRoot, checkoutRules, filter); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
335 } else { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
336 final FileInputStream is = new FileInputStream(realFile); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
337 try { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
338 builder.createBinaryFile(virtualFile, null, is, realFile.length()); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
339 } finally { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
340 is.close(); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
341 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
342 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
343 } else { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
344 if (realFile.isDirectory()) { |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
345 buildPatchFromDirectory(realFile, builder, repRoot, checkoutRules, filter); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
346 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
347 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
348 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
349 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
350 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
351 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
352 /* clone the repo if it doesn't exist, pull the repo if it doesn't contain specified changeSet */ |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
353 private void syncRepository(@NotNull final HgVcsRoot root, @NotNull final ChangeSet cset) throws VcsException { |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
354 File workingDir = getWorkingDir(root); |
225
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
355 lockWorkDir(workingDir); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
356 HgRepo repo = createRepo(root); |
225
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
357 try { |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
358 if (repo.isValidRepository()) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
359 if (repo.containsRevision(cset)) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
360 return; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
361 try { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
362 repo.pull().fromRepository(root.getRepository()) |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
363 .withTimeout(myConfig.getPullTimeout()) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
364 .call(); |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
365 } catch (UnrelatedRepositoryException e) { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
366 Loggers.VCS.warn("Repository at " + root.getRepository() + " is unrelated, clone it again"); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
367 myMirrorManager.forgetDir(workingDir); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
368 syncRepository(root, cset); |
225
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
369 } |
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
370 } else { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
371 repo.doClone().fromRepository(root.getRepository()) |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
372 .useUncompressedTransfer(root.isUncompressedTransfer()) |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
373 .setUpdateWorkingDir(false) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
374 .call(); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
375 repo.setDefaultPath(root.getRepository()); |
225
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
376 } |
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
377 } finally { |
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
378 unlockWorkDir(workingDir); |
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
379 } |
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
380 } |
1ef1baff91af
TW-15861: do pull in getContent() only if local repository does not contain revision of interest
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
220
diff
changeset
|
381 |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
382 public void syncRepository(@NotNull final HgVcsRoot root) throws VcsException { |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
383 File workingDir = getWorkingDir(root); |
181
0ea2ad14ce97
Add local mirrors for agent checkout. To turn them on set agent property teamcity.hg.use.local.mirrors = true.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
175
diff
changeset
|
384 lockWorkDir(workingDir); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
385 HgRepo repo = createRepo(root); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
386 try { |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
387 if (repo.isValidRepository()) { |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
388 try { |
529
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
389 resetBookmarks(repo); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
390 repo.pull().fromRepository(root.getRepository()) |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
391 .withTimeout(myConfig.getPullTimeout()) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
392 .call(); |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
393 } catch (UnrelatedRepositoryException e) { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
394 Loggers.VCS.warn("Repository at " + root.getRepository() + " is unrelated, clone it again"); |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
395 myMirrorManager.forgetDir(workingDir); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
396 syncRepository(root); |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
397 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
398 } else { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
399 repo.doClone().fromRepository(root.getRepository()) |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
400 .setUpdateWorkingDir(false) |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
401 .useUncompressedTransfer(root.isUncompressedTransfer()) |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
402 .call(); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
403 repo.setDefaultPath(root.getRepository()); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
404 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
405 } finally { |
181
0ea2ad14ce97
Add local mirrors for agent checkout. To turn them on set agent property teamcity.hg.use.local.mirrors = true.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
175
diff
changeset
|
406 unlockWorkDir(workingDir); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
407 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
408 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
409 |
529
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
410 |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
411 private void resetBookmarks(HgRepo repo) throws VcsException { |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
412 if (!myConfig.bookmarksEnabled()) |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
413 return; |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
414 HgVersion v = repo.version().call(); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
415 if (v.isEqualsOrGreaterThan(BookmarksCommand.REQUIRED_HG_VERSION)) |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
416 repo.resetBookmarks(); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
417 } |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
418 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
419 @Override |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
420 public LabelingSupport getLabelingSupport() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
421 return this; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
422 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
423 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
424 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
425 public VcsFileContentProvider getContentProvider() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
426 return this; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
427 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
428 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
429 @NotNull |
485 | 430 public RepositoryStateData getCurrentState(@NotNull VcsRoot root) throws VcsException { |
436
a85e08df0259
Specify default branch name in RepositoryState
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
435
diff
changeset
|
431 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
529
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
432 syncRepository(hgRoot); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
433 Map<String, String> revisions = new HashMap<String, String>(); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
434 revisions.putAll(getBookmarkRevisions(hgRoot)); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
435 revisions.putAll(getBranchesRevisions(hgRoot)); |
461
b21f3b3a33b1
Throw exception when current state does not contain revision of the default branch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
436 String defaultBranchName = hgRoot.getBranchName(); |
529
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
437 if (revisions.get(defaultBranchName) == null) { |
514
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
438 throw new VcsException("Cannot find revision of the default branch '" + |
461
b21f3b3a33b1
Throw exception when current state does not contain revision of the default branch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
439 defaultBranchName + "' of vcs root " + LogUtil.describe(root)); |
b21f3b3a33b1
Throw exception when current state does not contain revision of the default branch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
440 } |
529
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
441 return RepositoryStateData.createVersionState(defaultBranchName, revisions); |
327
d9aa1194e4ba
Implement new method getRepositoryState() instead of getBranchRevisions()
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
325
diff
changeset
|
442 } |
d9aa1194e4ba
Implement new method getRepositoryState() instead of getBranchRevisions()
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
325
diff
changeset
|
443 |
d9aa1194e4ba
Implement new method getRepositoryState() instead of getBranchRevisions()
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
325
diff
changeset
|
444 @NotNull |
436
a85e08df0259
Specify default branch name in RepositoryState
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
435
diff
changeset
|
445 private Map<String, String> getBranchesRevisions(@NotNull HgVcsRoot root) throws VcsException { |
a85e08df0259
Specify default branch name in RepositoryState
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
435
diff
changeset
|
446 HgRepo repo = createRepo(root); |
529
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
447 return repo.branches().call(); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
448 } |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
449 |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
450 @NotNull |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
451 private Map<String, String> getBookmarkRevisions(@NotNull HgVcsRoot root) throws VcsException { |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
452 ServerHgRepo repo = createRepo(root); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
453 if (!myConfig.bookmarksEnabled()) |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
454 return emptyMap(); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
455 HgVersion v = repo.version().call(); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
456 if (!v.isEqualsOrGreaterThan(BookmarksCommand.REQUIRED_HG_VERSION)) |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
457 return emptyMap(); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
458 return repo.bookmarks().call(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
459 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
460 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
461 @NotNull |
446
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
462 public List<ModificationData> collectChanges(@NotNull VcsRoot fromRoot, |
485 | 463 @NotNull RepositoryStateData fromState, |
446
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
464 @NotNull VcsRoot toRoot, |
485 | 465 @NotNull RepositoryStateData toState, |
446
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
466 @NotNull CheckoutRules rules) throws VcsException { |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
467 return collectChanges(toRoot, fromState, toState, rules); |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
468 } |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
469 |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
470 @NotNull |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
471 public List<ModificationData> collectChanges(@NotNull VcsRoot root, |
485 | 472 @NotNull RepositoryStateData fromState, |
473 @NotNull RepositoryStateData toState, | |
446
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
474 @NotNull CheckoutRules rules) throws VcsException { |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
475 Set<String> reportedCsetIds = new HashSet<String>(); |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
476 List<ModificationData> changes = new ArrayList<ModificationData>(); |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
477 for (Map.Entry<String, String> entry : toState.getBranchRevisions().entrySet()) { |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
478 String branch = entry.getKey(); |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
479 String toRevision = entry.getValue(); |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
480 String fromRevision = fromState.getBranchRevisions().get(branch); |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
481 if (fromRevision == null) |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
482 fromRevision = fromState.getBranchRevisions().get(fromState.getDefaultBranchName()); |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
483 if (toRevision.equals(fromRevision)) |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
484 continue; |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
485 List<ModificationData> branchChanges = collectChanges(root, fromRevision, toRevision, rules); |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
486 for (ModificationData change : branchChanges) { |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
487 if (reportedCsetIds.add(change.getVersion())) |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
488 changes.add(change); |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
489 } |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
490 } |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
491 return changes; |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
492 } |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
493 |
8a1231dc6a2c
Collect changes between states
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
445
diff
changeset
|
494 @NotNull |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
495 public List<ModificationData> collectChanges(@NotNull VcsRoot fromRoot, @NotNull String fromRootRevision, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
496 @NotNull VcsRoot toRoot, @Nullable String toRootRevision, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
497 @NotNull CheckoutRules checkoutRules) throws VcsException { |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
498 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(toRoot); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
499 syncRepository(hgRoot); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
500 String toRevision = toRootRevision != null ? toRootRevision : getCurrentVersion(toRoot); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
501 String mergeBase = getMergeBase(hgRoot, fromRootRevision, toRevision); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
502 if (mergeBase == null) |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
503 return Collections.emptyList(); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
504 return collectChanges(toRoot, mergeBase, toRootRevision, checkoutRules); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
505 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
506 |
251
75765a16ac7e
Implement method getPersonalBranchDescription()
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
249
diff
changeset
|
507 |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
508 @Nullable |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
509 public String getMergeBase(@NotNull HgVcsRoot root, @NotNull String revision1, @NotNull String revision2) throws VcsException { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
510 String result = createRepo(root).mergeBase() |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
511 .revision1(revision1) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
512 .revision2(revision2) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
513 .call(); |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
514 if (result == null) |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
515 result = getMinusNthCommit(root, 10); |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
516 return result; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
517 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
518 |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
519 |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
520 @Nullable |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
521 private String getMinusNthCommit(@NotNull HgVcsRoot root, int n) throws VcsException { |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
522 LogCommand log = createRepo(root).log() |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
523 .inBranch(root.getBranchName()) |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
524 .toNamedRevision(root.getBranchName()); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
525 if (n > 0) |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
526 log.setLimit(n); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
527 List<ChangeSet> changeSets = log.call(); |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
528 if (changeSets.isEmpty()) |
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
529 return null; |
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
530 return changeSets.get(0).getId(); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
531 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
532 |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
533 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
534 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
535 public CollectChangesPolicy getCollectChangesPolicy() { |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
536 return this; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
537 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
538 |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
539 public List<ModificationData> collectChanges(@NotNull VcsRoot root, @NotNull String fromVersion, @Nullable String currentVersion, @NotNull CheckoutRules checkoutRules) throws VcsException { |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
540 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
541 syncRepository(hgRoot); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
542 List<ModificationData> result = new ArrayList<ModificationData>(); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
543 for (ChangeSet cset : getChangesets(hgRoot, fromVersion, currentVersion)) { |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
544 result.add(createModificationData(cset, root, checkoutRules)); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
545 } |
538
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
546 if (myConfig.reportSubrepoConfigUpdates()) |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
547 addSubrepoConfigChanges(hgRoot, result); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
548 return result; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
549 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
550 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
551 |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
552 private ModificationData createModificationData(@NotNull final ChangeSet cset, @NotNull final VcsRoot root, @NotNull final CheckoutRules checkoutRules) { |
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
553 List<ChangeSetRevision> parents = cset.getParents(); |
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
554 if (parents.isEmpty()) |
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
555 throw new IllegalStateException("Commit " + cset.getId() + " has no parents"); |
445
b47cfe5cbaba
Do not include revnum in revision
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
444
diff
changeset
|
556 List<VcsChange> files = toVcsChanges(cset.getModifiedFiles(), parents.get(0).getId(), cset.getId(), checkoutRules); |
b47cfe5cbaba
Do not include revnum in revision
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
444
diff
changeset
|
557 final ModificationData result = new ModificationData(cset.getTimestamp(), files, cset.getDescription(), cset.getUser(), root, cset.getId(), cset.getId()); |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
558 for (ChangeSetRevision parent : parents) { |
445
b47cfe5cbaba
Do not include revnum in revision
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
444
diff
changeset
|
559 result.addParentRevision(parent.getId()); |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
560 } |
474
6b447cd40492
TW-10076 allow to ignore commits where all files excluded by checkout rules
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
467
diff
changeset
|
561 setCanBeIgnored(result, cset); |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
562 return result; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
563 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
564 |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
565 |
474
6b447cd40492
TW-10076 allow to ignore commits where all files excluded by checkout rules
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
467
diff
changeset
|
566 private void setCanBeIgnored(@NotNull ModificationData md, @NotNull ChangeSet cset) { |
441
2d3caaaa3e6b
Don't ignore empty commits
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
439
diff
changeset
|
567 if (md.getParentRevisions().size() > 1) { |
2d3caaaa3e6b
Don't ignore empty commits
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
439
diff
changeset
|
568 //don't ignore merge commits |
2d3caaaa3e6b
Don't ignore empty commits
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
439
diff
changeset
|
569 md.setCanBeIgnored(false); |
474
6b447cd40492
TW-10076 allow to ignore commits where all files excluded by checkout rules
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
467
diff
changeset
|
570 } else if (cset.getModifiedFiles().isEmpty()) { |
441
2d3caaaa3e6b
Don't ignore empty commits
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
439
diff
changeset
|
571 //don't ignore empty commits |
2d3caaaa3e6b
Don't ignore empty commits
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
439
diff
changeset
|
572 md.setCanBeIgnored(false); |
2d3caaaa3e6b
Don't ignore empty commits
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
439
diff
changeset
|
573 } |
2d3caaaa3e6b
Don't ignore empty commits
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
439
diff
changeset
|
574 } |
2d3caaaa3e6b
Don't ignore empty commits
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
439
diff
changeset
|
575 |
2d3caaaa3e6b
Don't ignore empty commits
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
439
diff
changeset
|
576 |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
577 @NotNull |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
578 private List<ChangeSet> getChangesets(@NotNull final HgVcsRoot root, @NotNull final String fromVersion, @Nullable final String toVersion) throws VcsException { |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
579 if (toVersion == null) |
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
580 return Collections.emptyList(); |
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
581 String fromCommit = new ChangeSetRevision(fromVersion).getId(); |
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
582 String toCommit = new ChangeSetRevision(toVersion).getId(); |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
583 try { |
511
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
584 ServerHgRepo repo = createRepo(root); |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
585 List<ChangeSet> changesets = repo.collectChanges(root) |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
586 .fromRevision(fromCommit) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
587 .toRevision(toCommit) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
588 .call(); |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
589 Iterator<ChangeSet> iter = changesets.iterator(); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
590 while (iter.hasNext()) { |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
591 ChangeSet cset = iter.next(); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
592 if (cset.getId().equals(fromCommit)) |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
593 iter.remove();//skip already reported changes |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
594 } |
511
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
595 if (myConfig.detectSubrepoChanges()) |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
596 changesets.addAll(getSubrepoChangesets(root, repo, changesets)); |
349
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
597 return changesets; |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
598 } catch (UnknownRevisionException e) { |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
599 Loggers.VCS.warn("Revision '" + e.getRevision() + "' is unknown, will return no changes"); |
e0464f11206c
TW-19698 Handle unrelated repositories
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
348
diff
changeset
|
600 return Collections.emptyList(); |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
601 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
602 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
603 |
538
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
604 private void addSubrepoConfigChanges(@NotNull HgVcsRoot root, @NotNull List<ModificationData> changes) { |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
605 try { |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
606 ServerHgRepo repo = createRepo(root); |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
607 for (ModificationData change : changes) { |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
608 List<SubRepoConfigChange> subrepoConfigChanges = repo.getSubrepoConfigChanges(change.getVersion()); |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
609 int i = 1; |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
610 for (SubRepoConfigChange c : subrepoConfigChanges) { |
541
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
611 String subrepoUrl = null; |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
612 String curRevision = null; |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
613 String prevRevision = null; |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
614 if (c.getCurrent() == null && c.getPrevious() != null) { |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
615 subrepoUrl = c.getPrevious().resolveUrl(root.getRepository()); |
538
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
616 HgVcsRoot subrepoRoot = root.withUrl(subrepoUrl); |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
617 syncRepository(subrepoRoot); |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
618 ServerHgRepo subrepo = createRepo(subrepoRoot); |
541
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
619 prevRevision = subrepo.id().revision(c.getPrevious().revision()).inLocalRepository().call(); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
620 } else if (c.getPrevious() == null) { |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
621 subrepoUrl = c.getCurrent().resolveUrl(root.getRepository()); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
622 HgVcsRoot subrepoRoot = root.withUrl(subrepoUrl); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
623 syncRepository(subrepoRoot); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
624 ServerHgRepo subrepo = createRepo(subrepoRoot); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
625 curRevision = subrepo.id().revision(c.getCurrent().revision()).inLocalRepository().call(); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
626 } else if (c.getCurrent().url().equals(c.getPrevious().url())) { |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
627 subrepoUrl = c.getCurrent().resolveUrl(root.getRepository()); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
628 HgVcsRoot subrepoRoot = root.withUrl(subrepoUrl); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
629 syncRepository(subrepoRoot); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
630 ServerHgRepo subrepo = createRepo(subrepoRoot); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
631 prevRevision = subrepo.id().revision(c.getPrevious().revision()).inLocalRepository().call(); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
632 curRevision = subrepo.id().revision(c.getCurrent().revision()).inLocalRepository().call(); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
633 } |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
634 change.setAttribute("subrepo." + i + ".path", c.getPath()); |
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
635 if (subrepoUrl != null) |
538
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
636 change.setAttribute("subrepo." + i + ".rootDiff." + Constants.REPOSITORY_PROP, subrepoUrl); |
541
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
637 if (prevRevision != null) |
538
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
638 change.setAttribute("subrepo." + i + ".oldRevision", prevRevision); |
541
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
639 if (curRevision != null) |
538
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
640 change.setAttribute("subrepo." + i + ".newRevision", curRevision); |
541
bf0b43e4da97
report subrepo added/removed
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
538
diff
changeset
|
641 i++; |
538
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
642 } |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
643 } |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
644 } catch (Exception e) { |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
645 Loggers.VCS.warn("Error while reporting subrepo config changes", e); |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
646 } |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
647 } |
8468457fe4d3
Report subrepo changes - initial version
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
529
diff
changeset
|
648 |
511
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
649 @NotNull |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
650 private List<ChangeSet> getSubrepoChangesets(@NotNull HgVcsRoot root, |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
651 @NotNull HgRepo repo, |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
652 @NotNull List<ChangeSet> csets) throws VcsException { |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
653 List<ChangeSet> subrepoCsets = new ArrayList<ChangeSet>(); |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
654 for (ChangeSet cset : csets) { |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
655 List<SubRepoConfigChange> subrepoConfigChanges = repo.getSubrepoConfigChanges(cset); |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
656 for (SubRepoConfigChange c : subrepoConfigChanges) { |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
657 if (c.getCurrent() != null && c.getPrevious() != null && c.getCurrent().url().equals(c.getPrevious().url())) { |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
658 String subrepoUrl = c.getCurrent().isRelative() ? root.getRepository() + "/" + c.getCurrent().url() : c.getCurrent().url(); |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
659 String fromRevision = c.getPrevious().revision(); |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
660 String toRevision = c.getCurrent().revision(); |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
661 HgVcsRoot subrepoRoot = root.withUrl(subrepoUrl); |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
662 syncRepository(subrepoRoot); |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
663 subrepoCsets.addAll(getChangesets(subrepoRoot, fromRevision, toRevision)); |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
664 } |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
665 } |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
666 } |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
667 return subrepoCsets; |
f2666e817701
Detect changes in subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
503
diff
changeset
|
668 } |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
669 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
670 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
671 public BuildPatchPolicy getBuildPatchPolicy() { |
412
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
672 return this; |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
673 } |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
674 |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
675 public void buildPatch(@NotNull VcsRoot root, @Nullable String fromVersion, @NotNull String toVersion, @NotNull PatchBuilder builder, @NotNull CheckoutRules checkoutRules) throws IOException, VcsException { |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
676 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
677 syncRepository(hgRoot); |
412
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
678 ChangeSet to = new ChangeSet(toVersion); |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
679 if (fromVersion == null) { |
444
a05eca69fc01
Ensure plugin works without revnums in revisions
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
441
diff
changeset
|
680 buildFullPatch(hgRoot, to, builder, checkoutRules); |
412
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
681 } else { |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
682 ChangeSet from = new ChangeSet(fromVersion); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
683 HgRepo repo = createRepo(hgRoot); |
412
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
684 if (!repo.containsRevision(from)) { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
685 Loggers.VCS.info("Cannot find revision " + fromVersion + " in repository " + hgRoot.getRepository() + ", will build a full patch"); |
412
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
686 cleanCheckoutDir(builder, checkoutRules); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
687 buildFullPatch(hgRoot, to, builder, checkoutRules); |
412
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
688 } else { |
444
a05eca69fc01
Ensure plugin works without revnums in revisions
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
441
diff
changeset
|
689 buildIncrementalPatch(hgRoot, from, to, builder, checkoutRules); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
690 } |
412
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
691 } |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
692 } |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
693 |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
694 private void cleanCheckoutDir(@NotNull PatchBuilder builder, @NotNull CheckoutRules checkoutRules) throws IOException { |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
695 builder.deleteDirectory(new File(checkoutRules.map("")), true); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
696 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
697 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
698 private void lockWorkDir(@NotNull File workDir) { |
356
53b430731041
TW-19984 ensure map file cleaned as well
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
355
diff
changeset
|
699 myMirrorManager.lockDir(workDir); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
700 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
701 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
702 private void unlockWorkDir(@NotNull File workDir) { |
356
53b430731041
TW-19984 ensure map file cleaned as well
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
355
diff
changeset
|
703 myMirrorManager.unlockDir(workDir); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
704 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
705 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
706 @Override |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
707 public boolean allowSourceCaching() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
708 // since a copy of repository for each VCS root is already stored on disk |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
709 // we do not need separate cache for our patches |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
710 return false; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
711 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
712 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
713 public String label(@NotNull String label, @NotNull String version, @NotNull VcsRoot root, @NotNull CheckoutRules checkoutRules) throws VcsException { |
245
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
714 File tmpDir = null; |
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
715 try { |
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
716 tmpDir = createLabelingTmpDir(); |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
717 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
718 hgRoot.setCustomWorkingDir(tmpDir); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
719 syncRepository(hgRoot); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
720 HgRepo repo = createRepo(hgRoot); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
721 repo.update().branch(hgRoot.getBranchName()).call(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
722 |
245
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
723 String fixedTagname = fixTagName(label); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
724 repo.tag().revision(version) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
725 .tagName(fixedTagname) |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
726 .byUser(hgRoot.getUserForTag()) |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
727 .call(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
728 |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
729 repo.push().toRepository(hgRoot.getRepository()).call(); |
245
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
730 return fixedTagname; |
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
731 } finally { |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
474
diff
changeset
|
732 deleteDir(tmpDir, Loggers.VCS); |
245
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
733 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
734 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
735 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
736 private String fixTagName(final String label) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
737 // according to Mercurial documentation http://hgbook.red-bean.com/hgbookch8.html#x12-1570008 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
738 // tag name must not contain: |
246 | 739 // Colon (ASCII 58, ':') |
740 // Carriage return (ASCII 13, '\r') | |
741 // Newline (ASCII 10, '\n') | |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
742 // all these characters will be replaced with _ (underscore) |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
743 return label.replace(':', '_').replace('\r', '_').replace('\n', '_'); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
744 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
745 |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
746 private File getWorkingDir(HgVcsRoot root) { |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
747 File customDir = root.getCustomWorkingDir(); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
748 return customDir != null ? customDir : myMirrorManager.getMirrorDir(root.getRepository()); |
184
c6de9e076765
add method to get working dir for settings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
182
diff
changeset
|
749 } |
c6de9e076765
add method to get working dir for settings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
182
diff
changeset
|
750 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
751 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
752 public boolean isAgentSideCheckoutAvailable() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
753 return true; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
754 } |
241
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
755 |
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
756 |
244
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
757 private File createLabelingTmpDir() throws VcsException { |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
758 try { |
467
bc2e00800054
TW-22279 use shorter temprorary dir name for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
461
diff
changeset
|
759 return HgFileUtil.createTempDir(); |
244
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
760 } catch (IOException e) { |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
761 throw new VcsException("Unable to create temporary directory"); |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
762 } |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
763 } |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
764 |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
765 |
241
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
766 /* for tests only */ |
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
767 public MirrorManager getMirrorManager() { |
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
768 return myMirrorManager; |
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
769 } |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
770 |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
771 |
317
c247d4637a96
Make hg dag-based
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
315
diff
changeset
|
772 @Override |
c247d4637a96
Make hg dag-based
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
315
diff
changeset
|
773 public boolean isDAGBasedVcs() { |
324
86a668c1c82b
Make hg dag-based again
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
323
diff
changeset
|
774 return true; |
317
c247d4637a96
Make hg dag-based
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
315
diff
changeset
|
775 } |
339 | 776 |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
777 private static class IgnoreDotHgFilter implements FileFilter { |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
778 public boolean accept(final File file) { |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
779 return !(file.isDirectory() && ".hg".equals(file.getName())); |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
780 } |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
781 } |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
782 |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
783 private static class AcceptAllFilter implements FileFilter { |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
784 public boolean accept(File pathname) { |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
785 return true; |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
786 } |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
787 } |
342
040cd38f6f9e
Use factory to create repository state
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
339
diff
changeset
|
788 |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
789 public ServerHgRepo createRepo(@NotNull HgVcsRoot root) throws VcsException { |
429
04eab204ba39
Remove HgVcsRoot's dependency on HgPathProvider
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
426
diff
changeset
|
790 return myRepoFactory.create(getWorkingDir(root), myHgPathProvider.getHgPath(root), root.getAuthSettings()); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
791 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
792 |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
793 private HgRepo createRepo(@NotNull HgVcsRoot root, @NotNull File customDir) throws VcsException { |
429
04eab204ba39
Remove HgVcsRoot's dependency on HgPathProvider
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
426
diff
changeset
|
794 return myRepoFactory.create(customDir, myHgPathProvider.getHgPath(root), root.getAuthSettings()); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
795 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
796 |
342
040cd38f6f9e
Use factory to create repository state
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
339
diff
changeset
|
797 @NotNull |
040cd38f6f9e
Use factory to create repository state
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
339
diff
changeset
|
798 public String getBranchName(@NotNull final VcsRoot root) { |
040cd38f6f9e
Use factory to create repository state
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
339
diff
changeset
|
799 try { |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
800 HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
801 return hgRoot.getBranchName(); |
342
040cd38f6f9e
Use factory to create repository state
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
339
diff
changeset
|
802 } catch (VcsException e) { |
040cd38f6f9e
Use factory to create repository state
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
339
diff
changeset
|
803 return "default"; |
040cd38f6f9e
Use factory to create repository state
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
339
diff
changeset
|
804 } |
040cd38f6f9e
Use factory to create repository state
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
339
diff
changeset
|
805 } |
411
490024d8e5fd
Test patch from newer revision to earlier
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
408
diff
changeset
|
806 |
490024d8e5fd
Test patch from newer revision to earlier
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
408
diff
changeset
|
807 @NotNull |
490024d8e5fd
Test patch from newer revision to earlier
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
408
diff
changeset
|
808 @Override |
439 | 809 public Map<String, String> getCheckoutProperties(@NotNull VcsRoot root) { |
416
9a467ce09cbd
Fix repository properties calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
415
diff
changeset
|
810 Map<String, String> rootProperties = root.getProperties(); |
9a467ce09cbd
Fix repository properties calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
415
diff
changeset
|
811 Map<String, String> repositoryProperties = new HashMap<String, String>(); |
9a467ce09cbd
Fix repository properties calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
415
diff
changeset
|
812 repositoryProperties.put(Constants.REPOSITORY_PROP, rootProperties.get(Constants.REPOSITORY_PROP)); |
9a467ce09cbd
Fix repository properties calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
415
diff
changeset
|
813 return repositoryProperties; |
411
490024d8e5fd
Test patch from newer revision to earlier
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
408
diff
changeset
|
814 } |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
815 |
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
816 |
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
817 @Override |
435
4b6cca841ea5
New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
430
diff
changeset
|
818 public ListFilesPolicy getListFilesPolicy() { |
4b6cca841ea5
New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
430
diff
changeset
|
819 return new ListFilesSupport(this, myHgVcsRootFactory); |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
820 } |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
821 |
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
822 |
522
686b04d58c6e
Use a new way to provide vcs extensions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
519
diff
changeset
|
823 @Override |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
824 @Nullable |
522
686b04d58c6e
Use a new way to provide vcs extensions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
519
diff
changeset
|
825 protected <T extends VcsExtension> T getVcsCustomExtension(@NotNull final Class<T> extensionClass) { |
519 | 826 if (myExtensions == null) |
827 return null; | |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
828 for (MercurialServerExtension e : myExtensions) { |
522
686b04d58c6e
Use a new way to provide vcs extensions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
519
diff
changeset
|
829 if (extensionClass.isInstance(e)) |
686b04d58c6e
Use a new way to provide vcs extensions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
519
diff
changeset
|
830 return extensionClass.cast(e); |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
831 } |
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
832 return null; |
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
833 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
834 } |