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 }