MergeFormatter{Pass}: Use Charset instead of String

Deprecate constructors and methods taking a character set name as
a String, in favor of new variants taking a Charset.

Change-Id: I616c601daf232fa17610dba1087fd902030d46ea
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
This commit is contained in:
David Pursehouse 2018-09-29 14:58:48 +09:00
parent fbf6ce65ba
commit b65a310abc
5 changed files with 118 additions and 12 deletions

View File

@ -302,7 +302,7 @@ private String merge(String commonBase, String ours, String theirs) throws IOExc
MergeResult r = new MergeAlgorithm().merge(RawTextComparator.DEFAULT,
T(commonBase), T(ours), T(theirs));
ByteArrayOutputStream bo=new ByteArrayOutputStream(50);
fmt.formatMerge(bo, r, "B", "O", "T", Constants.CHARACTER_ENCODING);
fmt.formatMerge(bo, r, "B", "O", "T", UTF_8);
return new String(bo.toByteArray(), UTF_8);
}

View File

@ -972,7 +972,7 @@ public void checkContentMergeConflict_noTree(MergeStrategy strategy)
merger.getMergeResults().get("file");
try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
fmt.formatMerge(out, merger.getMergeResults().get("file"),
"BASE", "OURS", "THEIRS", UTF_8.name());
"BASE", "OURS", "THEIRS", UTF_8);
String expected = "<<<<<<< OURS\n"
+ "1master\n"
+ "=======\n"

View File

@ -45,6 +45,7 @@
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
@ -63,7 +64,7 @@ public class MergeFormatter {
* that are LF-separated lines.
*
* @param out
* the outputstream where to write the textual presentation
* the output stream where to write the textual presentation
* @param res
* the merge result which should be presented
* @param seqName
@ -72,15 +73,46 @@ public class MergeFormatter {
* " or "&gt;&gt;&gt;&gt;&gt;&gt;&gt; " conflict markers. The
* names for the sequences are given in this list
* @param charsetName
* the name of the characterSet used when writing conflict
* the name of the character set used when writing conflict
* metadata
* @throws java.io.IOException
* @deprecated Use
* {@link #formatMerge(OutputStream, MergeResult, List, Charset)}
* instead.
*/
@Deprecated
public void formatMerge(OutputStream out, MergeResult<RawText> res,
List<String> seqName, String charsetName) throws IOException {
new MergeFormatterPass(out, res, seqName, charsetName).formatMerge();
}
/**
* Formats the results of a merge of {@link org.eclipse.jgit.diff.RawText}
* objects in a Git conformant way. This method also assumes that the
* {@link org.eclipse.jgit.diff.RawText} objects being merged are line
* oriented files which use LF as delimiter. This method will also use LF to
* separate chunks and conflict metadata, therefore it fits only to texts
* that are LF-separated lines.
*
* @param out
* the output stream where to write the textual presentation
* @param res
* the merge result which should be presented
* @param seqName
* When a conflict is reported each conflicting range will get a
* name. This name is following the "&lt;&lt;&lt;&lt;&lt;&lt;&lt;
* " or "&gt;&gt;&gt;&gt;&gt;&gt;&gt; " conflict markers. The
* names for the sequences are given in this list
* @param charset
* the character set used when writing conflict metadata
* @throws java.io.IOException
* @since 5.2
*/
public void formatMerge(OutputStream out, MergeResult<RawText> res,
List<String> seqName, Charset charset) throws IOException {
new MergeFormatterPass(out, res, seqName, charset).formatMerge();
}
/**
* Formats the results of a merge of exactly two
* {@link org.eclipse.jgit.diff.RawText} objects in a Git conformant way.
@ -100,17 +132,51 @@ public void formatMerge(OutputStream out, MergeResult<RawText> res,
* @param theirsName
* the name ranges from theirs should get
* @param charsetName
* the name of the characterSet used when writing conflict
* the name of the character set used when writing conflict
* metadata
* @throws java.io.IOException
* @deprecated use
* {@link #formatMerge(OutputStream, MergeResult, String, String, String, Charset)}
* instead.
*/
@Deprecated
public void formatMerge(OutputStream out, MergeResult res, String baseName,
String oursName, String theirsName, String charsetName) throws IOException {
formatMerge(out, res, baseName, oursName, theirsName,
Charset.forName(charsetName));
}
/**
* Formats the results of a merge of exactly two
* {@link org.eclipse.jgit.diff.RawText} objects in a Git conformant way.
* This convenience method accepts the names for the three sequences (base
* and the two merged sequences) as explicit parameters and doesn't require
* the caller to specify a List
*
* @param out
* the {@link java.io.OutputStream} where to write the textual
* presentation
* @param res
* the merge result which should be presented
* @param baseName
* the name ranges from the base should get
* @param oursName
* the name ranges from ours should get
* @param theirsName
* the name ranges from theirs should get
* @param charset
* the character set used when writing conflict metadata
* @throws java.io.IOException
* @since 5.2
*/
@SuppressWarnings("unchecked")
public void formatMerge(OutputStream out, MergeResult res, String baseName,
String oursName, String theirsName, String charsetName) throws IOException {
String oursName, String theirsName, Charset charset)
throws IOException {
List<String> names = new ArrayList<>(3);
names.add(baseName);
names.add(oursName);
names.add(theirsName);
formatMerge(out, res, names, charsetName);
formatMerge(out, res, names, charset);
}
}

View File

@ -46,6 +46,7 @@
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.List;
import org.eclipse.jgit.diff.RawText;
@ -59,19 +60,58 @@ class MergeFormatterPass {
private final List<String> seqName;
private final String charsetName;
private final Charset charset;
private final boolean threeWayMerge;
private String lastConflictingName; // is set to non-null whenever we are in
// a conflict
/**
* @deprecated use
* {@link #MergeFormatterPass(OutputStream, MergeResult, List, Charset)}
* instead.
* @param out
* the {@link java.io.OutputStream} where to write the textual
* presentation
* @param res
* the merge result which should be presented
* @param seqName
* When a conflict is reported each conflicting range will get a
* name. This name is following the "&lt;&lt;&lt;&lt;&lt;&lt;&lt;
* " or "&gt;&gt;&gt;&gt;&gt;&gt;&gt; " conflict markers. The
* names for the sequences are given in this list
* @param charsetName
* the name of the character set used when writing conflict
* metadata
*/
@Deprecated
MergeFormatterPass(OutputStream out, MergeResult<RawText> res, List<String> seqName,
String charsetName) {
this(out, res, seqName, Charset.forName(charsetName));
}
/**
*
* @param out
* the {@link java.io.OutputStream} where to write the textual
* presentation
* @param res
* the merge result which should be presented
* @param seqName
* When a conflict is reported each conflicting range will get a
* name. This name is following the "&lt;&lt;&lt;&lt;&lt;&lt;&lt;
* " or "&gt;&gt;&gt;&gt;&gt;&gt;&gt; " conflict markers. The
* names for the sequences are given in this list
* @param charset
* the character set used when writing conflict metadata
*/
MergeFormatterPass(OutputStream out, MergeResult<RawText> res,
List<String> seqName, Charset charset) {
this.out = new EolAwareOutputStream(out);
this.res = res;
this.seqName = seqName;
this.charsetName = charsetName;
this.charset = charset;
this.threeWayMerge = (res.getSequences().size() == 3);
}
@ -133,7 +173,7 @@ private void writeConflictChange(MergeChunk chunk) throws IOException {
private void writeln(String s) throws IOException {
out.beginln();
out.write((s + "\n").getBytes(charsetName)); //$NON-NLS-1$
out.write((s + "\n").getBytes(charset)); //$NON-NLS-1$
}
private void writeLine(RawText seq, int i) throws IOException {

View File

@ -46,10 +46,10 @@
*/
package org.eclipse.jgit.merge;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.eclipse.jgit.diff.DiffAlgorithm.SupportedAlgorithm.HISTOGRAM;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_DIFF_SECTION;
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_ALGORITHM;
import static org.eclipse.jgit.lib.Constants.CHARACTER_ENCODING;
import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
import java.io.BufferedOutputStream;
@ -1026,7 +1026,7 @@ private TemporaryBuffer doMerge(MergeResult<RawText> result)
db != null ? nonNullRepo().getDirectory() : null, inCoreLimit);
try {
new MergeFormatter().formatMerge(buf, result,
Arrays.asList(commitNames), CHARACTER_ENCODING);
Arrays.asList(commitNames), UTF_8);
buf.close();
} catch (IOException e) {
buf.destroy();