You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Bert Huijben <be...@qqmail.nl> on 2014/05/02 22:54:20 UTC

Re: svn commit: r1591871 - /subversion/trunk/tools/diff/diff3.c

Wouldn't the

svn_err = svn_error_wrap_apr(status, "getopt failure");

try to wrap APR_SUCCESS on the 4th -L case?


Bert






Sent from Windows Mail





From: Philip Martin
Sent: ‎Friday‎, ‎May‎ ‎2‎, ‎2014 ‎1‎:‎29‎ ‎PM
To: commits@subversion.apache.org





Author: philip
Date: Fri May  2 11:29:26 2014
New Revision: 1591871

URL: http://svn.apache.org/r1591871
Log:
Make it easier to use tools/diff/diff3 in a --diff3-cmd script by
accepting all the options passed when a diff3 program is invoked.
Use '-L' to label the output, simply ignore '-E' and '-m'.  This
allows a --diff3-cmd script to invoke diff3 as:

    diff3 --conflict-style modified-latest $@

* tools/diff/diff3.c
  (do_diff3): Add conflict label parameters.
  (main): Add '-L' and accept up to 3 instances, add '-m' and '-E' and
   ignore, tweak usage text.

Modified:
    subversion/trunk/tools/diff/diff3.c

Modified: subversion/trunk/tools/diff/diff3.c
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/diff/diff3.c?rev=1591871&r1=1591870&r2=1591871&view=diff
==============================================================================
--- subversion/trunk/tools/diff/diff3.c (original)
+++ subversion/trunk/tools/diff/diff3.c Fri May  2 11:29:26 2014
@@ -34,7 +34,12 @@
 
 static svn_error_t *
 do_diff3(svn_stream_t *ostream,
-         const char *original, const char *modified, const char *latest,
+         const char *original,
+         const char *modified,
+         const char *latest,
+         const char *conflict_original,
+         const char *conflict_modified,
+         const char *conflict_latest,
          svn_diff_conflict_display_style_t conflict_style,
          svn_boolean_t *has_changes,
          apr_pool_t *pool)
@@ -48,7 +53,10 @@ do_diff3(svn_stream_t *ostream,
 
   SVN_ERR(svn_diff_file_output_merge2(ostream, diff,
                                       original, modified, latest,
-                                      NULL, NULL, NULL, NULL,
+                                      conflict_original,
+                                      conflict_modified,
+                                      conflict_latest,
+                                      "=======",
                                       conflict_style,
                                       pool));
 
@@ -67,6 +75,9 @@ int main(int argc, const char *argv[])
   };
   static const apr_getopt_option_t options[] = {
     {"conflict-style", conflict_style_opt, 1, ""},
+    {"label", 'L', 1, ""},
+    {"show-overlap", 'E', 0, ""},
+    {"merge", 'm', 0, ""},
     {NULL, 0, 0, NULL}
   };
   svn_diff_conflict_display_style_t conflict_style
@@ -86,6 +97,9 @@ int main(int argc, const char *argv[])
       svn_diff_conflict_display_only_conflicts },
     {NULL, 0}
   };
+  const char *conflict_original = NULL;
+  const char *conflict_modified = NULL;
+  const char *conflict_latest = NULL;
 
   apr_initialize();
 
@@ -115,6 +129,23 @@ int main(int argc, const char *argv[])
             conflict_style = val;
             break;
           }
+        case 'L':
+          if (!conflict_original)
+            conflict_original = apr_pstrcat(pool, "<<<<<<< ", arg, SVN_VA_NULL);
+          else if (!conflict_modified)
+            conflict_modified = apr_pstrcat(pool, "||||||| ", arg, SVN_VA_NULL);
+          else if (!conflict_latest)
+            conflict_latest = apr_pstrcat(pool, ">>>>>>> ", arg, SVN_VA_NULL);
+          else
+            svn_err = svn_error_wrap_apr(status, "getopt failure");
+          break;
+        case 'E':
+        case 'm':
+          /* These are allowed and ignored so that all the options
+             passed when invoking --diff3-cmd are accepted as that
+             makes it easier to use this as an external diff3
+             program. */
+          break;
         }
     }
 
@@ -131,6 +162,7 @@ int main(int argc, const char *argv[])
       svn_boolean_t has_changes;
 
       svn_err = do_diff3(ostream, argv[argc-2], argv[argc-3], argv[argc-1],
+                         conflict_original, conflict_modified, conflict_latest,
                          conflict_style, &has_changes, pool);
       if (svn_err == NULL)
         {
@@ -148,13 +180,22 @@ int main(int argc, const char *argv[])
         "Usage: %s [options] <mine> <older> <yours>\n"
         "Options:\n"
         "  --conflict-style STYLE\n"
-        "  where STYLE can be:\n"
-        "    %s\n"
-        "    %s\n"
-        "    %s\n"
-        "    %s\n"
-        "    %s\n"
-        "    %s\n",
+        "    where STYLE can be:\n"
+        "      %s\n"
+        "      %s\n"
+        "      %s\n"
+        "      %s\n"
+        "      %s\n"
+        "      %s\n"
+        "\n"
+        "  --label [-L] LABEL\n"
+        "    can be repeated up to three times\n"
+        "\n"
+        "  --merge [-m]\n"
+        "    ignored (present for compatibility)\n"
+        "\n"
+        "  --show-overlap [-E]\n"
+        "    ignored (present for compatibility)\n",
         argv[0],
         svn_token__to_word(style_map,
                            svn_diff_conflict_display_modified_latest),

Re: svn commit: r1591871 - /subversion/trunk/tools/diff/diff3.c

Posted by Philip Martin <ph...@wandisco.com>.
Bert Huijben <be...@qqmail.nl> writes:

> Wouldn't the
>
> svn_err = svn_error_wrap_apr(status, "getopt failure");
>
> try to wrap APR_SUCCESS on the 4th -L case?

Fixed with 1592743. Thanks!

-- 
Philip Martin | Subversion Committer
WANdisco // *Non-Stop Data*