aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src
diff options
context:
space:
mode:
authorThomas Wolf <twolf@apache.org>2024-01-19 17:37:43 +0100
committerThomas Wolf <twolf@apache.org>2024-02-01 20:26:34 +0100
commitb079968cdd31bb305b99f860c6b1194662619921 (patch)
tree028244f0a0142f28ff648619f154d2b1b17b4f7c /org.eclipse.jgit/src
parent906c2bebed0dc732a2fbd5b397466cf3522714f0 (diff)
downloadjgit-b079968cdd31bb305b99f860c6b1194662619921.tar.gz
jgit-b079968cdd31bb305b99f860c6b1194662619921.zip
RawParseUtils: utility method to get a header value
The new method takes care of removing the leading blanks on continuation lines in multi-line headers. Change-Id: Id5a8063512a2abc3177c104d6ba8fa50d0dc6352
Diffstat (limited to 'org.eclipse.jgit/src')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java3
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java33
2 files changed, 34 insertions, 2 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
index 1f0f13152e..743a8ccce0 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/revwalk/RevCommit.java
@@ -17,7 +17,6 @@ import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.IllegalCharsetNameException;
import java.nio.charset.UnsupportedCharsetException;
-import java.util.Arrays;
import java.util.List;
import org.eclipse.jgit.annotations.Nullable;
@@ -409,7 +408,7 @@ public class RevCommit extends RevObject {
return null;
}
final int end = RawParseUtils.headerEnd(raw, start);
- return Arrays.copyOfRange(raw, start, end);
+ return RawParseUtils.headerValue(raw, start, end);
}
/**
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java
index c87a5e60f2..d2ddf2a345 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/RawParseUtils.java
@@ -554,6 +554,39 @@ public final class RawParseUtils {
}
/**
+ * Extract a part of a buffer as a header value, removing the single blanks
+ * at the front of continuation lines.
+ *
+ * @param b
+ * buffer to extract the header from
+ * @param start
+ * of the header value, see
+ * {@link #headerStart(byte[], byte[], int)}
+ * @param end
+ * of the header; see
+ * {@link #nextLfSkippingSplitLines(byte[], int)}
+ * @return the header value, with blanks indicating continuation lines
+ * stripped
+ * @since 6.9
+ */
+ public static final byte[] headerValue(final byte[] b, int start, int end) {
+ byte[] data = new byte[end - start];
+ int out = 0;
+ byte last = '\0';
+ for (int in = start; in < end; in++) {
+ byte ch = b[in];
+ if (ch != ' ' || last != '\n') {
+ data[out++] = ch;
+ }
+ last = ch;
+ }
+ if (out == data.length) {
+ return data;
+ }
+ return Arrays.copyOf(data, out);
+ }
+
+ /**
* Locate the first end of header after the given position. Note that
* headers may be more than one line long.
* <p>