You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2013/01/16 15:45:35 UTC

svn commit: r1433958 - in /subversion/trunk/subversion: include/svn_client.h libsvn_client/deprecated.c libsvn_client/diff.c svn/cl.h svn/diff-cmd.c svn/log-cmd.c svn/svn.c

Author: rhuijben
Date: Wed Jan 16 14:45:35 2013
New Revision: 1433958

URL: http://svn.apache.org/viewvc?rev=1433958&view=rev
Log:
To finally close issue #3009, and for similarity with 'svnlook diff', add a
--no-diff-added output filtering argument to 'svn diff'.

* subversion/include/svn_client.h
  (svn_client_diff6,
   svn_client_diff_peg6): Update arguments.

* subversion/libsvn_client/deprecated.c
  (svn_client_diff5,
   svn_client_diff_peg5): Update caller.

* subversion/libsvn_client/diff.c
  (diff_cmd_baton): Add variable.
  (diff_file_added): Filter diff if requested.
  (svn_client_diff6,
   svn_client_diff_peg6): Set value in baton.

* subversion/svn/cl.h
  (svn_cl__opt_state_t.diff): Add variable.

* subversion/svn/diff-cmd.c
  (svn_cl__diff): Update caller.

* subversion/svn/log-cmd.c
  (svn_cl__log): Update caller.

* subversion/svn/svn.c
  (svn_cl__longopt_t): Add value.
  (svn_cl__options): Add argument.
  (svn_cl__cmd_table): Declare --no-diff-added for diff.
  (sub_main): Parse argument.

Modified:
    subversion/trunk/subversion/include/svn_client.h
    subversion/trunk/subversion/libsvn_client/deprecated.c
    subversion/trunk/subversion/libsvn_client/diff.c
    subversion/trunk/subversion/svn/cl.h
    subversion/trunk/subversion/svn/diff-cmd.c
    subversion/trunk/subversion/svn/log-cmd.c
    subversion/trunk/subversion/svn/svn.c

Modified: subversion/trunk/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1433958&r1=1433957&r2=1433958&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_client.h (original)
+++ subversion/trunk/subversion/include/svn_client.h Wed Jan 16 14:45:35 2013
@@ -2939,6 +2939,9 @@ svn_client_blame(const char *path_or_url
  * and the addition of another, but if this flag is TRUE, unrelated
  * items will be diffed as if they were related.
  *
+ * If @a no_diff_added is TRUE, then no diff output will be generated
+ * on added files.
+ *
  * If @a no_diff_deleted is TRUE, then no diff output will be
  * generated on deleted files.
  *
@@ -3000,6 +3003,7 @@ svn_client_diff6(const apr_array_header_
                  const char *relative_to_dir,
                  svn_depth_t depth,
                  svn_boolean_t ignore_ancestry,
+                 svn_boolean_t no_diff_added,
                  svn_boolean_t no_diff_deleted,
                  svn_boolean_t show_copies_as_adds,
                  svn_boolean_t ignore_content_type,
@@ -3015,7 +3019,7 @@ svn_client_diff6(const apr_array_header_
 
 /** Similar to svn_client_diff6(), but with @a outfile and @a errfile,
  * instead of @a outstream and @a errstream, and always showing property
- * changes.
+ * changes and additions.
  *
  * @deprecated Provided for backward compatibility with the 1.7 API.
  * @since New in 1.7.
@@ -3161,6 +3165,7 @@ svn_client_diff_peg6(const apr_array_hea
                      const char *relative_to_dir,
                      svn_depth_t depth,
                      svn_boolean_t ignore_ancestry,
+                     svn_boolean_t no_diff_added,
                      svn_boolean_t no_diff_deleted,
                      svn_boolean_t show_copies_as_adds,
                      svn_boolean_t ignore_content_type,

Modified: subversion/trunk/subversion/libsvn_client/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/deprecated.c?rev=1433958&r1=1433957&r2=1433958&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/deprecated.c (original)
+++ subversion/trunk/subversion/libsvn_client/deprecated.c Wed Jan 16 14:45:35 2013
@@ -937,9 +937,11 @@ svn_client_diff5(const apr_array_header_
 
   return svn_client_diff6(diff_options, path1, revision1, path2,
                           revision2, relative_to_dir, depth,
-                          ignore_ancestry, no_diff_deleted,
-                          show_copies_as_adds, ignore_content_type, FALSE,
-                          FALSE, use_git_diff_format, header_encoding,
+                          ignore_ancestry, FALSE /* no_diff_added */,
+                          no_diff_deleted, show_copies_as_adds,
+                          ignore_content_type, FALSE /* ignore_properties */,
+                          FALSE /* properties_only */, use_git_diff_format,
+                          header_encoding,
                           outstream, errstream, changelists, ctx, pool);
 }
 
@@ -1063,11 +1065,12 @@ svn_client_diff_peg5(const apr_array_hea
                               relative_to_dir,
                               depth,
                               ignore_ancestry,
+                              FALSE /* no_diff_added */,
                               no_diff_deleted,
                               show_copies_as_adds,
                               ignore_content_type,
-                              FALSE,
-                              FALSE,
+                              FALSE /* ignore_properties */,
+                              FALSE /* properties_only */,
                               use_git_diff_format,
                               header_encoding,
                               outstream,

Modified: subversion/trunk/subversion/libsvn_client/diff.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/diff.c?rev=1433958&r1=1433957&r2=1433958&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/diff.c (original)
+++ subversion/trunk/subversion/libsvn_client/diff.c Wed Jan 16 14:45:35 2013
@@ -588,6 +588,9 @@ struct diff_cmd_baton {
   /* Whether we're producing a git-style diff. */
   svn_boolean_t use_git_diff_format;
 
+  /* Whether addition of a file is summarized versus showing a full diff. */
+  svn_boolean_t no_diff_added;
+
   /* Whether deletion of a file is summarized versus showing a full diff. */
   svn_boolean_t no_diff_deleted;
 
@@ -993,7 +996,22 @@ diff_file_added(svn_wc_notify_state_t *c
         rev2 = diff_cmd_baton->revnum2;
     }
 
-  if (tmpfile1 && copyfrom_path)
+  if (diff_cmd_baton->no_diff_added)
+    {
+      const char *index_path = diff_relpath;
+
+      if (diff_cmd_baton->anchor)
+        index_path = svn_dirent_join(diff_cmd_baton->anchor, diff_relpath,
+                                     scratch_pool);
+
+      SVN_ERR(svn_stream_printf_from_utf8(diff_cmd_baton->outstream,
+                diff_cmd_baton->header_encoding, scratch_pool,
+                "Index: %s (added)" APR_EOL_STR
+                SVN_DIFF__EQUAL_STRING APR_EOL_STR,
+                index_path));
+      wrote_header = TRUE;
+    }
+  else if (tmpfile1 && copyfrom_path)
     SVN_ERR(diff_content_changed(&wrote_header, diff_relpath,
                                  tmpfile1, tmpfile2, rev1, rev2,
                                  mimetype1, mimetype2,
@@ -2906,6 +2924,7 @@ svn_client_diff6(const apr_array_header_
                  const char *relative_to_dir,
                  svn_depth_t depth,
                  svn_boolean_t ignore_ancestry,
+                 svn_boolean_t no_diff_added,
                  svn_boolean_t no_diff_deleted,
                  svn_boolean_t show_copies_as_adds,
                  svn_boolean_t ignore_content_type,
@@ -2948,6 +2967,7 @@ svn_client_diff6(const apr_array_header_
   diff_cmd_baton.properties_only = properties_only;
   diff_cmd_baton.relative_to_dir = relative_to_dir;
   diff_cmd_baton.use_git_diff_format = use_git_diff_format;
+  diff_cmd_baton.no_diff_added = no_diff_added;
   diff_cmd_baton.no_diff_deleted = no_diff_deleted;
   diff_cmd_baton.wc_ctx = ctx->wc_ctx;
   diff_cmd_baton.ra_session = NULL;
@@ -2969,6 +2989,7 @@ svn_client_diff_peg6(const apr_array_hea
                      const char *relative_to_dir,
                      svn_depth_t depth,
                      svn_boolean_t ignore_ancestry,
+                     svn_boolean_t no_diff_added,
                      svn_boolean_t no_diff_deleted,
                      svn_boolean_t show_copies_as_adds,
                      svn_boolean_t ignore_content_type,
@@ -3007,6 +3028,7 @@ svn_client_diff_peg6(const apr_array_hea
   diff_cmd_baton.properties_only = properties_only;
   diff_cmd_baton.relative_to_dir = relative_to_dir;
   diff_cmd_baton.use_git_diff_format = use_git_diff_format;
+  diff_cmd_baton.no_diff_added = no_diff_added;
   diff_cmd_baton.no_diff_deleted = no_diff_deleted;
   diff_cmd_baton.wc_ctx = ctx->wc_ctx;
   diff_cmd_baton.ra_session = NULL;

Modified: subversion/trunk/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/cl.h?rev=1433958&r1=1433957&r2=1433958&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/cl.h (original)
+++ subversion/trunk/subversion/svn/cl.h Wed Jan 16 14:45:35 2013
@@ -186,6 +186,7 @@ typedef struct svn_cl__opt_state_t
     {
   const char *diff_cmd;          /* the external diff command to use */
   svn_boolean_t internal_diff;    /* override diff_cmd in config file */
+  svn_boolean_t no_diff_added; /* do not show diffs for deleted files */
   svn_boolean_t no_diff_deleted; /* do not show diffs for deleted files */
   svn_boolean_t show_copies_as_adds; /* do not diff copies with their source */
   svn_boolean_t notice_ancestry; /* notice ancestry for diff-y operations */

Modified: subversion/trunk/subversion/svn/diff-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/diff-cmd.c?rev=1433958&r1=1433957&r2=1433958&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/diff-cmd.c (original)
+++ subversion/trunk/subversion/svn/diff-cmd.c Wed Jan 16 14:45:35 2013
@@ -394,6 +394,7 @@ svn_cl__diff(apr_getopt_t *os,
                      NULL,
                      opt_state->depth,
                      ! opt_state->diff.notice_ancestry,
+                     opt_state->diff.no_diff_added,
                      opt_state->diff.no_diff_deleted,
                      show_copies_as_adds,
                      opt_state->force,
@@ -444,6 +445,7 @@ svn_cl__diff(apr_getopt_t *os,
                      NULL,
                      opt_state->depth,
                      ! opt_state->diff.notice_ancestry,
+                     opt_state->diff.no_diff_added,
                      opt_state->diff.no_diff_deleted,
                      show_copies_as_adds,
                      opt_state->force,

Modified: subversion/trunk/subversion/svn/log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/log-cmd.c?rev=1433958&r1=1433957&r2=1433958&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/log-cmd.c (original)
+++ subversion/trunk/subversion/svn/log-cmd.c Wed Jan 16 14:45:35 2013
@@ -128,13 +128,14 @@ display_diff(const svn_log_entry_t *log_
                                &start_revision, &end_revision,
                                NULL,
                                depth,
-                               FALSE, /* ignore ancestry */
-                               TRUE, /* no diff deleted */
-                               FALSE, /* show copies as adds */
-                               FALSE, /* ignore content type */
-                               FALSE, /* ignore prop diff */
-                               FALSE, /* properties only */
-                               FALSE, /* use git diff format */
+                               FALSE /* ignore ancestry */,
+                               FALSE /* no diff added */,
+                               TRUE  /* no diff deleted */,
+                               FALSE /* show copies as adds */,
+                               FALSE /* ignore content type */,
+                               FALSE /* ignore prop diff */,
+                               FALSE /* properties only */,
+                               FALSE /* use git diff format */,
                                svn_cmdline_output_encoding(pool),
                                outstream,
                                errstream,

Modified: subversion/trunk/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/svn.c?rev=1433958&r1=1433957&r2=1433958&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/svn.c (original)
+++ subversion/trunk/subversion/svn/svn.c Wed Jan 16 14:45:35 2013
@@ -75,6 +75,7 @@ typedef enum svn_cl__longopt_t {
   /* diff options */
   opt_diff_cmd,
   opt_internal_diff,
+  opt_no_diff_added,
   opt_no_diff_deleted,
   opt_show_copies_as_adds,
   opt_notice_ancestry,
@@ -337,6 +338,8 @@ const apr_getopt_option_t svn_cl__option
   {"diff-cmd",      opt_diff_cmd, 1, N_("use ARG as diff command")},
   {"internal-diff", opt_internal_diff, 0,
                        N_("override diff-cmd specified in config file")},
+  {"no-diff-added", opt_no_diff_added, 0,
+                    N_("do not print differences for added files")},
   {"no-diff-deleted", opt_no_diff_deleted, 0,
                     N_("do not print differences for deleted files")},
   {"show-copies-as-adds", opt_show_copies_as_adds, 0,
@@ -557,8 +560,8 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "\n"
      "  Use just 'svn diff' to display local modifications in a working copy.\n"),
     {'r', 'c', opt_old_cmd, opt_new_cmd, 'N', opt_depth, opt_diff_cmd,
-     opt_internal_diff, 'x', opt_no_diff_deleted, opt_ignore_properties,
-     opt_properties_only,
+     opt_internal_diff, 'x', opt_no_diff_added, opt_no_diff_deleted,
+     opt_ignore_properties, opt_properties_only,
      opt_show_copies_as_adds, opt_notice_ancestry, opt_summarize, opt_changelist,
      opt_force, opt_xml, opt_use_git_diff_format, opt_patch_compatible} },
   { "export", svn_cl__export, {0}, N_
@@ -1998,6 +2001,9 @@ sub_main(int argc, const char *argv[], a
       case opt_trust_server_cert:
         opt_state.trust_server_cert = TRUE;
         break;
+      case opt_no_diff_added:
+        opt_state.diff.no_diff_added = TRUE;
+        break;
       case opt_no_diff_deleted:
         opt_state.diff.no_diff_deleted = TRUE;
         break;