Mercurial > hg > mercurial
annotate mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java @ 876:b2816067699a
Report lock acquisition progress
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Wed, 01 Oct 2014 22:03:19 +0200 |
parents | 95e7d2ff8945 |
children | 45311425ee3c |
rev | line source |
---|---|
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
1 /* |
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
697
diff
changeset
|
2 * Copyright 2000-2014 JetBrains s.r.o. |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
3 * |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
5 * you may not use this file except in compliance with the License. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
6 * You may obtain a copy of the License at |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
7 * |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
9 * |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
13 * See the License for the specific language governing permissions and |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
14 * limitations under the License. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
15 */ |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
16 package jetbrains.buildServer.buildTriggers.vcs.mercurial; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
17 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
18 import jetbrains.buildServer.Used; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
19 import jetbrains.buildServer.buildTriggers.vcs.AbstractVcsPropertiesProcessor; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
20 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.*; |
627
eadc7e5c2236
TW-28975, TW-30345 re-clone repository in case of "abandoned transaction" error
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
605
diff
changeset
|
21 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.AbandonedTransactionFound; |
399
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; |
697
d1469a7cc038
Skip collecting changes in subrepos which url cannot be resolved
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
696
diff
changeset
|
23 import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.exception.WrongSubrepoUrlException; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
24 import jetbrains.buildServer.log.Loggers; |
652
99bee7b19368
call super in getVcsCustomExtension
eugene.petrenko@gmail.com
parents:
641
diff
changeset
|
25 import jetbrains.buildServer.serverSide.InvalidProperty; |
99bee7b19368
call super in getVcsCustomExtension
eugene.petrenko@gmail.com
parents:
641
diff
changeset
|
26 import jetbrains.buildServer.serverSide.PropertiesProcessor; |
99bee7b19368
call super in getVcsCustomExtension
eugene.petrenko@gmail.com
parents:
641
diff
changeset
|
27 import jetbrains.buildServer.serverSide.ServerListener; |
99bee7b19368
call super in getVcsCustomExtension
eugene.petrenko@gmail.com
parents:
641
diff
changeset
|
28 import jetbrains.buildServer.serverSide.ServerListenerAdapter; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
29 import jetbrains.buildServer.util.EventDispatcher; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
30 import jetbrains.buildServer.util.FileUtil; |
372
2869f49b9211
TW-17252 handle mercurial caches correctly
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
371
diff
changeset
|
31 import jetbrains.buildServer.util.cache.ResetCacheRegister; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
32 import jetbrains.buildServer.vcs.*; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
33 import jetbrains.buildServer.vcs.patches.PatchBuilder; |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
34 import org.apache.commons.compress.archivers.ArchiveEntry; |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
35 import org.apache.commons.compress.archivers.ArchiveInputStream; |
688
5f3b5d95504e
Get rid of ArchiveUtil
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
686
diff
changeset
|
36 import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
37 import org.jetbrains.annotations.NotNull; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
38 import org.jetbrains.annotations.Nullable; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
39 |
809 | 40 import java.io.*; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
41 import java.util.*; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
42 |
870
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
43 import static com.intellij.openapi.util.text.StringUtil.isEmpty; |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
474
diff
changeset
|
44 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
|
45 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
46 /** |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
47 * Mercurial VCS plugin for TeamCity works as follows: |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
48 * <ul> |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
49 * <li>clones repository to internal storage |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
50 * <li>before any operation with working copy of repository pulls changes from the original repository |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
51 * <li>executes corresponding hg command |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
52 * </ul> |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
53 * |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
54 * <p>Working copy of repository is created in the $TEAMCITY_DATA_PATH/system/caches/hg_<hash code> folder. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
55 * <p>Personal builds (remote runs) are not yet supported, they require corresponding functionality from the IDE. |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
56 */ |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
566
diff
changeset
|
57 public class MercurialVcsSupport extends ServerVcsSupport implements LabelingSupport, VcsFileContentProvider, BuildPatchByCheckoutRules { |
873
95e7d2ff8945
Run hg pull with progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
872
diff
changeset
|
58 private final VcsOperationProgressProvider myProgressProvider; |
355
69d66e4f60e3
Extract MirrorManager interface
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
352
diff
changeset
|
59 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
|
60 private final ServerPluginConfig myConfig; |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
61 private final HgPathProvider myHgPathProvider; |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
62 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
|
63 private final HgVcsRootFactory myHgVcsRootFactory; |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
64 private final FileFilter myIgnoreDotHgFilter = new IgnoreDotHgFilter(); |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
65 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
|
66 private final HgTestConnectionSupport myTestConnection; |
587
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
67 private final SubrepoCheckoutRulesProvider mySubrepoCheckoutRulesProvider; |
631
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
68 private final Collection<MercurialServerExtension> myExtensions = new ArrayList<MercurialServerExtension>(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
69 |
873
95e7d2ff8945
Run hg pull with progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
872
diff
changeset
|
70 public MercurialVcsSupport(@NotNull final VcsOperationProgressProvider progressProvider, |
95e7d2ff8945
Run hg pull with progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
872
diff
changeset
|
71 @NotNull final EventDispatcher<ServerListener> dispatcher, |
372
2869f49b9211
TW-17252 handle mercurial caches correctly
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
371
diff
changeset
|
72 @NotNull final ResetCacheRegister resetCacheHandlerManager, |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
73 @NotNull final ServerPluginConfig config, |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
74 @NotNull final HgPathProvider hgPathProvider, |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
75 @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
|
76 @NotNull final MirrorManager mirrorManager, |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
77 @NotNull final HgVcsRootFactory hgVcsRootFactory, |
587
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
78 @NotNull final HgTestConnectionSupport testConnection, |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
79 @NotNull final SubrepoCheckoutRulesProvider subrepoCheckoutRulesProvider) { |
873
95e7d2ff8945
Run hg pull with progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
872
diff
changeset
|
80 myProgressProvider = progressProvider; |
256
73708ca4521f
Add ability to disable pull protocol
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
252
diff
changeset
|
81 myConfig = config; |
356
53b430731041
TW-19984 ensure map file cleaned as well
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
355
diff
changeset
|
82 myMirrorManager = mirrorManager; |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
83 myHgPathProvider = hgPathProvider; |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
84 myRepoFactory = repoFactory; |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
85 myHgVcsRootFactory = hgVcsRootFactory; |
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
86 myTestConnection = testConnection; |
587
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
87 mySubrepoCheckoutRulesProvider = subrepoCheckoutRulesProvider; |
372
2869f49b9211
TW-17252 handle mercurial caches correctly
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
371
diff
changeset
|
88 resetCacheHandlerManager.registerHandler(new MercurialResetCacheHandler(myMirrorManager)); |
514
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
89 dispatcher.addListener(new ServerListenerAdapter() { |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
90 @Override |
408
b34ffc622efc
TW-20295 store log.template in the temp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
404
diff
changeset
|
91 public void serverShutdown() { |
b34ffc622efc
TW-20295 store log.template in the temp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
404
diff
changeset
|
92 myRepoFactory.dispose(); |
b34ffc622efc
TW-20295 store log.template in the temp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
404
diff
changeset
|
93 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
94 }); |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
95 logUsedHg(); |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
96 } |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
97 |
631
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
98 public void addExtensions(@NotNull Collection<MercurialServerExtension> extensions) { |
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
99 myExtensions.addAll(extensions); |
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
100 } |
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
101 |
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
102 public void addExtension(@NotNull MercurialServerExtension extension) { |
d28d52336ce5
Implement MergeSupport
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
103 myExtensions.add(extension); |
514
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
104 } |
89e9c06fbc76
Move TeamCity-specific logic to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
511
diff
changeset
|
105 |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
106 private void logUsedHg() { |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
107 String hgPath = myConfig.getHgPath(); |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
108 if (hgPath != null) |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
109 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
|
110 else |
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
111 Loggers.VCS.info("Server-wide hg path is not set, will use path from the VCS root settings"); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
112 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
113 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
114 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
115 public byte[] getContent(@NotNull final VcsModification vcsModification, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
116 @NotNull final VcsChangeInfo change, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
117 @NotNull final VcsChangeInfo.ContentType contentType, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
118 @NotNull final VcsRoot vcsRoot) throws VcsException { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
119 String version = contentType == VcsChangeInfo.ContentType.AFTER_CHANGE ? change.getAfterChangeRevisionNumber() : change.getBeforeChangeRevisionNumber(); |
572
6e5934c81b66
fix getContent for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
567
diff
changeset
|
120 return getContent(change.getFileName(), vcsRoot, version); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
121 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
122 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
123 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
124 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
|
125 ChangeSet cset = new ChangeSet(version); |
775 | 126 HgVcsRoot root = getHgRoot(vcsRoot); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
127 syncRepository(root, cset); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
128 HgRepo repo = createRepo(root); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
129 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
|
130 File file = new File(parentDir, filePath); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
131 try { |
397
36b1bc5add89
Method getContent() should throw exception for non-existing files
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
380
diff
changeset
|
132 return FileUtil.loadFileBytes(file); |
36b1bc5add89
Method getContent() should throw exception for non-existing files
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
380
diff
changeset
|
133 } catch (IOException e) { |
36b1bc5add89
Method getContent() should throw exception for non-existing files
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
380
diff
changeset
|
134 throw new VcsException("Failed to load content of file " + filePath + " at revision " + version, e); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
135 } finally { |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
474
diff
changeset
|
136 deleteDir(parentDir, Loggers.VCS); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
137 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
138 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
139 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
140 @NotNull |
775 | 141 public HgVcsRoot getHgRoot(@NotNull final VcsRoot vcsRoot) throws VcsException { |
142 return myHgVcsRootFactory.createHgRoot(vcsRoot); | |
143 } | |
144 | |
145 @NotNull | |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
146 public String getName() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
147 return Constants.VCS_NAME; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
148 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
149 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
150 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
151 @Used("jsp") |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
152 public String getDisplayName() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
153 return "Mercurial"; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
154 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
155 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
156 @Nullable |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
157 public PropertiesProcessor getVcsPropertiesProcessor() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
158 return new AbstractVcsPropertiesProcessor() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
159 public Collection<InvalidProperty> process(final Map<String, String> properties) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
160 List<InvalidProperty> result = new ArrayList<InvalidProperty>(); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
161 if (isEmpty(properties.get(Constants.HG_COMMAND_PATH_PROP))) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
162 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
|
163 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
164 if (isEmpty(properties.get(Constants.REPOSITORY_PROP))) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
165 result.add(new InvalidProperty(Constants.REPOSITORY_PROP, "Repository must be specified")); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
166 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
167 return result; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
168 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
169 }; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
170 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
171 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
172 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
173 public String getVcsSettingsJspFilePath() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
174 return "mercurialSettings.jsp"; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
175 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
176 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
177 public boolean sourcesUpdatePossibleIfChangesNotFound(@NotNull final VcsRoot root) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
178 return false; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
179 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
180 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
181 @NotNull |
775 | 182 public String describeVcsRoot(@NotNull final VcsRoot vcsRoot) { |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
183 return "mercurial: " + vcsRoot.getProperty(Constants.REPOSITORY_PROP); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
184 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
185 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
186 @Override |
775 | 187 @NotNull |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
188 public TestConnectionSupport getTestConnectionSupport() { |
430
3600b68a4c0c
TW-21403 better error message when hg not found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
429
diff
changeset
|
189 return myTestConnection; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
190 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
191 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
192 @Nullable |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
193 public Map<String, String> getDefaultVcsProperties() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
194 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
|
195 defaults.put(Constants.BRANCH_NAME_PROP, "default"); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
196 defaults.put(Constants.HG_COMMAND_PATH_PROP, "hg"); |
502
2755266b7dd5
Use uncompressed transfer explicitly
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
501
diff
changeset
|
197 defaults.put(Constants.UNCOMPRESSED_TRANSFER, "true"); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
198 return defaults; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
199 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
200 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
201 public String getVersionDisplayName(@NotNull final String version, @NotNull final VcsRoot root) throws VcsException { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
202 return new ChangeSet(version).getId(); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
203 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
204 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
205 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
206 public Comparator<String> getVersionComparator() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
207 // comparator is called when TeamCity needs to sort modifications in the order of their appearance, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
208 // currently we sort changes by revision number, not sure however that this is a good idea, |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
209 // probably it would be better to sort them by timestamp (and to add timestamp into the version). |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
210 return new Comparator<String>() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
211 public int compare(final String o1, final String o2) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
212 try { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
213 return new ChangeSet(o1).getRevNumber() - new ChangeSet(o2).getRevNumber(); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
214 } catch (Exception e) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
215 return 1; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
216 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
217 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
218 }; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
219 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
220 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
221 // builds patch from version to version |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
222 private void buildIncrementalPatch(@NotNull final HgVcsRoot root, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
223 @NotNull final ChangeSet fromVer, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
224 @NotNull final ChangeSet toVer, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
225 @NotNull final PatchBuilder builder, |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
226 @NotNull final CheckoutRules checkoutRules) throws VcsException, IOException { |
808 | 227 final HgRepo repo = createRepo(root); |
228 final List<FileStatus> modifiedFiles = repo.status().fromRevision(fromVer).toRevision(toVer).call(); | |
229 final List<String> notDeletedFiles = new ArrayList<String>(); | |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
230 for (FileStatus f: modifiedFiles) { |
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
231 if (f.getStatus() != Status.REMOVED) { |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
232 notDeletedFiles.add(f.getPath()); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
233 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
234 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
235 |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
236 File parentDir = null; |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
237 try { |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
238 if (root.useArchiveForPatch()) { |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
239 parentDir = HgFileUtil.createTempDir(); |
808 | 240 final File archFile = new File(parentDir, "arch.tar"); |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
241 buildIncrementalPatchWithArchive(builder, repo, toVer, checkoutRules, modifiedFiles, notDeletedFiles, archFile); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
242 } else { |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
243 parentDir = repo.cat().files(notDeletedFiles).atRevision(toVer).call(); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
244 for (FileStatus f: modifiedFiles) { |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
245 String mappedPath = checkoutRules.map(f.getPath()); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
246 if (mappedPath == null) continue; // skip |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
247 final File virtualFile = new File(mappedPath); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
248 if (f.getStatus() == Status.REMOVED) { |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
249 builder.deleteFile(virtualFile, true); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
250 } else { |
808 | 251 final File realFile = new File(parentDir, f.getPath()); |
809 | 252 final InputStream is = new BufferedInputStream(new FileInputStream(realFile)); |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
253 try { |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
254 builder.changeOrCreateBinaryFile(virtualFile, null, is, realFile.length()); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
255 } finally { |
809 | 256 FileUtil.close(is); |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
257 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
258 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
259 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
260 } |
675
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
261 if (root.includeSubreposInPatch()) |
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
262 buildSubrepoPatch(root, fromVer, toVer, builder, checkoutRules, repo); |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
263 } catch (Exception e) { |
850
67753eb68a09
Don't build a clean patch if incremental patch fails
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
794
diff
changeset
|
264 if (e instanceof VcsException) |
67753eb68a09
Don't build a clean patch if incremental patch fails
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
794
diff
changeset
|
265 throw (VcsException) e; |
67753eb68a09
Don't build a clean patch if incremental patch fails
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
794
diff
changeset
|
266 throw new VcsException("Error while building an incremental patch", e); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
267 } finally { |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
268 if (parentDir != null) |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
269 deleteDir(parentDir, Loggers.VCS); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
270 } |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
271 } |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
272 |
805 | 273 private void buildIncrementalPatchWithArchive(@NotNull final PatchBuilder builder, |
274 @NotNull final HgRepo repo, | |
275 @NotNull final ChangeSet toVer, | |
276 @NotNull final CheckoutRules checkoutRules, | |
277 @NotNull final List<FileStatus> modifiedFiles, | |
278 @NotNull final List<String> notDeletedFiles, | |
279 @NotNull final File archiveFile) throws VcsException, IOException { | |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
280 ArchiveCommand archive = repo.archive().revision(toVer).type("tar").destination(archiveFile); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
281 int i = 0; |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
282 while (i < notDeletedFiles.size()) { |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
283 String mappedPath = checkoutRules.map(notDeletedFiles.get(i)); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
284 if (mappedPath == null) { |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
285 i++; |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
286 continue; |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
287 } |
862
24a6ef9166ae
UP-1866 disable patterns in hg archive include rules
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
853
diff
changeset
|
288 if (archive.addIncludePathRule(/*"path:" + */notDeletedFiles.get(i))) { |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
289 i++; |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
290 continue; |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
291 } |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
292 //archive command is full, call it |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
293 archive.call(); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
294 buildPatchFromArchive(builder, archiveFile, checkoutRules, new ExcludeHgArchival()); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
295 FileUtil.delete(archiveFile); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
296 archive = repo.archive().revision(toVer).type("tar").destination(archiveFile); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
297 } |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
298 if (!notDeletedFiles.isEmpty()) { |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
299 archive.call(); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
300 buildPatchFromArchive(builder, archiveFile, checkoutRules, new ExcludeHgArchival()); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
301 FileUtil.delete(archiveFile); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
302 } |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
303 |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
304 //delete removed files |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
305 for (FileStatus f: modifiedFiles) { |
813 | 306 if (f.getStatus() != Status.REMOVED) continue; //other files processed below |
307 | |
308 final String mappedPath = checkoutRules.map(f.getPath()); | |
309 if (mappedPath == null) continue; // skip | |
310 | |
311 builder.deleteFile(new File(mappedPath), true); | |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
312 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
313 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
314 |
587
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
315 |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
316 private void buildSubrepoPatch(@NotNull HgVcsRoot mainRoot, |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
317 @NotNull ChangeSet mainRootFromRevision, |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
318 @NotNull ChangeSet mainRootToRevision, |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
319 @NotNull PatchBuilder builder, |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
320 @NotNull CheckoutRules mainRootRules, |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
321 @NotNull HgRepo mainRepo) throws IOException, VcsException { |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
322 List<HgSubrepoConfigChange> subrepoConfigChanges = mainRepo.getSubrepoConfigChanges(mainRootFromRevision.getId(), mainRootToRevision.getId()); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
323 for (HgSubrepoConfigChange configChange : subrepoConfigChanges) { |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
324 try { |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
325 String subrepoPath = configChange.getPath(); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
326 if (!mainRootRules.shouldInclude(subrepoPath)) |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
327 continue; |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
328 SubRepo currentSubrepo = configChange.getCurrent(); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
329 |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
330 if (configChange.subrepoAdded()) { |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
331 assert currentSubrepo != null; |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
332 String subrepoUrl = currentSubrepo.resolveUrl(mainRoot.getRepository()); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
333 HgVcsRoot subrepoRoot = mainRoot.withUrl(subrepoUrl); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
334 String subrepoFromRevision = null; |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
335 String subrepoToRevision = currentSubrepo.revision(); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
336 CheckoutRules subrepoRules = mySubrepoCheckoutRulesProvider.getSubrepoRules(mainRootRules, subrepoPath); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
337 buildPatch(subrepoRoot, subrepoFromRevision, subrepoToRevision, builder, subrepoRules); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
338 |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
339 } else if (configChange.subrepoRemoved()) { |
853
820d02ac9b8a
Map subrepo path when we remove it
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
851
diff
changeset
|
340 deleteDirInPatch(builder, mainRootRules, subrepoPath); |
587
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
341 |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
342 } else if (configChange.subrepoUrlChanged()) { |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
343 assert currentSubrepo != null; |
853
820d02ac9b8a
Map subrepo path when we remove it
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
851
diff
changeset
|
344 deleteDirInPatch(builder, mainRootRules, subrepoPath); |
587
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
345 |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
346 String subrepoUrl = currentSubrepo.resolveUrl(mainRoot.getRepository()); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
347 HgVcsRoot subrepoRoot = mainRoot.withUrl(subrepoUrl); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
348 String subrepoFromRevision = null; |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
349 String subrepoToRevision = currentSubrepo.revision(); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
350 CheckoutRules subrepoRules = mySubrepoCheckoutRulesProvider.getSubrepoRules(mainRootRules, subrepoPath); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
351 buildPatch(subrepoRoot, subrepoFromRevision, subrepoToRevision, builder, subrepoRules); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
352 |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
353 } else { |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
354 assert currentSubrepo != null; |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
355 String subrepoUrl = currentSubrepo.resolveUrl(mainRoot.getRepository()); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
356 HgVcsRoot subrepoRoot = mainRoot.withUrl(subrepoUrl); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
357 String subrepoFromRevision = configChange.getPrevious().get(0).revision(); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
358 String subrepoToRevision = currentSubrepo.revision(); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
359 CheckoutRules subrepoRules = mySubrepoCheckoutRulesProvider.getSubrepoRules(mainRootRules, subrepoPath); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
360 buildPatch(subrepoRoot, subrepoFromRevision, subrepoToRevision, builder, subrepoRules); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
361 } |
697
d1469a7cc038
Skip collecting changes in subrepos which url cannot be resolved
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
696
diff
changeset
|
362 } catch (WrongSubrepoUrlException e) { |
587
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
363 throw new VcsException("Error while resolving subrepo url", e); |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
364 } |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
365 } |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
366 } |
e77ef6cd4ddb
Incremental patch for VCS root with subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
586
diff
changeset
|
367 |
853
820d02ac9b8a
Map subrepo path when we remove it
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
851
diff
changeset
|
368 private void deleteDirInPatch(@NotNull PatchBuilder builder, @NotNull CheckoutRules rules, @NotNull String unMappedPath) throws IOException { |
820d02ac9b8a
Map subrepo path when we remove it
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
851
diff
changeset
|
369 for (IncludeRule rule : rules.getRootIncludeRules()) { |
820d02ac9b8a
Map subrepo path when we remove it
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
851
diff
changeset
|
370 String mappedPath = rule.map(unMappedPath); |
820d02ac9b8a
Map subrepo path when we remove it
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
851
diff
changeset
|
371 if (mappedPath != null) |
820d02ac9b8a
Map subrepo path when we remove it
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
851
diff
changeset
|
372 builder.deleteDirectory(new File(mappedPath), true); |
820d02ac9b8a
Map subrepo path when we remove it
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
851
diff
changeset
|
373 } |
820d02ac9b8a
Map subrepo path when we remove it
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
851
diff
changeset
|
374 } |
820d02ac9b8a
Map subrepo path when we remove it
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
851
diff
changeset
|
375 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
376 // builds patch by exporting files using specified version |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
377 private void buildFullPatch(@NotNull final HgVcsRoot root, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
378 @NotNull final ChangeSet toVer, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
379 @NotNull final PatchBuilder builder, |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
380 @NotNull final CheckoutRules checkoutRules) throws IOException, VcsException { |
816 | 381 final File tempDir = HgFileUtil.createTempDir(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
382 try { |
816 | 383 final HgRepo repo = createRepo(root); |
675
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
384 if (root.includeSubreposInPatch()) { |
816 | 385 final Map<String, SubRepo> subrepos = repo.getSubrepositories(toVer); |
675
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
386 if (!subrepos.isEmpty()) { |
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
387 Loggers.VCS.debug("Repository '" + root.getRepository() + "' has subrepos at revision " + toVer.getId() + ", use 'hg clone' to build clean patch"); |
816 | 388 final File mirrorDir = getWorkingDir(root); |
389 final HgRepo cloneOfTheMirror = createRepo(root, tempDir); | |
872
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
870
diff
changeset
|
390 cloneOfTheMirror.init().call(); |
675
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
391 cloneOfTheMirror.setDefaultPath(root.getRepository()); |
872
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
870
diff
changeset
|
392 cloneOfTheMirror.setTeamCityConfig(root.getCustomHgConfig()); |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
870
diff
changeset
|
393 cloneOfTheMirror.pull().fromRepository(mirrorDir).call(); |
675
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
394 cloneSubrepos(root, tempDir, subrepos); |
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
395 cloneOfTheMirror.update().toRevision(toVer).call(); |
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
396 buildPatchFromDirectory(builder, tempDir, checkoutRules, myIgnoreDotHgFilter); |
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
397 } else { |
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
398 Loggers.VCS.debug("Repository '" + root.getRepository() + "' doesn't have subrepos at revision " + toVer.getId() + ", use 'hg archive' to build clean patch"); |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
399 if (root.useArchiveForPatch()) { |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
400 File archive = new File(tempDir, "arch.tar"); |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
401 repo.archive().revision(toVer).type("tar").destination(archive).call(); |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
402 buildPatchFromArchive(builder, archive, checkoutRules, new ExcludeHgArchival()); |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
403 } else { |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
404 repo.archive().revision(toVer).destination(tempDir).call(); |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
405 buildPatchFromDirectory(builder, tempDir, checkoutRules, myAcceptAllFilter); |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
406 } |
675
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
407 } |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
408 } else { |
675
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
409 Loggers.VCS.debug("Subrepos disabled in VCS root, use 'hg archive' to build clean patch"); |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
410 if (root.useArchiveForPatch()) { |
816 | 411 final File archive = new File(tempDir, "arch.tar"); |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
412 repo.archive().revision(toVer).type("tar").destination(archive).call(); |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
413 buildPatchFromArchive(builder, archive, checkoutRules, new ExcludeHgArchival()); |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
414 } else { |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
415 repo.archive().revision(toVer).destination(tempDir).call(); |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
416 buildPatchFromDirectory(builder, tempDir, checkoutRules, myAcceptAllFilter); |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
417 } |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
418 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
419 } finally { |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
474
diff
changeset
|
420 deleteDir(tempDir, Loggers.VCS); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
421 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
422 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
423 |
586
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
424 private void cloneSubrepos(@NotNull HgVcsRoot mainRoot, @NotNull File mainRootDir, @NotNull Map<String, SubRepo> subrepos) throws VcsException, IOException { |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
425 for (Map.Entry<String, SubRepo> e : subrepos.entrySet()) { |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
426 String path = e.getKey(); |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
427 SubRepo subrepoConfig = e.getValue(); |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
428 if (subrepoConfig.vcsType() != SubRepo.VcsType.hg) |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
429 continue; |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
430 String parentRepositoryUrl = mainRoot.getRepository(); |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
431 try { |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
432 String subrepoUrl = subrepoConfig.resolveUrl(parentRepositoryUrl); |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
433 HgVcsRoot subrepoRoot = mainRoot.withUrl(subrepoUrl); |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
434 HgRepo subrepo = createRepo(subrepoRoot); |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
435 if (!subrepo.containsRevision(subrepoConfig.revision())) |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
436 syncRepository(subrepoRoot); |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
437 |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
438 File subrepoMirrorDir = getWorkingDir(subrepoRoot); |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
439 File subrepoDir = new File(mainRootDir, path); |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
440 HgRepo cloneOfSubrepoMirror = createRepo(subrepoRoot, subrepoDir); |
872
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
870
diff
changeset
|
441 cloneOfSubrepoMirror.init().call(); |
737
ecbca39d0aef
Use a resolved subrepo url as a default path
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
732
diff
changeset
|
442 cloneOfSubrepoMirror.setDefaultPath(subrepoUrl); |
872
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
870
diff
changeset
|
443 cloneOfSubrepoMirror.setTeamCityConfig(mainRoot.getCustomHgConfig()); |
a6405f5aad54
TW-19916 more support for custom mercurial config
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
870
diff
changeset
|
444 cloneOfSubrepoMirror.pull().fromRepository(subrepoMirrorDir).call(); |
586
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
445 Map<String, SubRepo> subSubrepos = subrepo.getSubrepositories(subrepoConfig.revision()); |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
446 if (!subSubrepos.isEmpty()) |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
447 cloneSubrepos(subrepoRoot, subrepoDir, subSubrepos); |
697
d1469a7cc038
Skip collecting changes in subrepos which url cannot be resolved
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
696
diff
changeset
|
448 } catch (WrongSubrepoUrlException error) { |
586
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
449 //ignore it, will try to clone from network during main repository update |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
450 } |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
451 } |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
452 } |
aa515fa1f626
Clean patch uses subrepo mirrors on the server
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
572
diff
changeset
|
453 |
813 | 454 private void buildPatchFromArchive(@NotNull final PatchBuilder builder, |
455 @NotNull final File archive, | |
456 @NotNull final CheckoutRules checkoutRules, | |
457 @NotNull final FileFilter filter) throws IOException { | |
814
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
458 InputStream fis = null; |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
459 ArchiveInputStream is = null; |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
460 try { |
814
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
461 fis = new BufferedInputStream(new FileInputStream(archive)); |
688
5f3b5d95504e
Get rid of ArchiveUtil
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
686
diff
changeset
|
462 is = new TarArchiveInputStream(fis); |
814
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
463 |
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
464 ArchiveEntry entry; |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
465 while ((entry = is.getNextEntry()) != null) { |
814
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
466 if (entry.isDirectory()) continue; |
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
467 |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
468 String fileName = entry.getName(); |
814
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
469 //TODO: does it work if I have arch/ in my repo? |
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
470 if (fileName.startsWith("arch/")) fileName = fileName.substring(5); |
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
471 |
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
472 if (!filter.accept(new File(fileName))) continue; |
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
473 |
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
474 final String mappedFile = checkoutRules.map(fileName); |
870
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
475 if (!isEmpty(mappedFile)) { |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
476 builder.createBinaryFile(new File(mappedFile), null, is, entry.getSize()); |
814
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
477 } |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
478 } |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
479 } finally { |
814
44bf3a609d67
use BufferedInputStream, added TODO
eugene.petrenko@jetbrains.com
parents:
813
diff
changeset
|
480 FileUtil.closeAll(is, fis); |
686
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
481 } |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
482 } |
1efd1846f00a
Add an option for using tar archive for building a full patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
678
diff
changeset
|
483 |
815 | 484 private void buildPatchFromDirectory(@NotNull final PatchBuilder builder, |
485 @NotNull final File repRoot, | |
486 @NotNull final CheckoutRules checkoutRules, | |
487 @NotNull final FileFilter filter) throws IOException { | |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
488 buildPatchFromDirectory(repRoot, builder, repRoot, checkoutRules, filter); |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
489 } |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
490 |
815 | 491 private void buildPatchFromDirectory(@NotNull final File curDir, |
492 @NotNull final PatchBuilder builder, | |
493 @NotNull final File repRoot, | |
494 @NotNull final CheckoutRules checkoutRules, | |
495 @NotNull final FileFilter filter) throws IOException { | |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
496 File[] files = curDir.listFiles(filter); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
497 if (files != null) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
498 for (File realFile: files) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
499 String relPath = realFile.getAbsolutePath().substring(repRoot.getAbsolutePath().length()); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
500 String mappedPath = checkoutRules.map(relPath); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
501 if (mappedPath != null && mappedPath.length() > 0) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
502 final File virtualFile = new File(mappedPath); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
503 if (realFile.isDirectory()) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
504 builder.createDirectory(virtualFile); |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
505 buildPatchFromDirectory(realFile, builder, repRoot, checkoutRules, filter); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
506 } else { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
507 final FileInputStream is = new FileInputStream(realFile); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
508 try { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
509 builder.createBinaryFile(virtualFile, null, is, realFile.length()); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
510 } finally { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
511 is.close(); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
512 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
513 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
514 } else { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
515 if (realFile.isDirectory()) { |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
516 buildPatchFromDirectory(realFile, builder, repRoot, checkoutRules, filter); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
517 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
518 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
519 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
520 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
521 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
522 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
523 /* 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
|
524 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
|
525 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
|
526 lockWorkDir(workingDir); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
527 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
|
528 try { |
870
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
529 if (!repo.isValidRepository()) |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
530 repo.init().call(); |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
531 if (repo.containsRevision(cset)) |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
532 return; |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
533 repo.setDefaultPath(root.getRepository()); |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
534 repo.setTeamCityConfig(root.getCustomHgConfig()); |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
535 try { |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
536 repo.pull().fromRepository(root.getRepository()) |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
537 .withTimeout(myConfig.getPullTimeout()) |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
538 .withProfile(myConfig.runWithProfile(root)) |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
539 .call(); |
870
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
540 } catch (UnrelatedRepositoryException e) { |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
541 Loggers.VCS.warn("Repository at " + root.getRepository() + " is unrelated, clone it again"); |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
542 myMirrorManager.forgetDir(workingDir); |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
543 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
|
544 } |
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
|
545 } 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
|
546 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
|
547 } |
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
|
548 } |
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
|
549 |
695 | 550 public void syncRepository(@NotNull final VcsRoot root) throws VcsException { |
775 | 551 syncRepository(getHgRoot(root)); |
695 | 552 } |
553 | |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
554 public void syncRepository(@NotNull final HgVcsRoot root) throws VcsException { |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
796
diff
changeset
|
555 syncRepository(root, new SyncSettings<Void>(VcsCallable.NO_OP)); |
783
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
737
diff
changeset
|
556 } |
d60aa99940ba
TW-36113 retrieve bookmarks with repository lock held
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
737
diff
changeset
|
557 |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
796
diff
changeset
|
558 public <T> T syncRepository(@NotNull HgVcsRoot root, @NotNull SyncSettings<T> settings) throws VcsException { |
793
0a1ac46bfa8c
TW-33522 do not retry clone for repositories with custom clone dirs
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
792
diff
changeset
|
559 boolean customWorkingDir = root.getCustomWorkingDir() != null; |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
560 File workingDir = getWorkingDir(root); |
792
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
561 int attemptsLeft = 3; |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
562 VcsException lastError = null; |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
563 while (attemptsLeft-- > 0) { |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
564 try { |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
796
diff
changeset
|
565 return syncRepositoryOnce(root, settings, workingDir); |
792
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
566 } catch (UnrelatedRepositoryException e) { |
793
0a1ac46bfa8c
TW-33522 do not retry clone for repositories with custom clone dirs
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
792
diff
changeset
|
567 if (customWorkingDir) |
794
7a8caf98dc6e
Explain that a manual recovery is required.
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
793
diff
changeset
|
568 throw new VcsException(e.getMessage() + ". VCS root uses a custom clone dir, manual recovery is required.", e); |
792
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
569 Loggers.VCS.warn("Repository at " + workingDir.getAbsolutePath() + " is unrelated to " + root.getRepository() + |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
570 ". Clone it again, attempts left " + attemptsLeft); |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
571 myMirrorManager.forgetDir(workingDir); |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
572 lastError = e; |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
573 } catch (AbandonedTransactionFound e) { |
793
0a1ac46bfa8c
TW-33522 do not retry clone for repositories with custom clone dirs
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
792
diff
changeset
|
574 if (customWorkingDir) |
794
7a8caf98dc6e
Explain that a manual recovery is required.
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
793
diff
changeset
|
575 throw new VcsException(e.getMessage() + ". VCS root uses a custom clone dir, manual recovery is required.", e); |
792
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
576 Loggers.VCS.warn("Abandoned transaction found in repository " + root.getRepository() + " at " |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
577 + workingDir.getAbsolutePath() + ". Clone it again, attempts left " + attemptsLeft); |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
578 myMirrorManager.forgetDir(workingDir); |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
579 lastError = e; |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
580 } |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
581 } |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
582 throw lastError; |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
583 } |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
584 |
75aed0d7a1f9
TW-33522 limit the number of repository clone attempts
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
783
diff
changeset
|
585 |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
796
diff
changeset
|
586 private <T> T syncRepositoryOnce(@NotNull HgVcsRoot root, @NotNull SyncSettings<T> settings, @NotNull File workingDir) throws VcsException { |
876
b2816067699a
Report lock acquisition progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
873
diff
changeset
|
587 lockWorkDir(workingDir, settings.getProgressConsumer()); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
588 HgRepo repo = createRepo(root); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
589 try { |
870
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
590 if (!repo.isValidRepository()) |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
591 repo.init().call(); |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
592 repo.setDefaultPath(root.getRepository()); |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
593 repo.setTeamCityConfig(root.getCustomHgConfig()); |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
594 resetBookmarks(repo); |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
595 repo.pull().fromRepository(root.getRepository()) |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
596 .withTimeout(myConfig.getPullTimeout()) |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
597 .withProgressConsumer(settings.getProgressConsumer()) |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
598 .withProfile(myConfig.runWithProfile(root)) |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
599 .call(); |
799
b130c7d27c02
Report clone/pull progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
796
diff
changeset
|
600 return settings.getCmd().call(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
601 } 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
|
602 unlockWorkDir(workingDir); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
603 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
604 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
605 |
529
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
606 |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
607 private void resetBookmarks(HgRepo repo) throws VcsException { |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
608 if (!myConfig.bookmarksEnabled()) |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
609 return; |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
610 HgVersion v = repo.version().call(); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
611 if (v.isEqualsOrGreaterThan(BookmarksCommand.REQUIRED_HG_VERSION)) |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
612 repo.resetBookmarks(); |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
613 } |
33a6be414903
TW-17489 support bookmarks
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
522
diff
changeset
|
614 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
615 @Override |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
616 public LabelingSupport getLabelingSupport() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
617 return this; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
618 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
619 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
620 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
621 public VcsFileContentProvider getContentProvider() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
622 return this; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
623 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
624 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
625 @NotNull |
567
27cd2503cea3
Extract MercurialCollectChangesPolicy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
566
diff
changeset
|
626 public MercurialCollectChangesPolicy getCollectChangesPolicy() { |
873
95e7d2ff8945
Run hg pull with progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
872
diff
changeset
|
627 return new MercurialCollectChangesPolicy(myProgressProvider, this, myConfig, myHgVcsRootFactory, myRepoFactory, myHgPathProvider); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
628 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
629 |
312
8deb526363f5
TW-17882 report changes from the merged named branches
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
309
diff
changeset
|
630 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
631 @NotNull |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
632 public BuildPatchPolicy getBuildPatchPolicy() { |
412
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
633 return this; |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
634 } |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
635 |
806 | 636 public void buildPatch(@NotNull final VcsRoot root, |
637 @Nullable final String fromVersion, | |
638 @NotNull final String toVersion, | |
639 @NotNull final PatchBuilder builder, | |
640 @NotNull final CheckoutRules checkoutRules) throws IOException, VcsException { | |
641 final HgVcsRoot hgRoot = getHgRoot(root); | |
641
da9ab34663d8
Do not implement VcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
635
diff
changeset
|
642 buildPatch(hgRoot, fromVersion, toVersion, builder, checkoutRules); |
da9ab34663d8
Do not implement VcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
635
diff
changeset
|
643 } |
da9ab34663d8
Do not implement VcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
635
diff
changeset
|
644 |
806 | 645 public void buildPatch(@NotNull final HgVcsRoot hgRoot, |
646 @Nullable final String fromVersion, | |
647 @NotNull final String toVersion, | |
648 @NotNull final PatchBuilder builder, | |
649 @NotNull final CheckoutRules checkoutRules) throws IOException, VcsException { | |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
650 syncRepository(hgRoot); |
806 | 651 |
652 final ChangeSet to = new ChangeSet(toVersion); | |
653 | |
412
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
654 if (fromVersion == null) { |
444
a05eca69fc01
Ensure plugin works without revnums in revisions
Dmitry Neverov <dmitry.neverov@gmail.com>
parents:
441
diff
changeset
|
655 buildFullPatch(hgRoot, to, builder, checkoutRules); |
806 | 656 return; |
412
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
657 } |
806 | 658 |
659 final ChangeSet from = new ChangeSet(fromVersion); | |
660 final HgRepo repo = createRepo(hgRoot); | |
661 if (repo.containsRevision(from)) { | |
662 buildIncrementalPatch(hgRoot, from, to, builder, checkoutRules); | |
663 return; | |
664 } | |
665 | |
666 Loggers.VCS.info("Cannot find revision " + fromVersion + " in repository " + hgRoot.getRepository() + ", will build a full patch"); | |
667 cleanCheckoutDir(builder, checkoutRules); | |
668 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
|
669 } |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
670 |
5d4351306d57
Build full patch if cannot build incremental one
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
411
diff
changeset
|
671 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
|
672 builder.deleteDirectory(new File(checkoutRules.map("")), true); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
673 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
674 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
675 private void lockWorkDir(@NotNull File workDir) { |
876
b2816067699a
Report lock acquisition progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
873
diff
changeset
|
676 lockWorkDir(workDir, null); |
b2816067699a
Report lock acquisition progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
873
diff
changeset
|
677 } |
b2816067699a
Report lock acquisition progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
873
diff
changeset
|
678 |
b2816067699a
Report lock acquisition progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
873
diff
changeset
|
679 private void lockWorkDir(@NotNull File workDir, @Nullable ProgressParser.ProgressConsumer progressConsumer) { |
b2816067699a
Report lock acquisition progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
873
diff
changeset
|
680 if (progressConsumer != null) |
b2816067699a
Report lock acquisition progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
873
diff
changeset
|
681 progressConsumer.consume(-1f, "Acquire repository lock"); |
356
53b430731041
TW-19984 ensure map file cleaned as well
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
355
diff
changeset
|
682 myMirrorManager.lockDir(workDir); |
876
b2816067699a
Report lock acquisition progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
873
diff
changeset
|
683 if (progressConsumer != null) |
b2816067699a
Report lock acquisition progress
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
873
diff
changeset
|
684 progressConsumer.consume(-1f, "Repository lock acquired"); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
685 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
686 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
687 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
|
688 myMirrorManager.unlockDir(workDir); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
689 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
690 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
691 @Override |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
692 public boolean allowSourceCaching() { |
633
6ed9e0528564
Add an option to allow patch caching when server-side checkout is used
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
627
diff
changeset
|
693 return myConfig.allowSourceCaching(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
694 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
695 |
775 | 696 @NotNull |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
697 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
|
698 File tmpDir = null; |
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
699 try { |
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
700 tmpDir = createLabelingTmpDir(); |
775 | 701 HgVcsRoot hgRoot = getHgRoot(root); |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
702 hgRoot.setCustomWorkingDir(tmpDir); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
703 syncRepository(hgRoot); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
704 HgRepo repo = createRepo(hgRoot); |
605
0e21f908b10d
TW-28776 create a tag in branch to which the labeled revision belongs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
590
diff
changeset
|
705 String branchName = getCommitBranch(repo, version); |
0e21f908b10d
TW-28776 create a tag in branch to which the labeled revision belongs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
590
diff
changeset
|
706 repo.update().branch(branchName).call(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
707 |
245
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
708 String fixedTagname = fixTagName(label); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
709 repo.tag().revision(version) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
710 .tagName(fixedTagname) |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
711 .byUser(hgRoot.getUserForTag()) |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
712 .call(); |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
713 |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
714 repo.push().toRepository(hgRoot.getRepository()).call(); |
245
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
715 return fixedTagname; |
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
716 } finally { |
478
0a33f3dbd261
Ensure temp dirs are deleted
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
474
diff
changeset
|
717 deleteDir(tmpDir, Loggers.VCS); |
245
4664e5105633
do labeling in tmp dir
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
244
diff
changeset
|
718 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
719 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
720 |
605
0e21f908b10d
TW-28776 create a tag in branch to which the labeled revision belongs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
590
diff
changeset
|
721 @NotNull |
0e21f908b10d
TW-28776 create a tag in branch to which the labeled revision belongs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
590
diff
changeset
|
722 private String getCommitBranch(@NotNull HgRepo repo, @NotNull String cset) throws VcsException { |
0e21f908b10d
TW-28776 create a tag in branch to which the labeled revision belongs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
590
diff
changeset
|
723 return repo.id().inLocalRepository().revision(cset).showBranch().call(); |
0e21f908b10d
TW-28776 create a tag in branch to which the labeled revision belongs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
590
diff
changeset
|
724 } |
0e21f908b10d
TW-28776 create a tag in branch to which the labeled revision belongs
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
590
diff
changeset
|
725 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
726 private String fixTagName(final String label) { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
727 // according to Mercurial documentation http://hgbook.red-bean.com/hgbookch8.html#x12-1570008 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
728 // tag name must not contain: |
246 | 729 // Colon (ASCII 58, ':') |
730 // Carriage return (ASCII 13, '\r') | |
731 // Newline (ASCII 10, '\n') | |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
732 // all these characters will be replaced with _ (underscore) |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
733 return label.replace(':', '_').replace('\r', '_').replace('\n', '_'); |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
734 } |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
735 |
635
f0dce200f02a
Implement tryMerge
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
634
diff
changeset
|
736 public File getWorkingDir(HgVcsRoot root) { |
426
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
737 File customDir = root.getCustomWorkingDir(); |
c91c4f1ebd53
Settings -> HgVcsRoot
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
425
diff
changeset
|
738 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
|
739 } |
c6de9e076765
add method to get working dir for settings
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
182
diff
changeset
|
740 |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
741 |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
742 public boolean isAgentSideCheckoutAvailable() { |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
743 return true; |
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
744 } |
241
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
745 |
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
746 |
244
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
747 private File createLabelingTmpDir() throws VcsException { |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
748 try { |
467
bc2e00800054
TW-22279 use shorter temprorary dir name for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
461
diff
changeset
|
749 return HgFileUtil.createTempDir(); |
244
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
750 } catch (IOException e) { |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
751 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
|
752 } |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
753 } |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
754 |
5496c02d8dc1
Method to create tmp dir for labeling
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
243
diff
changeset
|
755 |
241
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
756 /* for tests only */ |
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
757 public MirrorManager getMirrorManager() { |
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
758 return myMirrorManager; |
ffd7234f9d1f
test to reproduce TW-16278
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
226
diff
changeset
|
759 } |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
760 |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
761 |
317
c247d4637a96
Make hg dag-based
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
315
diff
changeset
|
762 @Override |
c247d4637a96
Make hg dag-based
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
315
diff
changeset
|
763 public boolean isDAGBasedVcs() { |
324
86a668c1c82b
Make hg dag-based again
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
323
diff
changeset
|
764 return true; |
317
c247d4637a96
Make hg dag-based
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
315
diff
changeset
|
765 } |
339 | 766 |
338
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
767 private static class IgnoreDotHgFilter implements FileFilter { |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
768 public boolean accept(final File file) { |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
769 return !(file.isDirectory() && ".hg".equals(file.getName())); |
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 } |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
772 |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
773 private static class AcceptAllFilter implements FileFilter { |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
774 public boolean accept(File pathname) { |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
775 return true; |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
776 } |
d31d7c81b637
Support subrepositories while building clean patch.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
334
diff
changeset
|
777 } |
342
040cd38f6f9e
Use factory to create repository state
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
339
diff
changeset
|
778 |
769 | 779 @NotNull |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
780 public ServerHgRepo createRepo(@NotNull HgVcsRoot root) throws VcsException { |
769 | 781 return myRepoFactory.createRepo(root, getWorkingDir(root)); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
782 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
783 |
769 | 784 @NotNull |
548
6c8911ed66f2
Report subrepo changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
541
diff
changeset
|
785 public ServerHgRepo createRepo(@NotNull OperationContext ctx, @NotNull HgVcsRoot root) throws VcsException { |
769 | 786 return ctx.createRepo(root, getWorkingDir(root)); |
548
6c8911ed66f2
Report subrepo changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
541
diff
changeset
|
787 } |
6c8911ed66f2
Report subrepo changes
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
541
diff
changeset
|
788 |
769 | 789 @NotNull |
790 public ServerHgRepo createRepo(@NotNull HgVcsRoot root, @NotNull File customDir) throws VcsException { | |
791 return myRepoFactory.createRepo(root, customDir); | |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
792 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
397
diff
changeset
|
793 |
342
040cd38f6f9e
Use factory to create repository state
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
339
diff
changeset
|
794 @NotNull |
411
490024d8e5fd
Test patch from newer revision to earlier
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
408
diff
changeset
|
795 @Override |
439 | 796 public Map<String, String> getCheckoutProperties(@NotNull VcsRoot root) { |
416
9a467ce09cbd
Fix repository properties calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
415
diff
changeset
|
797 Map<String, String> rootProperties = root.getProperties(); |
9a467ce09cbd
Fix repository properties calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
415
diff
changeset
|
798 Map<String, String> repositoryProperties = new HashMap<String, String>(); |
9a467ce09cbd
Fix repository properties calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
415
diff
changeset
|
799 repositoryProperties.put(Constants.REPOSITORY_PROP, rootProperties.get(Constants.REPOSITORY_PROP)); |
675
1d417eb6ea28
Add an option for excluding subrepos from patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
667
diff
changeset
|
800 repositoryProperties.put(Constants.INCLUDE_SUBREPOS_IN_PATCH, rootProperties.get(Constants.INCLUDE_SUBREPOS_IN_PATCH)); |
870
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
801 String customHgConfig = rootProperties.get(Constants.CUSTOM_HG_CONFIG_PROP); |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
802 if (!isEmpty(customHgConfig)) |
6df89e185a3c
TW-19916 ability to specify custom mercurial config for VCS root
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
865
diff
changeset
|
803 repositoryProperties.put(Constants.CUSTOM_HG_CONFIG_PROP, customHgConfig); |
416
9a467ce09cbd
Fix repository properties calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
415
diff
changeset
|
804 return repositoryProperties; |
411
490024d8e5fd
Test patch from newer revision to earlier
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
408
diff
changeset
|
805 } |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
806 |
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
807 |
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
808 @Override |
435
4b6cca841ea5
New list files API
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
430
diff
changeset
|
809 public ListFilesPolicy getListFilesPolicy() { |
667
bcee3a8b2c7b
Add TTL for list file policy
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
652
diff
changeset
|
810 return new ListFilesSupport(this, myConfig, myHgVcsRootFactory); |
425
e33c3e4918f5
Add list files support
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
417
diff
changeset
|
811 } |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
812 |
678
fd0c1e91bd46
mercurial url support + some tests
Pavel Sher <pavel.sher@gmail.com>
parents:
675
diff
changeset
|
813 @NotNull |
fd0c1e91bd46
mercurial url support + some tests
Pavel Sher <pavel.sher@gmail.com>
parents:
675
diff
changeset
|
814 public UrlSupport getUrlSupport() { |
fd0c1e91bd46
mercurial url support + some tests
Pavel Sher <pavel.sher@gmail.com>
parents:
675
diff
changeset
|
815 return new MercurialUrlSupport(this); |
fd0c1e91bd46
mercurial url support + some tests
Pavel Sher <pavel.sher@gmail.com>
parents:
675
diff
changeset
|
816 } |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
817 |
522
686b04d58c6e
Use a new way to provide vcs extensions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
519
diff
changeset
|
818 @Override |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
819 @Nullable |
522
686b04d58c6e
Use a new way to provide vcs extensions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
519
diff
changeset
|
820 protected <T extends VcsExtension> T getVcsCustomExtension(@NotNull final Class<T> extensionClass) { |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
821 for (MercurialServerExtension e : myExtensions) { |
522
686b04d58c6e
Use a new way to provide vcs extensions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
519
diff
changeset
|
822 if (extensionClass.isInstance(e)) |
686b04d58c6e
Use a new way to provide vcs extensions
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
519
diff
changeset
|
823 return extensionClass.cast(e); |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
824 } |
652
99bee7b19368
call super in getVcsCustomExtension
eugene.petrenko@gmail.com
parents:
641
diff
changeset
|
825 return super.getVcsCustomExtension(extensionClass); |
489
493f78cb64dd
Move MercurialBranchSupport to separate module
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
485
diff
changeset
|
826 } |
782
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
827 |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
828 |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
829 private static class ExcludeHgArchival implements FileFilter { |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
830 public boolean accept(File f) { |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
831 return !f.getName().equals(".hg_archival.txt"); |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
832 } |
44b15b5a87e8
VCS-41 use archive to build an incremental patch
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
775
diff
changeset
|
833 } |
174
2faaa84c0896
Fix TW-15195: Add option in UI to do --uncompressed clone.
Dmitry Neverov <dmitry.neverov@jetbrains.com>
diff
changeset
|
834 } |