]> source.dussan.org Git - jgit.git/commitdiff
MergeFormatter{Pass}: Use Charset instead of String 88/130188/2
authorDavid Pursehouse <david.pursehouse@gmail.com>
Sat, 29 Sep 2018 05:58:48 +0000 (14:58 +0900)
committerDavid Pursehouse <david.pursehouse@gmail.com>
Sun, 30 Sep 2018 05:34:14 +0000 (14:34 +0900)
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>
org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergeAlgorithmTest.java
org.eclipse.jgit.test/tst/org/eclipse/jgit/merge/MergerTest.java
org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatter.java
org.eclipse.jgit/src/org/eclipse/jgit/merge/MergeFormatterPass.java
org.eclipse.jgit/src/org/eclipse/jgit/merge/ResolveMerger.java

index b131808318c4e323917b95a7275d20a3df9d13a0..3da779b4ec12c133f2b8d75230233396eb0de438 100644 (file)
@@ -302,7 +302,7 @@ public class MergeAlgorithmTest {
                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);
        }
 
index 7f5dba6975a11cea598f2a852a909079b1f13cd3..8ca5d453fbb35c41f72eca15a41a3c2aad9b5bd2 100644 (file)
@@ -972,7 +972,7 @@ public class MergerTest extends RepositoryTestCase {
                        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"
index 036917e62afd3678c94e11852559d2efcdb9565e..895d94b21c08ce2eb22bc174f5d67239946f7733 100644 (file)
@@ -45,6 +45,7 @@ package org.eclipse.jgit.merge;
 
 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 class MergeFormatter {
         * @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.
         */
-       @SuppressWarnings("unchecked")
+       @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, 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);
        }
 }
index 060f06884a7b28bfb0349cfde0c36c6e9745acc8..a1b6277019ed43a5893a7fd6982e3ec85dac6091 100644 (file)
@@ -46,6 +46,7 @@ package org.eclipse.jgit.merge;
 
 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 @@ class MergeFormatterPass {
 
        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 {
index f60c95f6472b8e268137d51e23dd2cd6f2a460bc..412d9bba730ff71cde8e05ae9fd66cb0327e7922 100644 (file)
  */
 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 @@ public class ResolveMerger extends ThreeWayMerger {
                                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();