Mercurial > hg > mercurial
annotate mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java @ 732:31a1aca3305c
Update copyright
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Tue, 14 Jan 2014 12:45:10 +0100 |
parents | fbff229ee2dc |
children | b7deb8f24278 97ae319eed9b |
rev | line source |
---|---|
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
1 /* |
732
31a1aca3305c
Update copyright
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
699
diff
changeset
|
2 * Copyright 2000-2014 JetBrains s.r.o. |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
3 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
5 * you may not use this file except in compliance with the License. |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
6 * You may obtain a copy of the License at |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
7 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
9 * |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
10 * Unless required by applicable law or agreed to in writing, software |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
13 * See the License for the specific language governing permissions and |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
14 * limitations under the License. |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
15 */ |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
16 package jetbrains.buildServer.buildTriggers.vcs.mercurial.command; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
17 |
451
5d4a7174c316
Do not insert output into exception message, it can be long
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
449
diff
changeset
|
18 import com.intellij.openapi.diagnostic.Logger; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
19 import jetbrains.buildServer.vcs.VcsException; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
20 import org.jetbrains.annotations.NotNull; |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
21 import org.jetbrains.annotations.Nullable; |
449
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
22 import org.xml.sax.SAXException; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
23 |
449
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
24 import javax.xml.parsers.ParserConfigurationException; |
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
25 import javax.xml.parsers.SAXParser; |
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
26 import javax.xml.parsers.SAXParserFactory; |
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
27 import java.io.ByteArrayInputStream; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
28 import java.io.File; |
299
e9e7d9fcf57d
Use customized xml output from the 'hg log' command instead of running 'hg status' for every commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
280
diff
changeset
|
29 import java.io.IOException; |
381
44a16c27bed6
Handle changes in ExecResult api
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
380
diff
changeset
|
30 import java.nio.charset.Charset; |
699 | 31 import java.util.*; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
32 |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
33 public class LogCommand extends VcsRootCommand { |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
34 |
451
5d4a7174c316
Do not insert output into exception message, it can be long
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
449
diff
changeset
|
35 private final static Logger LOG = Logger.getInstance(LogCommand.class.getName()); |
654
3daa8e36f8f1
include branch name into log commands
eugene.petrenko@gmail.com
parents:
480
diff
changeset
|
36 public final static String ZERO_PARENT_ID = "0000000000000000000000000000000000000000"; |
662
c3c0ebc63d77
CommitsInfoBuilder command now returns all commits without respect to state parameter (API update will follow)
eugene.petrenko@gmail.com
parents:
654
diff
changeset
|
37 public final static String ZERO_PARENT_SHORT_ID = "000000000000"; |
449
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
38 private final static SAXParserFactory ourSAXFactory = SAXParserFactory.newInstance(); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
39 |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
40 private String myFromId; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
41 private String myToId; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
42 private Integer myLimit = null; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
43 private String myBranchName; |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
44 private boolean myCalculateParents = true; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
45 private String myRevsets; |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
46 private File myTemplate; |
699 | 47 private List<String> myFiles = new ArrayList<String>(); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
48 |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
49 public LogCommand(@NotNull CommandSettings commandSettings, |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
50 @NotNull String hgPath, |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
51 @NotNull File workingDir, |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
52 @NotNull AuthSettings authSettings) { |
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
53 super(commandSettings, hgPath, workingDir, authSettings); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
54 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
55 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
56 public LogCommand withTemplate(@NotNull File template) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
57 myTemplate = template; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
58 return this; |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
59 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
60 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
61 public LogCommand inBranch(@NotNull String branchName) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
62 myBranchName = branchName; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
63 return this; |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
64 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
65 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
66 public LogCommand fromRevision(@Nullable String fromRevision) { |
698 | 67 myFromId = fromRevision == null ? null : new ChangeSet(fromRevision).getId(); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
68 return this; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
69 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
70 |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
71 public LogCommand toRevision(@Nullable String toRevision) { |
698 | 72 myToId = toRevision == null ? null : new ChangeSet(toRevision).getId(); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
73 return this; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
74 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
75 |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
76 public LogCommand toNamedRevision(@Nullable String namedRevision) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
77 myToId = namedRevision; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
78 return this; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
79 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
80 |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
81 public LogCommand setLimit(final int limit) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
82 myLimit = limit; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
83 return this; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
84 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
85 |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
86 public LogCommand showCommitsFromAllBranches() { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
87 myBranchName = null; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
88 return this; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
89 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
90 |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
91 public LogCommand dontCalculateParents() { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
92 myCalculateParents = false; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
93 return this; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
94 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
95 |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
96 public LogCommand withRevsets(String revsets) { |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
97 myRevsets = revsets; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
98 return this; |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
99 } |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
100 |
699 | 101 public LogCommand forFile(@NotNull final String file) { |
102 myFiles.add(file); | |
103 return this; | |
104 } | |
105 | |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
106 public List<ChangeSet> call() throws VcsException { |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
107 MercurialCommandLine cli = createCommandLine(); |
381
44a16c27bed6
Handle changes in ExecResult api
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
380
diff
changeset
|
108 cli.setCharset(Charset.forName("UTF-8")); |
380 | 109 cli.addParameters("--encoding", "UTF-8"); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
110 cli.addParameter("log"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
111 cli.addParameter("-v"); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
112 if (myTemplate != null) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
113 cli.addParameter("--style=" + myTemplate.getAbsolutePath()); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
114 if (myBranchName != null) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
115 cli.addParameter("-b"); |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
116 cli.addParameter(myBranchName); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
117 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
118 cli.addParameter("-r"); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
119 if (myRevsets != null) { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
120 cli.addParameter(myRevsets); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
121 } else { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
122 String from = myFromId != null ? myFromId : "0"; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
123 String to = myToId != null ? myToId : "tip"; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
124 cli.addParameter(from + ":" + to); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
125 } |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
126 if (myLimit != null) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
127 cli.addParameter("--limit"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
128 cli.addParameter(myLimit.toString()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
129 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
130 |
699 | 131 cli.addParameters(myFiles); |
132 | |
347 | 133 CommandResult res = runCommand(cli); |
381
44a16c27bed6
Handle changes in ExecResult api
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
380
diff
changeset
|
134 String output = res.getStdout(); |
299
e9e7d9fcf57d
Use customized xml output from the 'hg log' command instead of running 'hg status' for every commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
280
diff
changeset
|
135 try { |
380 | 136 List<ChangeSet> changes = parseChangeSetsXml(output); |
299
e9e7d9fcf57d
Use customized xml output from the 'hg log' command instead of running 'hg status' for every commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
280
diff
changeset
|
137 if (myCalculateParents) |
e9e7d9fcf57d
Use customized xml output from the 'hg log' command instead of running 'hg status' for every commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
280
diff
changeset
|
138 assignTrivialParents(changes); |
e9e7d9fcf57d
Use customized xml output from the 'hg log' command instead of running 'hg status' for every commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
280
diff
changeset
|
139 return changes; |
e9e7d9fcf57d
Use customized xml output from the 'hg log' command instead of running 'hg status' for every commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
280
diff
changeset
|
140 } catch (Exception e) { |
451
5d4a7174c316
Do not insert output into exception message, it can be long
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
449
diff
changeset
|
141 LOG.error("Error while parsing log output:\n" + output, e); |
5d4a7174c316
Do not insert output into exception message, it can be long
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
449
diff
changeset
|
142 throw new VcsException("Error while parsing log output, see teamcity-vcs.log for details", e); |
380 | 143 } |
144 } | |
145 | |
449
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
146 private List<ChangeSet> parseChangeSetsXml(@NotNull final String xml) throws SAXException, ParserConfigurationException, IOException { |
311
7f45db81af21
Hg output is empty when no changes found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
304
diff
changeset
|
147 if ("".equals(xml)) |
7f45db81af21
Hg output is empty when no changes found
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
304
diff
changeset
|
148 return Collections.emptyList(); |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
149 |
345 | 150 String validXml = makeValidXml(xml); |
449
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
151 MercurialXmlLogParser parser = new MercurialXmlLogParser(); |
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
152 SAXParser saxParser = ourSAXFactory.newSAXParser(); |
458
1725588ec4f6
Fix compilation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
451
diff
changeset
|
153 saxParser.parse(new ByteArrayInputStream(validXml.getBytes("UTF-8")), parser); |
449
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
154 return parser.getChangeSets(); |
345 | 155 } |
156 | |
157 private String makeValidXml(@NotNull final String xml) { | |
158 String trimmed = xml.trim(); | |
159 if (trimmed.endsWith("</log>")) | |
160 return xml; | |
161 else | |
162 return xml + "</log>"; | |
163 } | |
164 | |
299
e9e7d9fcf57d
Use customized xml output from the 'hg log' command instead of running 'hg status' for every commit
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
280
diff
changeset
|
165 private void assignTrivialParents(final @NotNull List<ChangeSet> csets) throws VcsException { |
418
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
166 Map<Integer, ChangeSet> revNumberMap = makeMapByRevNumber(csets); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
167 for (ChangeSet cset : csets) { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
168 if (cset.getParents().isEmpty()) { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
169 int parentRevNumber = cset.getRevNumber() - 1; |
418
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
170 ChangeSet parent = revNumberMap.get(parentRevNumber); |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
171 if (parent != null) { |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
172 cset.addParent(parent); |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
173 } else { |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
174 String parentId = getIdOf(parentRevNumber); |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
175 cset.addParent(new ChangeSetRevision(parentRevNumber, parentId)); |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
176 } |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
177 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
178 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
179 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
180 |
418
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
181 private Map<Integer, ChangeSet> makeMapByRevNumber(@NotNull List<ChangeSet> csets) throws VcsException { |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
182 Map<Integer, ChangeSet> csetMap = new HashMap<Integer, ChangeSet>(); |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
183 for (ChangeSet cset : csets) { |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
184 csetMap.put(cset.getRevNumber(), cset); |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
185 } |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
186 return csetMap; |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
187 } |
e56678c38fd5
Optimize parent calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
399
diff
changeset
|
188 |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
189 private String getIdOf(int revNumber) throws VcsException { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
190 if (revNumber < 0) |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
191 return ZERO_PARENT_ID; |
480
efba721f9a1d
TW-23382 agent logs with info, server logs with debug
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
460
diff
changeset
|
192 return new IdentifyCommand(myCommandSettings, getHgPath(), getWorkDirectory(), myAuthSettings) |
399
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
193 .revisionNumber(revNumber) |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
194 .inLocalRepository() |
45f25ca68312
Support local mirrors for subrepos
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
381
diff
changeset
|
195 .call(); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
196 } |
449
56aa3f718c24
Use SAX instead of DOM
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
421
diff
changeset
|
197 } |