Mercurial > hg > mercurial
annotate mercurial-common/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/command/LogCommand.java @ 280:8c1fd2e565ae
Implement mercurial detection on the agents
When agent starts, hg-plugin detects installed hg (searches it in the
$PATH). If plugin is able to run hg and hg has an approrpiate version
(1.5.2+), then plugin reports path to hg in the
'teamcity.hg.agent.path' parameter. This parameter can be used in the
"HG command path" field in a VCS root settings, configurations with
such root will be run only on agents which report path to hg. Also
user can set this parameter manually in the buildAgent.properties.
A server side of plugin first checks value of internal property
'teamcity.hg.server.path' and if property is set, its value is used.
Second, plugin tries to use path from the settings of VCS root: if
path is equal to '%teamcity.hg.agent.path%' - use 'hg' as path,
otherwise use a value from the root. With such order old setups, where
path in the VCS root was used on both server and agent, will continue
to work. New VCS roots with references in the path will also work if
hg is in the $PATH on the server or internal property is set.
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Fri, 19 Aug 2011 15:21:38 +0400 |
parents | 8c10f5cec37d |
children | e9e7d9fcf57d |
rev | line source |
---|---|
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
1 /* |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
2 * Copyright 2000-2011 JetBrains s.r.o. |
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 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
18 import com.intellij.execution.configurations.GeneralCommandLine; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
19 import com.intellij.openapi.diagnostic.Logger; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
20 import jetbrains.buildServer.ExecResult; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
21 import jetbrains.buildServer.vcs.VcsException; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
22 import org.jetbrains.annotations.NotNull; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
23 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
24 import java.io.File; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
25 import java.text.ParseException; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
26 import java.text.SimpleDateFormat; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
27 import java.util.ArrayList; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
28 import java.util.Date; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
29 import java.util.List; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
30 import java.util.Locale; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
31 |
280
8c1fd2e565ae
Implement mercurial detection on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
276
diff
changeset
|
32 public class LogCommand extends VcsRootCommand { |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
33 |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
34 private final static Logger LOG = Logger.getInstance(LogCommand.class.getName()); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
35 private final static String ZERO_PARENT_ID = "0000000000000000000000000000000000000000"; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
36 |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
37 private String myFromId; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
38 private String myToId; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
39 private ArrayList<String> myPaths; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
40 private Integer myLimit = null; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
41 private static final String CHANGESET_PREFIX = "changeset:"; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
42 private static final String USER_PREFIX = "user:"; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
43 private static final String PARENT_PREFIX = "parent:"; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
44 private static final String DATE_PREFIX = "date:"; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
45 private static final String DATE_FORMAT = "EEE MMM d HH:mm:ss yyyy Z"; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
46 private static final String DESCRIPTION_PREFIX = "description:"; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
47 private static final String FILES_PREFIX = "files:"; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
48 private String myBranchName; |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
49 private boolean myCalculateParents = true; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
50 private String myRevsets; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
51 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
52 public LogCommand(@NotNull Settings settings, @NotNull File workingDir) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
53 super(settings, workingDir); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
54 myBranchName = settings.getBranchName(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
55 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
56 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
57 public void setFromRevId(String id) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
58 myFromId = id; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
59 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
60 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
61 public void setToRevId(String id) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
62 myToId = id; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
63 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
64 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
65 public void setPaths(final List<String> relPaths) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
66 myPaths = new ArrayList<String>(relPaths); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
67 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
68 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
69 public void setLimit(final int limit) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
70 myLimit = limit; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
71 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
72 |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
73 public void showCommitsFromAllBranches() { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
74 myBranchName = null; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
75 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
76 |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
77 public void setCalculateParents(boolean doCalculate) { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
78 myCalculateParents = doCalculate; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
79 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
80 |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
81 public void setRevsets(String revsets) { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
82 myRevsets = revsets; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
83 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
84 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
85 public List<ChangeSet> execute() throws VcsException { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
86 GeneralCommandLine cli = createCommandLine(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
87 cli.addParameter("log"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
88 cli.addParameter("-v"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
89 cli.addParameter("--style"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
90 cli.addParameter("default"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
91 if (myBranchName != null) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
92 cli.addParameter("-b"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
93 cli.addParameter(getSettings().getBranchName()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
94 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
95 cli.addParameter("-r"); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
96 if (myRevsets != null) { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
97 cli.addParameter(myRevsets); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
98 } else { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
99 String from = myFromId != null ? myFromId : "0"; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
100 String to = myToId != null ? myToId : "tip"; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
101 cli.addParameter(from + ":" + to); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
102 } |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
103 if (myLimit != null) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
104 cli.addParameter("--limit"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
105 cli.addParameter(myLimit.toString()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
106 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
107 if (myPaths != null) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
108 for (String path: myPaths) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
109 cli.addParameter(path); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
110 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
111 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
112 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
113 ExecResult res = runCommand(cli); |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
114 List<ChangeSet> csets = parseChangeSets(res.getStdout()); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
115 if (myCalculateParents) |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
116 assignTrivialParents(csets); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
117 return csets; |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
118 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
119 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
120 public static List<ChangeSet> parseChangeSets(final String stdout) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
121 List<ChangeSet> result = new ArrayList<ChangeSet>(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
122 String[] lines = stdout.split("\n"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
123 ChangeSet current = null; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
124 int lineNum = 0; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
125 boolean insideDescription = false; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
126 StringBuilder descr = new StringBuilder(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
127 while (lineNum < lines.length) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
128 String line = lines[lineNum]; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
129 lineNum++; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
130 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
131 if (line.startsWith(CHANGESET_PREFIX)) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
132 insideDescription = false; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
133 if (current != null) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
134 current.setDescription(descr.toString().trim()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
135 descr.setLength(0); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
136 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
137 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
138 String revAndId = line.substring(CHANGESET_PREFIX.length()).trim(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
139 try { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
140 current = new ChangeSet(revAndId); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
141 result.add(current); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
142 } catch (IllegalArgumentException e) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
143 LOG.warn("Unable to extract changeset id from the line: " + line); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
144 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
145 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
146 continue; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
147 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
148 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
149 if (current == null) continue; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
150 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
151 if (line.startsWith(USER_PREFIX)) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
152 current.setUser(line.substring(USER_PREFIX.length()).trim()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
153 continue; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
154 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
155 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
156 if (line.startsWith(FILES_PREFIX)) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
157 current.setContainsFiles(true); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
158 continue; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
159 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
160 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
161 if (line.startsWith(PARENT_PREFIX)) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
162 String parentRev = line.substring(PARENT_PREFIX.length()).trim(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
163 current.addParent(new ChangeSetRevision(parentRev)); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
164 continue; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
165 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
166 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
167 if (line.startsWith(DATE_PREFIX)) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
168 String date = line.substring(DATE_PREFIX.length()).trim(); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
169 try { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
170 Date parsedDate = new SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH).parse(date); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
171 current.setTimestamp(parsedDate); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
172 } catch (ParseException e) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
173 LOG.warn("Unable to parse date: " + date); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
174 current = null; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
175 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
176 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
177 continue; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
178 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
179 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
180 if (line.startsWith(DESCRIPTION_PREFIX)) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
181 insideDescription = true; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
182 continue; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
183 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
184 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
185 if (insideDescription) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
186 descr.append(line).append("\n"); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
187 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
188 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
189 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
190 if (insideDescription) { |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
191 current.setDescription(descr.toString().trim()); |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
192 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
193 |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
194 return result; |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
195 } |
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
196 |
276
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
197 |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
198 private void assignTrivialParents(List<ChangeSet> csets) throws VcsException { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
199 for (ChangeSet cset : csets) { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
200 if (cset.getParents().isEmpty()) { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
201 int parentRevNumber = cset.getRevNumber() - 1; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
202 String parentId = getIdOf(parentRevNumber); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
203 cset.addParent(new ChangeSetRevision(parentRevNumber, parentId)); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
204 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
205 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
206 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
207 |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
208 private String getIdOf(int revNumber) throws VcsException { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
209 if (revNumber < 0) |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
210 return ZERO_PARENT_ID; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
211 IdentifyCommand identify = new IdentifyCommand(getSettings(), getWorkDirectory()); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
212 identify.setInLocalRepository(true); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
213 identify.setRevisionNumber(revNumber); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
214 String output = identify.execute().trim(); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
215 if (output.contains(" ")) { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
216 return output.substring(0, output.indexOf(" ")); |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
217 } else { |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
218 return output; |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
219 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
220 } |
8c10f5cec37d
TW-17797 Fix merge-base calculation
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
271
diff
changeset
|
221 |
266
643fa1236f4e
Fix file encoding
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
250
diff
changeset
|
222 } |