On 05/30/2011 07:52 AM, Avalon wrote:
> Could someone of the devs please take a closer look?
> I am willing to improve the patch based on concrete suggestions.
[...]
Sure thing. I can see where you're going with the patch. I haven't taken
the time to fully consider the appropriate, so consider the following a
syntactical patch review only.
> Index: log.c
> ===================================================================
> --- log.c (revision 1129130)
> +++ log.c (working copy)
> @@ -41,7 +41,6 @@
> #include "svn_private_config.h"
> #include "private/svn_wc_private.h"
>
> -^L
Please don't remove our page breaks.
> /*** Getting misc. information ***/
>
> /* The baton for use with copyfrom_info_receiver(). */
> @@ -261,7 +260,43 @@
> return rb->receiver(rb->baton, log_entry, pool);
> }
>
> -^L
Here, too.
> +svn_error_t *
> +svn_client__check_for_deleted_rev(svn_ra_session_t *ra_session,
[...]
This function is file-private, so should be "static" and not use the
"svn_client__" naming prefix. check_for_deleted_rev() would serve just fine
as a name.
> + SVN_ERR(svn_ra_get_session_url(ra_session,
> + &session_url,
> + pool));
> +
> + SVN_ERR(svn_client__path_relative_to_root(&rel_path,
> + ctx->wc_ctx,
> + url_or_path,
> + session_url,
> + FALSE,
> + ra_session,
> + pool,
> + pool));
> +
> + SVN_ERR(svn_ra_get_deleted_rev(ra_session,
> + rel_path,
> + peg_rev.value.number,
> + end_revnum,
> + revision_deleted,
> + pool));
peg_rev isn't guaranteed to have a valid ".value.number" component, yet you
unconditionally reference it. That field is only populated if the revision
is of type svn_opt_revision_number, and my testing of your patch this was
not always the case. (It was svn_opt_revision_working in my scenario.)
> @@ -481,11 +518,46 @@
> else
> ra_target = url_or_path;
>
> - SVN_ERR(svn_client__ra_session_from_path(&ra_session, &ignored_revnum,
> + err = svn_client__ra_session_from_path(&ra_session, &ignored_revnum,
> &actual_url, ra_target, NULL,
> &peg_rev, &session_opt_rev,
> - ctx, pool));
> + ctx, pool);
Need to correct the indentation here.
> + if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND && session_opt_rev.value.number > peg_rev.value.number)
> + {
> + svn_revnum_t revision_deleted = SVN_INVALID_REVNUM;
> + svn_ra_session_t *tmp_session;
> +
> + SVN_ERR(svn_client__open_ra_session_internal(&tmp_session, NULL,
> + ra_target, NULL,
> + NULL, FALSE, TRUE,
> + ctx, pool));
> +
> + SVN_ERR(svn_client__check_for_deleted_rev(tmp_session,
> + url_or_path,
> + peg_rev,
> + session_opt_rev.value.number,
> + &revision_deleted,
> + ctx,
> + pool));
> +
> + if (revision_deleted != SVN_INVALID_REVNUM && revision_deleted != SVN_ERR_CLIENT_BAD_REVISION)
> + {
> + svn_opt_revision_t session_mod_rev;
> +
> + svn_error_clear(err);
> +
> + session_mod_rev.kind = svn_opt_revision_number;
> + session_mod_rev.value.number = revision_deleted - 1;
> +
> + err = svn_client__ra_session_from_path(&ra_session, &ignored_revnum,
> + &actual_url, ra_target, NULL,
> + &peg_rev, &session_mod_rev,
> + ctx, pool);
> + }
This section needs to cleanup the tmp_session as soon as it's no longer
needed. We tend to do this by creating a subpool (called "sesspool", for
kicks), opening the temporary RA session in that pool, and then destroying
that pool as soon as we no longer need the session.
> @@ -603,6 +676,22 @@
> passed_receiver_baton = &lb;
> }
>
> + if (end_revnum > peg_rev.value.number)
> + {
> + SVN_ERR(svn_client__check_for_deleted_rev(ra_session,
> + url_or_path,
> + peg_rev,
> + end_revnum,
> + &revision_deleted,
> + ctx,
> + pool));
> + }
> +
> + if (revision_deleted != SVN_INVALID_REVNUM && revision_deleted != SVN_ERR_CLIENT_BAD_REVISION)
> + {
> + end_revnum = revision_deleted - 1;
> + }
> +
SVN_ERR_CLIENT_BAD_REVISION is not a valid identifier for an svn_revnum_t,
so the "revision_deleted != SVN_ERR_CLIENT_BAD_REVISION" check is bogus.
Finally, patches are best sent to the mailing list with a "[PATCH] "
Subject: line prefix *and* a valid log message.
--
C. Michael Pilato <cmpilato_at_collab.net>
CollabNet <> www.collab.net <> Distributed Development On Demand
Received on 2011-05-31 19:18:56 CEST