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