You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2013/02/08 02:56:43 UTC

svn commit: r1443821 - /subversion/trunk/subversion/svn/diff-cmd.c

Author: julianfoad
Date: Fri Feb  8 01:56:29 2013
New Revision: 1443821

URL: http://svn.apache.org/r1443821
Log:
Make 'svn diff --old=FOO --new=BAR' default to WORKING revision rather than
BASE for the old target if the new target is explicitly specified, so that
it is the reverse of the diff from 'svn diff --old=BAR --new=FOO'.

Patch by: Alexey Neyman <stilor{_AT_}att.net>

* subversion/svn/diff-cmd.c
  (svn_cl__diff): Change defaults as described and simplify the logic.

Modified:
    subversion/trunk/subversion/svn/diff-cmd.c

Modified: subversion/trunk/subversion/svn/diff-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/diff-cmd.c?rev=1443821&r1=1443820&r2=1443821&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/diff-cmd.c (original)
+++ subversion/trunk/subversion/svn/diff-cmd.c Fri Feb  8 01:56:29 2013
@@ -238,10 +238,11 @@ svn_cl__diff(apr_getopt_t *os,
       targets->nelts = 0;
 
       /* Set default start/end revisions based on target types, in the same
-       * manner as done for the corresponding '--old X --new Y' cases. */
+       * manner as done for the corresponding '--old X --new Y' cases,
+       * (note that we have an explicit --new target) */
       if (opt_state->start_revision.kind == svn_opt_revision_unspecified)
         opt_state->start_revision.kind = svn_path_is_url(old_target)
-            ? svn_opt_revision_head : svn_opt_revision_base;
+            ? svn_opt_revision_head : svn_opt_revision_working;
 
       if (opt_state->end_revision.kind == svn_opt_revision_unspecified)
         opt_state->end_revision.kind = svn_path_is_url(new_target)
@@ -280,21 +281,14 @@ svn_cl__diff(apr_getopt_t *os,
       if (new_rev.kind != svn_opt_revision_unspecified)
         opt_state->end_revision = new_rev;
 
-      if (opt_state->new_target
-          && opt_state->start_revision.kind == svn_opt_revision_unspecified
-          && opt_state->end_revision.kind == svn_opt_revision_unspecified
-          && ! svn_path_is_url(old_target)
-          && ! svn_path_is_url(new_target))
-        {
-          /* We want the arbitrary_nodes_diff instead of just working nodes */
-          opt_state->start_revision.kind = svn_opt_revision_working;
-          opt_state->end_revision.kind = svn_opt_revision_working;
-        }
-
+      /* For URLs, default to HEAD. For WC paths, default to WORKING if
+       * new target is explicit; if new target is implicitly the same as
+       * old target, then default the old to BASE and new to WORKING. */
       if (opt_state->start_revision.kind == svn_opt_revision_unspecified)
         opt_state->start_revision.kind = svn_path_is_url(old_target)
-          ? svn_opt_revision_head : svn_opt_revision_base;
-
+          ? svn_opt_revision_head
+          : (opt_state->new_target
+             ? svn_opt_revision_working : svn_opt_revision_base);
       if (opt_state->end_revision.kind == svn_opt_revision_unspecified)
         opt_state->end_revision.kind = svn_path_is_url(new_target)
           ? svn_opt_revision_head : svn_opt_revision_working;