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 2011/12/15 19:00:46 UTC
svn commit: r1214898 - /subversion/trunk/subversion/svn/merge-cmd.c
Author: julianfoad
Date: Thu Dec 15 18:00:46 2011
New Revision: 1214898
URL: http://svn.apache.org/viewvc?rev=1214898&view=rev
Log:
* subversion/svn/merge-cmd.c
(ensure_wc_path_has_repo_revision): New function, factored out ...
(svn_cl__merge): ... from here.
Modified:
subversion/trunk/subversion/svn/merge-cmd.c
Modified: subversion/trunk/subversion/svn/merge-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/merge-cmd.c?rev=1214898&r1=1214897&r2=1214898&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/merge-cmd.c (original)
+++ subversion/trunk/subversion/svn/merge-cmd.c Thu Dec 15 18:00:46 2011
@@ -78,6 +78,25 @@ merge_reintegrate(const char *source_pat
return SVN_NO_ERROR;
}
+/* Throw an error if PATH_OR_URL is a path and REVISION isn't a repository
+ * revision. */
+static svn_error_t *
+ensure_wc_path_has_repo_revision(const char *path_or_url,
+ const svn_opt_revision_t *revision,
+ apr_pool_t *scratch_pool)
+{
+ if (revision->kind != svn_opt_revision_number
+ && revision->kind != svn_opt_revision_date
+ && revision->kind != svn_opt_revision_head
+ && ! svn_path_is_url(path_or_url))
+ return svn_error_createf(
+ SVN_ERR_CLIENT_BAD_REVISION, NULL,
+ _("Invalid merge source '%s'; a working copy path can only be "
+ "used with a repository revision (a number, a date, or head)"),
+ svn_dirent_local_style(path_or_url, scratch_pool));
+ return SVN_NO_ERROR;
+}
+
/* This implements the `svn_opt_subcommand_t' interface. */
svn_error_t *
svn_cl__merge(apr_getopt_t *os,
@@ -243,26 +262,13 @@ svn_cl__merge(apr_getopt_t *os,
/* Catch 'svn merge wc_path1 wc_path2 [target]' without explicit
revisions--since it ignores local modifications it may not do what
- the user expects. Forcing the user to specify a repository
+ the user expects. That is, it doesn't read from the WC itself, it
+ reads from the WC's URL. Forcing the user to specify a repository
revision should avoid any confusion. */
- if (first_range_start.kind != svn_opt_revision_number
- && first_range_start.kind != svn_opt_revision_date
- && first_range_start.kind != svn_opt_revision_head
- && ! svn_path_is_url(sourcepath1))
- return svn_error_createf(
- SVN_ERR_CLIENT_BAD_REVISION, NULL,
- _("Invalid merge source '%s'; a working copy path can only be "
- "used with a repository revision (a number, a date, or head)"),
- svn_dirent_local_style(sourcepath1, pool));
- if (first_range_end.kind != svn_opt_revision_number
- && first_range_end.kind != svn_opt_revision_date
- && first_range_end.kind != svn_opt_revision_head
- && ! svn_path_is_url(sourcepath2))
- return svn_error_createf(
- SVN_ERR_CLIENT_BAD_REVISION, NULL,
- _("Invalid merge source '%s'; a working copy path can only be "
- "used with a repository revision (a number, a date, or head)"),
- svn_dirent_local_style(sourcepath2, pool));
+ SVN_ERR(ensure_wc_path_has_repo_revision(sourcepath1, &first_range_start,
+ pool));
+ SVN_ERR(ensure_wc_path_has_repo_revision(sourcepath2, &first_range_end,
+ pool));
/* Default peg revisions to each URL's youngest revision. */
if (first_range_start.kind == svn_opt_revision_unspecified)