Author: julianfoad
Date: Fri Dec  4 14:14:17 2009
New Revision: 887205

URL: http://svn.apache.org/viewvc?rev=887205&view=rev
Log:
Make svn error out gracefully when invalid revision keywords
(BASE|PREV|COMMITTED) are used with a URL, hereby extending to all
subcommands. Previously it was handled gracefully only for merge, diff,
copy, log.

* subversion/libsvn_client/revisions.c
  (svn_client__get_revision_number): If the incoming path is a URL
    demanding a wc revision argument, error out gracefully.

* subversion/libsvn_client/merge.c
  (normalize_merge_sources): Remove the redundant checking code.

* subversion/libsvn_client/diff.c
  (check_paths): Same.

* subversion/libsvn_client/log.c
  (svn_client_log5): Same.

* subversion/libsvn_client/copy.c
  (try_copy): Same.

Patch by: Kannan R <kannanr{_AT_}collab.net>

Modified:
    subversion/trunk/subversion/libsvn_client/copy.c
    subversion/trunk/subversion/libsvn_client/diff.c
    subversion/trunk/subversion/libsvn_client/log.c
    subversion/trunk/subversion/libsvn_client/merge.c
    subversion/trunk/subversion/libsvn_client/revisions.c

Modified: subversion/trunk/subversion/libsvn_client/copy.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/copy.c?rev=887205&r1=887204&r2=887205&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/copy.c (original)
+++ subversion/trunk/subversion/libsvn_client/copy.c Fri Dec  4 14:14:17 2009
@@ -1747,19 +1747,6 @@
   svn_boolean_t srcs_are_urls, dst_is_url;
   int i;
 
-  /* Check to see if the supplied peg revisions make sense. */
-  for (i = 0; i < sources->nelts; i++)
-    {
-      svn_client_copy_source_t *source =
-        ((svn_client_copy_source_t **) (sources->elts))[i];
-
-      if (svn_path_is_url(source->path)
-          && (SVN_CLIENT__REVKIND_NEEDS_WC(source->peg_revision->kind)))
-        return svn_error_create
-          (SVN_ERR_CLIENT_BAD_REVISION, NULL,
-           _("Revision type requires a working copy path, not a URL"));
-    }
-
   /* Are either of our paths URLs?
    * Just check the first src_path.  If there are more than one, we'll check
    * for homogeneity among them down below. */

Modified: subversion/trunk/subversion/libsvn_client/diff.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/diff.c?rev=887205&r1=887204&r2=887205&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/diff.c (original)
+++ subversion/trunk/subversion/libsvn_client/diff.c Fri Dec  4 14:14:17 2009
@@ -959,14 +959,6 @@
     return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
                             _("Not all required revisions are specified"));
 
-  if ((svn_path_is_url(params->path1)
-       && SVN_CLIENT__REVKIND_NEEDS_WC(params->revision1->kind))
-      || (svn_path_is_url(params->path2)
-          && SVN_CLIENT__REVKIND_NEEDS_WC(params->revision2->kind)))
-    return svn_error_create(
-      SVN_ERR_CLIENT_BAD_REVISION, NULL,
-      _("PREV, BASE, or COMMITTED revision keywords are invalid for URL"));
-
   /* Revisions can be said to be local or remote.  BASE and WORKING,
      for example, are local.  */
   is_local_rev1 =

Modified: subversion/trunk/subversion/libsvn_client/log.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/log.c?rev=887205&r1=887204&r2=887205&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/log.c (original)
+++ subversion/trunk/subversion/libsvn_client/log.c Fri Dec  4 14:14:17 2009
@@ -334,14 +334,6 @@
   /* Use the passed URL, if there is one.  */
   url_or_path = APR_ARRAY_IDX(targets, 0, const char *);
   is_url = svn_path_is_url(url_or_path);
-
-  if (is_url && SVN_CLIENT__REVKIND_NEEDS_WC(peg_revision->kind))
-    {
-      return svn_error_create
-        (SVN_ERR_CLIENT_BAD_REVISION, NULL,
-         _("Revision type requires a working copy path, not a URL"));
-    }
-
   session_opt_rev.kind = svn_opt_revision_unspecified;
 
   for (i = 0; i < revision_ranges->nelts; i++)
@@ -393,15 +385,6 @@
              _("Missing required revision specification"));
         }
 
-      if (is_url
-          && (SVN_CLIENT__REVKIND_NEEDS_WC(range->start.kind)
-              || SVN_CLIENT__REVKIND_NEEDS_WC(range->end.kind)))
-        {
-          return svn_error_create
-            (SVN_ERR_CLIENT_BAD_REVISION, NULL,
-             _("Revision type requires a working copy path, not a URL"));
-        }
-
       /* Determine the revision to open the RA session to. */
       if (session_opt_rev.kind == svn_opt_revision_unspecified)
         {

Modified: subversion/trunk/subversion/libsvn_client/merge.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=887205&r1=887204&r2=887205&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/merge.c (original)
+++ subversion/trunk/subversion/libsvn_client/merge.c Fri Dec  4 14:14:17 2009
@@ -5996,19 +5996,6 @@
         return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
                                 _("Not all required revisions are specified"));
 
-      /* The BASE, COMMITTED, and PREV revision keywords do not
-         apply to URLs. */
-      if (svn_path_is_url(source)
-          && (range_start->kind == svn_opt_revision_base
-              || range_end->kind == svn_opt_revision_base
-              || range_start->kind == svn_opt_revision_committed
-              || range_end->kind == svn_opt_revision_committed
-              || range_start->kind == svn_opt_revision_previous
-              || range_end->kind == svn_opt_revision_previous))
-        return svn_error_create(
-          SVN_ERR_CLIENT_BAD_REVISION, NULL,
-          _("PREV, BASE, or COMMITTED revision keywords are invalid for URL"));
-
       SVN_ERR(svn_client__get_revision_number(&range_start_rev, &youngest_rev,
                                               ctx->wc_ctx,
                                               source_abspath_or_url,

Modified: subversion/trunk/subversion/libsvn_client/revisions.c
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/revisions.c?rev=887205&r1=887204&r2=887205&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/revisions.c (original)
+++ subversion/trunk/subversion/libsvn_client/revisions.c Fri Dec  4 14:14:17 
2009
@@ -86,6 +86,11 @@
           return svn_error_create(SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED,
                                   NULL, NULL);
 
+        /* The BASE, COMMITTED, and PREV revision keywords do not
+           apply to URLs. */
+        if (svn_path_is_url(local_abspath))
+          goto invalid_rev_arg;
+
         SVN_ERR(svn_wc__get_entry_versioned(&ent, wc_ctx, local_abspath,
                                             svn_node_unknown, FALSE, FALSE,
                                             scratch_pool, scratch_pool));
@@ -104,6 +109,11 @@
           return svn_error_create(SVN_ERR_CLIENT_VERSIONED_PATH_REQUIRED,
                                   NULL, NULL);
 
+        /* The BASE, COMMITTED, and PREV revision keywords do not
+           apply to URLs. */
+        if (svn_path_is_url(local_abspath))
+          goto invalid_rev_arg;
+
         SVN_ERR(svn_wc__get_entry_versioned(&ent, wc_ctx, local_abspath,
                                             svn_node_unknown, FALSE, FALSE,
                                             scratch_pool, scratch_pool));
@@ -155,4 +165,10 @@
     *revnum = *youngest_rev;
 
   return SVN_NO_ERROR;
+
+  invalid_rev_arg:
+    return svn_error_create(
+      SVN_ERR_CLIENT_BAD_REVISION, NULL,
+      _("PREV, BASE, or COMMITTED revision keywords are invalid for URL"));
+
 }


Reply via email to