summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorRobin Rosenberg <robin.rosenberg@dewire.com>2013-01-19 11:54:21 -0500
committerGerrit Code Review @ Eclipse.org <gerrit@eclipse.org>2013-01-19 11:54:21 -0500
commit9f7b97c90ab065fa3d8fcc6392bda087664bbef9 (patch)
tree748dd9f9f2e1c536f96f90ca35ee91d2c4e4cffd /org.eclipse.jgit
parent6a3c360984328690b1242a5e92d210f13aaf459c (diff)
parent215a74ecebedba54c326f4dc51edb3795e807869 (diff)
downloadjgit-9f7b97c90ab065fa3d8fcc6392bda087664bbef9.tar.gz
jgit-9f7b97c90ab065fa3d8fcc6392bda087664bbef9.zip
Merge changes I7e7fae12,I87ecca00
* changes: Add conflicts message before footer Only replace the ChangeId in the footer, not in the body
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeMessageFormatter.java25
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java95
2 files changed, 88 insertions, 32 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeMessageFormatter.java b/org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeMessageFormatter.java
index 29fa8d65ad..d94e7280c1 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeMessageFormatter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeMessageFormatter.java
@@ -48,6 +48,7 @@ import java.util.List;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.util.ChangeIdUtil;
import org.eclipse.jgit.util.StringUtils;
/**
@@ -133,14 +134,26 @@ public class MergeMessageFormatter {
*/
public String formatWithConflicts(String message,
List<String> conflictingPaths) {
- StringBuilder sb = new StringBuilder(message);
- if (!message.endsWith("\n") && message.length() != 0) //$NON-NLS-1$
- sb.append("\n"); //$NON-NLS-1$
- sb.append("\n"); //$NON-NLS-1$
- sb.append("Conflicts:\n");
+ StringBuilder sb = new StringBuilder();
+ String[] lines = message.split("\n"); //$NON-NLS-1$
+ int firstFooterLine = ChangeIdUtil.indexOfFirstFooterLine(lines);
+ for (int i = 0; i < firstFooterLine; i++)
+ sb.append(lines[i]).append('\n');
+ if (firstFooterLine == lines.length && message.length() != 0)
+ sb.append('\n');
+ addConflictsMessage(conflictingPaths, sb);
+ if (firstFooterLine < lines.length)
+ sb.append('\n');
+ for (int i = firstFooterLine; i < lines.length; i++)
+ sb.append(lines[i]).append('\n');
+ return sb.toString();
+ }
+
+ private static void addConflictsMessage(List<String> conflictingPaths,
+ StringBuilder sb) {
+ sb.append("Conflicts:\n"); //$NON-NLS-1$
for (String conflictingPath : conflictingPaths)
sb.append('\t').append(conflictingPath).append('\n');
- return sb.toString();
}
private static String joinNames(List<String> names, String singular,
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java
index a869b2beac..41bb4cc7eb 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/ChangeIdUtil.java
@@ -161,36 +161,26 @@ public class ChangeIdUtil {
*/
public static String insertId(String message, ObjectId changeId,
boolean replaceExisting) {
- if (message.indexOf(CHANGE_ID) > 0) {
- if (replaceExisting) {
- int i = message.indexOf(CHANGE_ID) + 10;
- while (message.charAt(i) == ' ')
- i++;
- String oldId = message.length() == (i + 40) ?
- message.substring(i) : message.substring(i, i + 41);
- message = message.replace(oldId, "I" + changeId.getName()); //$NON-NLS-1$
+ int indexOfChangeId = indexOfChangeId(message, "\n"); //$NON-NLS-1$
+ if (indexOfChangeId > 0) {
+ if (!replaceExisting)
+ return message;
+ else {
+ StringBuilder ret = new StringBuilder(message.substring(0,
+ indexOfChangeId));
+ ret.append(CHANGE_ID);
+ ret.append(" I"); //$NON-NLS-1$
+ ret.append(ObjectId.toString(changeId));
+ int indexOfNextLineBreak = message.indexOf("\n", //$NON-NLS-1$
+ indexOfChangeId);
+ if (indexOfNextLineBreak > 0)
+ ret.append(message.substring(indexOfNextLineBreak));
+ return ret.toString();
}
- return message;
}
String[] lines = message.split("\n"); //$NON-NLS-1$
- int footerFirstLine = lines.length;
- for (int i = lines.length - 1; i > 1; --i) {
- if (footerPattern.matcher(lines[i]).matches()) {
- footerFirstLine = i;
- continue;
- }
- if (footerFirstLine != lines.length && lines[i].length() == 0) {
- break;
- }
- if (footerFirstLine != lines.length
- && includeInFooterPattern.matcher(lines[i]).matches()) {
- footerFirstLine = i + 1;
- continue;
- }
- footerFirstLine = lines.length;
- break;
- }
+ int footerFirstLine = indexOfFirstFooterLine(lines);
int insertAfter = footerFirstLine;
for (int i = footerFirstLine; i < lines.length; ++i) {
if (issuePattern.matcher(lines[i]).matches()) {
@@ -217,4 +207,57 @@ public class ChangeIdUtil {
}
return ret.toString();
}
+
+ /**
+ * Find the index in the String {@code} message} where the Change-Id entry
+ * begins
+ *
+ * @param message
+ * @param delimiter
+ * the line delimiter, like "\n" or "\r\n", needed to find the
+ * footer
+ * @return the index of the ChangeId footer in the message, or -1 if no
+ * ChangeId footer available
+ */
+ public static int indexOfChangeId(String message, String delimiter) {
+ String[] lines = message.split(delimiter);
+ int footerFirstLine = indexOfFirstFooterLine(lines);
+ if (footerFirstLine == lines.length)
+ return -1;
+
+ int indexOfFooter = 0;
+ for (int i = 0; i < footerFirstLine; ++i)
+ indexOfFooter += lines[i].length() + delimiter.length();
+ return message.indexOf(CHANGE_ID, indexOfFooter);
+ }
+
+ /**
+ * Find the index of the first line of the footer paragraph in an array of
+ * the lines, or lines.length if no footer is available
+ *
+ * @param lines
+ * the commit message split into lines and the line delimiters
+ * stripped off
+ * @return the index of the first line of the footer paragraph, or
+ * lines.length if no footer is available
+ */
+ public static int indexOfFirstFooterLine(String[] lines) {
+ int footerFirstLine = lines.length;
+ for (int i = lines.length - 1; i > 1; --i) {
+ if (footerPattern.matcher(lines[i]).matches()) {
+ footerFirstLine = i;
+ continue;
+ }
+ if (footerFirstLine != lines.length && lines[i].length() == 0)
+ break;
+ if (footerFirstLine != lines.length
+ && includeInFooterPattern.matcher(lines[i]).matches()) {
+ footerFirstLine = i + 1;
+ continue;
+ }
+ footerFirstLine = lines.length;
+ break;
+ }
+ return footerFirstLine;
+ }
}