Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_client/revisions.c view on Meta::CPAN
err = svn_wc__node_get_origin(NULL, revnum, NULL, NULL, NULL, NULL,
wc_ctx, local_abspath, TRUE,
scratch_pool, scratch_pool);
/* Return the same error as older code did (before and at r935091).
At least svn_client_proplist4 promises SVN_ERR_ENTRY_NOT_FOUND. */
if (err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
{
svn_error_clear(err);
return svn_error_createf(SVN_ERR_ENTRY_NOT_FOUND, NULL,
_("'%s' is not under version control"),
svn_dirent_local_style(local_abspath,
scratch_pool));
}
else
SVN_ERR(err);
if (! SVN_IS_VALID_REVNUM(*revnum))
return svn_error_createf(SVN_ERR_CLIENT_BAD_REVISION, NULL,
_("Path '%s' has no committed "
"revision"),
svn_dirent_local_style(local_abspath,
scratch_pool));
}
break;
case svn_opt_revision_committed:
case svn_opt_revision_previous:
{
/* Sanity check. */
if (local_abspath == NULL)
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__node_get_changed_info(revnum, NULL, NULL,
wc_ctx, local_abspath,
scratch_pool, scratch_pool));
if (! SVN_IS_VALID_REVNUM(*revnum))
return svn_error_createf(SVN_ERR_CLIENT_BAD_REVISION, NULL,
_("Path '%s' has no committed "
"revision"),
svn_dirent_local_style(local_abspath,
scratch_pool));
if (revision->kind == svn_opt_revision_previous)
(*revnum)--;
}
break;
case svn_opt_revision_date:
/* ### When revision->kind == svn_opt_revision_date, is there an
### optimization such that we can compare
### revision->value->date with the committed-date in the
### entries file (or rather, with some range of which
### committed-date is one endpoint), and sometimes avoid a
### trip over the RA layer? The only optimizations I can
### think of involve examining other entries to build a
### timespan across which committed-revision is known to be
### the head, but it doesn't seem worth it. -kff */
if (! ra_session)
return svn_error_create(SVN_ERR_CLIENT_RA_ACCESS_REQUIRED, NULL, NULL);
SVN_ERR(svn_ra_get_dated_revision(ra_session, revnum,
revision->value.date, scratch_pool));
break;
default:
return svn_error_createf(SVN_ERR_CLIENT_BAD_REVISION, NULL,
_("Unrecognized revision type requested for "
"'%s'"),
svn_dirent_local_style(local_abspath,
scratch_pool));
}
/* Final check -- if our caller provided a youngest revision, and
the number we wound up with (after talking to the server) is younger
than that revision, we need to stick to our caller's idea of "youngest".
*/
if (youngest_rev
&& (revision->kind == svn_opt_revision_head
|| revision->kind == svn_opt_revision_date)
&& SVN_IS_VALID_REVNUM(*youngest_rev)
&& SVN_IS_VALID_REVNUM(*revnum)
&& (*revnum > *youngest_rev))
*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"));
}
( run in 0.711 second using v1.01-cache-2.11-cpan-524268b4103 )