You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pe...@apache.org on 2010/10/05 19:28:19 UTC
svn commit: r1004727 - in /subversion/trunk/subversion: svn/log-cmd.c
svn/main.c tests/cmdline/log_tests.py
Author: peters
Date: Tue Oct 5 17:28:18 2010
New Revision: 1004727
URL: http://svn.apache.org/viewvc?rev=1004727&view=rev
Log:
Add range support to 'svn -c'. Note that I use '-' instead of ':' as
the range operator. This is for consistency with the syntax of the
svn:mergeinfo property, and to allow cutting and pasting from 'svn
diff' display of mergeinfo.
* subversion/svn/main.c
(main): Parse "M-N" in each -c range. Account for forward and
reverse ranges, but disallow M < 0, as it is too confusing and I
can't think of a valid use case.
* subversion/svn/log-cmd.c
(svn_cl__log): Don't assume '-c' implies singleton changesets.
* subversion/tests/cmdline/log_tests.py
(log_changes_range): Fix test to use '-' instead of ':'.
(log_changes_complex): New test.
(): Remove XFail from log_changes_range, add log_changes_complex.
Modified:
subversion/trunk/subversion/svn/log-cmd.c
subversion/trunk/subversion/svn/main.c
subversion/trunk/subversion/tests/cmdline/log_tests.py
Modified: subversion/trunk/subversion/svn/log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/log-cmd.c?rev=1004727&r1=1004726&r2=1004727&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/log-cmd.c (original)
+++ subversion/trunk/subversion/svn/log-cmd.c Tue Oct 5 17:28:18 2010
@@ -630,9 +630,9 @@ svn_cl__log(apr_getopt_t *os,
range = APR_ARRAY_IDX(opt_state->revision_ranges, i,
svn_opt_revision_range_t *);
if (range->start.value.number < range->end.value.number)
- range->start = range->end;
+ range->start.value.number++;
else
- range->end = range->start;
+ range->end.value.number++;
}
}
Modified: subversion/trunk/subversion/svn/main.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/main.c?rev=1004727&r1=1004726&r2=1004727&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/main.c (original)
+++ subversion/trunk/subversion/svn/main.c Tue Oct 5 17:28:18 2010
@@ -1410,7 +1410,7 @@ main(int argc, const char *argv[])
for (i = 0; i < change_revs->nelts; i++)
{
char *end;
- svn_revnum_t changeno;
+ svn_revnum_t changeno, changeno_end;
svn_opt_revision_range_t *range;
const char *change_str =
APR_ARRAY_IDX(change_revs, i, const char *);
@@ -1421,7 +1421,22 @@ main(int argc, const char *argv[])
### "{DATE}" and the special words. */
while (*change_str == 'r')
change_str++;
- changeno = strtol(change_str, &end, 10);
+ changeno = changeno_end = strtol(change_str, &end, 10);
+ if (end != change_str && *end == '-')
+ {
+ if (changeno < 0)
+ {
+ err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+ _("Negative number in range (%s)"
+ " not supported with -c"),
+ change_str);
+ return svn_cmdline_handle_exit_error(err, pool, "svn: ");
+ }
+ change_str = end+1;
+ while (*change_str == 'r')
+ change_str++;
+ changeno_end = strtol(change_str, &end, 10);
+ }
if (end == change_str || *end != '\0')
{
err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
@@ -1439,19 +1454,28 @@ main(int argc, const char *argv[])
/* Figure out the range:
-c N -> -r N-1:N
- -c -N -> -r N:N-1 */
- range = apr_palloc(pool, sizeof(*range));
+ -c -N -> -r N:N-1
+ -c M-N -> -r M-1:N for M < N
+ -c M-N -> -r M:N-1 for M > N
+ -c -M-N -> error (too confusing/no valid use case)
+ */
if (changeno > 0)
{
- range->start.value.number = changeno - 1;
- range->end.value.number = changeno;
+ if (changeno < changeno_end)
+ changeno--;
+ else
+ changeno_end--;
}
else
{
changeno = -changeno;
- range->start.value.number = changeno;
- range->end.value.number = changeno - 1;
+ changeno_end = changeno - 1;
}
+
+ range = apr_palloc(pool, sizeof(*range));
+ range->start.value.number = changeno;
+ range->end.value.number = changeno_end;
+
opt_state.used_change_arg = TRUE;
range->start.kind = svn_opt_revision_number;
range->end.kind = svn_opt_revision_number;
Modified: subversion/trunk/subversion/tests/cmdline/log_tests.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/log_tests.py?rev=1004727&r1=1004726&r2=1004727&view=diff
==============================================================================
--- subversion/trunk/subversion/tests/cmdline/log_tests.py (original)
+++ subversion/trunk/subversion/tests/cmdline/log_tests.py Tue Oct 5 17:28:18 2010
@@ -1297,7 +1297,7 @@ def log_changes_range(sbox):
exit_code, output, err = svntest.actions.run_and_verify_svn(None, None, [],
'log', '-c',
- '2:5', repo_url)
+ '2-5', repo_url)
log_chain = parse_log_output(output)
check_log_chain(log_chain, [2, 3, 4, 5])
@@ -1316,6 +1316,19 @@ def log_changes_list(sbox):
log_chain = parse_log_output(output)
check_log_chain(log_chain, [2, 5, 7])
+def log_changes_complex(sbox):
+ "test log -c on complex set of ranges"
+
+ guarantee_repos_and_wc(sbox)
+ repo_url = sbox.repo_url
+
+ exit_code, output, err = svntest.actions.run_and_verify_svn(None, None, [],
+ 'log', '-c',
+ '2,5-3,-8,6-7', repo_url)
+
+ log_chain = parse_log_output(output)
+ check_log_chain(log_chain, [2, 5, 4, 3, 8, 6, 7])
+
#----------------------------------------------------------------------
def only_one_wc_path(sbox):
"svn log of two wc paths is disallowed"
@@ -1760,8 +1773,9 @@ test_list = [ None,
SkipUnless(merge_sensitive_log_added_path,
server_has_mergeinfo),
log_single_change,
- XFail(log_changes_range),
+ log_changes_range,
log_changes_list,
+ log_changes_complex,
only_one_wc_path,
retrieve_revprops,
log_xml_with_bad_data,