Mercurial > hg > mercurial
annotate mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/CommitsAndMountPointsCommand.java @ 999:1b1cc811e1b6 Jaipur-2018.1.x
Jaipur-2018.1.x branch created
author | pavel.sher |
---|---|
date | Thu, 21 Jun 2018 17:37:32 +0200 |
parents | 7bf4d943d5bb |
children | b29a61718d05 |
rev | line source |
---|---|
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
1 /* |
976 | 2 * Copyright 2000-2018 JetBrains s.r.o. |
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
3 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
5 * you may not use this file except in compliance with the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
6 * You may obtain a copy of the License at |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
7 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
9 * |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
13 * See the License for the specific language governing permissions and |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
14 * limitations under the License. |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
15 */ |
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
729
diff
changeset
|
16 |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
17 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command; |
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
18 |
765 | 19 import jetbrains.buildServer.buildTriggers.vcs.mercurial.*; |
706
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
20 import jetbrains.buildServer.util.FileUtil; |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
21 import jetbrains.buildServer.vcs.VcsException; |
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
22 import org.jetbrains.annotations.NotNull; |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
23 import org.jetbrains.annotations.Nullable; |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
24 |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
25 import java.io.File; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
26 import java.io.IOException; |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
718
diff
changeset
|
27 import java.util.Date; |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
28 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
29 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.command.CommitsAndMountPointsParser.parseCommits; |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
30 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.command.CommitsAndMountPointsParser.parseFileLog; |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
31 |
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
32 /** |
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
33 * Created 03.01.14 14:53 |
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
34 * |
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
35 * @author Eugene Petrenko (eugene.petrenko@jetbrains.com) |
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
36 */ |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
37 public class CommitsAndMountPointsCommand extends VcsRootCommand { |
742
091667cc54d5
assert HG version is supported for the command
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
38 private static final HgVersion REQUIRED_VERSION = new HgVersion(2, 0, 0); |
091667cc54d5
assert HG version is supported for the command
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
39 private final HgRepo myRepo; |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
40 |
742
091667cc54d5
assert HG version is supported for the command
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
41 public CommitsAndMountPointsCommand(@NotNull final HgRepo hgRepo, |
091667cc54d5
assert HG version is supported for the command
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
42 @NotNull final CommandSettings commandSettings, |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
43 @NotNull final String hgPath, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
44 @NotNull final File workingDir, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
45 @NotNull final AuthSettings authSettings) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
46 super(commandSettings.addHgEnv("HGENCODING", "UTF-8"), hgPath, workingDir, authSettings); |
742
091667cc54d5
assert HG version is supported for the command
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
47 myRepo = hgRepo; |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
48 } |
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
49 |
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
50 @NotNull |
706
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
51 private File createTmpDir() throws VcsException { |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
52 try { |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
53 return HgFileUtil.createTempDir(); |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
54 } catch (IOException e) { |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
55 throw new VcsException("Unable to create temporary directory", e); |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
56 } |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
57 } |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
58 |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
59 public void call(@NotNull final Callback consumer) throws VcsException { |
742
091667cc54d5
assert HG version is supported for the command
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
60 final HgVersion hgVersion = myRepo.version().call(); |
091667cc54d5
assert HG version is supported for the command
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
61 if (!hgVersion.isEqualsOrGreaterThan(REQUIRED_VERSION)) { |
091667cc54d5
assert HG version is supported for the command
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
62 throw new VcsException("Current mercurial version is " + hgVersion + ", please use " + REQUIRED_VERSION + " or newer"); |
091667cc54d5
assert HG version is supported for the command
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
63 } |
091667cc54d5
assert HG version is supported for the command
eugene.petrenko@jetbrains.com
parents:
732
diff
changeset
|
64 |
706
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
65 final File root = createTmpDir(); |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
66 |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
67 try { |
827
194c8f8d6e4c
add helper to enable bundled plugins for Mercurial
eugene.petrenko@jetbrains.com
parents:
765
diff
changeset
|
68 callImpl(root, consumer); |
706
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
69 } finally { |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
70 FileUtil.delete(root); |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
71 } |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
72 } |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
73 |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
74 public interface Callback { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
75 void processHGSubFile(@NotNull final String fileId, @NotNull final String file); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
76 void processHGSubStateFile(@NotNull final String fileId, @NotNull final String file); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
77 void onCommit( |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
78 @NotNull String commitNum, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
79 @NotNull String commitId, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
80 @NotNull String[] parents, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
81 @NotNull String branch, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
82 @NotNull String[] tags, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
83 @NotNull String author, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
84 @NotNull String message, |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
718
diff
changeset
|
85 @NotNull final Date timestamp, |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
86 @Nullable String hgsubNodeId, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
87 @Nullable String hgsubstateNodeId); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
88 } |
706
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
89 |
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
90 private void callImpl(@NotNull final File root, |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
91 @NotNull final Callback consumer) throws VcsException { |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
92 final MercurialCommandLine cli = createCommandLine(); |
706
c27e501ed0c3
use own command for hg subrepos
eugene.petrenko@jetbrains.com
parents:
703
diff
changeset
|
93 cli.addParameter("--debug"); |
827
194c8f8d6e4c
add helper to enable bundled plugins for Mercurial
eugene.petrenko@jetbrains.com
parents:
765
diff
changeset
|
94 |
194c8f8d6e4c
add helper to enable bundled plugins for Mercurial
eugene.petrenko@jetbrains.com
parents:
765
diff
changeset
|
95 setupExtensionsFromResource(cli, root, "load-substates-command.py"); |
194c8f8d6e4c
add helper to enable bundled plugins for Mercurial
eugene.petrenko@jetbrains.com
parents:
765
diff
changeset
|
96 |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
97 cli.addParameter("load-substates"); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
98 cli.addParameter(new File(root, "result").getPath()); |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
99 |
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
100 final CommandResult res = runCommand(cli); |
917
e467e67d5892
TW-39663 don't escape command output dedicated for parsing
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
827
diff
changeset
|
101 final String rawOutput = res.getRawStdout(); |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
102 |
917
e467e67d5892
TW-39663 don't escape command output dedicated for parsing
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
827
diff
changeset
|
103 if (!rawOutput.contains("##Completed##")) throw new VcsException("Command failed: " + res.getSecureStdout()); |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
104 |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
105 try { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
106 parseFileLog(new File(root, "result.hgsub"), new CommitsAndMountPointsParser.ContentsConsumer() { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
107 public void onCommit(@NotNull final String fileNodeId, @NotNull final String content) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
108 consumer.processHGSubFile(fileNodeId, content); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
109 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
110 }); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
111 parseFileLog(new File(root, "result.hgsubstate"), new CommitsAndMountPointsParser.ContentsConsumer() { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
112 public void onCommit(@NotNull final String fileNodeId, @NotNull final String content) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
113 consumer.processHGSubStateFile(fileNodeId, content); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
114 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
115 }); |
709 | 116 |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
117 parseCommits(new File(root, "result.commits"), new CommitsAndMountPointsParser.CommitsConsumer() { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
118 public void onCommit(@NotNull String commitNum, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
119 @NotNull String commitId, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
120 @NotNull String[] parents, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
121 @NotNull String branch, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
122 @NotNull String[] tags, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
123 @NotNull String author, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
124 @NotNull String message, |
729
785ab04c78da
implement new graph construction code
eugene.petrenko@jetbrains.com
parents:
718
diff
changeset
|
125 @NotNull Date timestamp, |
718
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
126 @Nullable String hgsubNodeId, |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
127 @Nullable String hgsubstateNodeId) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
128 consumer.onCommit(commitNum, commitId, parents, branch, tags, author, message, timestamp, hgsubNodeId, hgsubstateNodeId); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
129 } |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
130 }); |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
131 } catch (IOException e) { |
0f3c5ac38fc3
commits and mount points command completed
eugene.petrenko@jetbrains.com
parents:
709
diff
changeset
|
132 throw new VcsException("Failed to parse response files for 'load-substates' command. " + e.getMessage(), e); |
709 | 133 } |
134 } | |
135 | |
136 | |
137 | |
703
3aff8caf7d60
add API to parse hg log --patch to recover .hgsub .hgsubstate for entire history
eugene.petrenko@jetbrains.com
parents:
diff
changeset
|
138 } |