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>
parents: 165 169
diff changeset
1 /*
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
3 *
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
7 *
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
9 *
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
15 */
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
17
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
33
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
38 import java.util.*;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
43 /**
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
45 * <ul>
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
49 * </ul>
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
50 *
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
51 * <p>Working copy of repository is created in the $TEAMCITY_DATA_PATH/system/caches/hg_&lt;hash code> folder.
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
100 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
105 final String path = rules.map(mf.getPath());
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
106 if (shouldInclude(path))
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
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>
parents: 165 169
diff changeset
108 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
109 return files;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
110 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
111
260
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
112 private boolean shouldInclude(String path) {
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
113 return path != null;
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
114 }
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
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
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
117 String normalizedPath = PathUtil.normalizeSeparator(mf.getPath());
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
118 VcsChangeInfo.Type changeType = getChangeType(mf.getStatus());
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
119 if (changeType == null) {
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
120 Loggers.VCS.warn("Unable to convert status: " + mf.getStatus() + " to VCS change type");
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
121 changeType = VcsChangeInfo.Type.NOT_CHANGED;
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
122 }
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
123 return new VcsChange(changeType, mf.getStatus().getName(), normalizedPath, mappedPath, prevVer, curVer);
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
124 }
62f9389a4095 TW-17530
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 256
diff changeset
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>
parents: 165 169
diff changeset
127 switch (status) {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
131 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
132 return null;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
133 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
134
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
135 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
142 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
143
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
144 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
158 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
159 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
160
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
161 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
162 public String getName() {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
164 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
165
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
166 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
167 @Used("jsp")
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
168 public String getDisplayName() {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
169 return "Mercurial";
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
170 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
171
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
172 @Nullable
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
173 public PropertiesProcessor getVcsPropertiesProcessor() {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
174 return new AbstractVcsPropertiesProcessor() {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
182 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
183 return result;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
184 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
185 };
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
186 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
187
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
188 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
189 public String getVcsSettingsJspFilePath() {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
190 return "mercurialSettings.jsp";
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
191 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
192
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
193 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
203 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
204
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
206 return false;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
207 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
208
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
209 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
212 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
213
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
214 @Override
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
217 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
218
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
219 @Nullable
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
225 return defaults;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
226 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
227
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
230 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
231
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
232 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
239 try {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
241 } catch (Exception e) {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
242 return 1;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
243 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
244 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
245 };
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
246 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
247
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
261 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
262 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
275 } else {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
278 try {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
280 } finally {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
281 is.close();
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
282 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
283 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
284 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
287 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
288 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
289
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
317 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
318 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
326 if (files != null) {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
332 if (realFile.isDirectory()) {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
335 } else {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
337 try {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
339 } finally {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
340 is.close();
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
341 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
342 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
343 } else {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
346 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
347 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
348 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
349 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
350 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
404 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
407 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
408 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
419 @Override
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
420 public LabelingSupport getLabelingSupport() {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
421 return this;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
422 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
423
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
424 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
425 public VcsFileContentProvider getContentProvider() {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
426 return this;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
427 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
428
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
429 @NotNull
485
774229a5fcd2 fix compilation, update API
eugene.petrenko@gmail.com
parents: 478
diff changeset
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>
parents: 165 169
diff changeset
459 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
460
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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
774229a5fcd2 fix compilation, update API
eugene.petrenko@gmail.com
parents: 478
diff changeset
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
774229a5fcd2 fix compilation, update API
eugene.petrenko@gmail.com
parents: 478
diff changeset
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
774229a5fcd2 fix compilation, update API
eugene.petrenko@gmail.com
parents: 478
diff changeset
472 @NotNull RepositoryStateData fromState,
774229a5fcd2 fix compilation, update API
eugene.petrenko@gmail.com
parents: 478
diff changeset
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
505 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
517 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
534 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
549 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
550
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
563 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
602 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
670 @NotNull
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
696 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
697
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
700 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
701
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
704 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
705
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
706 @Override
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
707 public boolean allowSourceCaching() {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
710 return false;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
711 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
712
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
734 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
735
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
738 // tag name must not contain:
246
8ffe311f9b8e fix comments
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 245
diff changeset
739 // Colon (ASCII 58, ':')
8ffe311f9b8e fix comments
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 245
diff changeset
740 // Carriage return (ASCII 13, '\r')
8ffe311f9b8e fix comments
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 245
diff changeset
741 // Newline (ASCII 10, '\n')
174
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
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>
parents: 165 169
diff changeset
744 }
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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>
parents: 165 169
diff changeset
751
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
752 public boolean isAgentSideCheckoutAvailable() {
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
diff changeset
753 return true;
2faaa84c0896 Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 165 169
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
b799355b4016 Merge branch Eluru-6.5.x
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 335 338
diff changeset
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
f957619d2b04 method renamed
Pavel.Sher
parents: 436
diff changeset
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
a467f08ac929 Fix NPE
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 514
diff changeset
826 if (myExtensions == null)
a467f08ac929 Fix NPE
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 514
diff changeset
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>
parents: 165 169
diff changeset
834 }