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"));
+
}