> -----Original Message-----
> From: Stefan Sperling [mailto:s...@elego.de]
> Sent: vrijdag 6 december 2013 12:25
> To: dev@subversion.apache.org
> Subject: Re: svn commit: r1548214 - in /subversion/trunk/subversion:
> libsvn_wc/externals.c libsvn_wc/update_editor.c libsvn_wc/wc-queries.sql
> libsvn_wc/wc_db.c libsvn_wc/wc_db.h libsvn_wc/wc_db_update_move.c
> tests/libsvn_wc/op-depth-test.c
> 
> On Thu, Dec 05, 2013 at 05:36:58PM -0000, rhuij...@apache.org wrote:
> > Author: rhuijben
> > Date: Thu Dec  5 17:36:57 2013
> > New Revision: 1548214
> >
> > URL: http://svn.apache.org/r1548214
> > Log:
> > Apply some minor preparing and correctness changes for the move logic in
> > libsvn_wc.
> >
> > This patch adds support for telling the wc_db revision bump whether an
> actual
> > update was performed. With this knowledge a lot of move handling logic
> can
> > be simplified for the generic case in future patches.
> >
> > Some parts of this patch are to make sure some move behavior patches I
> have
> > kept local for some time don't have to keep in sync with more files than
> > necessary.
> 
> > * subversion/libsvn_wc/wc_db_update_move.c
> >   (replace_moved_layer): Properly extend parent delete.
> 
> Hi Bert,
> 
> Can you please explain why the strlen() check is the right thing
> to do here? The log message doesn't make this clear, and there
> is no code comment either. It looks rather odd.

It is a check if dst_cp_relpath is the root node or any of its descendants.
The root of a move can never be shadowed (as the maximum op_depth of a node
is its own op depth... which is the move)

A string comparision is quite heavy if we really only need this check. (The
db query already assures that there will only be nodes at or below
dst_relpath)

        Bert

> 
> > @@ -1643,6 +1644,11 @@ replace_moved_layer(const char *src_relp
> >                                                      scratch_pool));
> >        if (!err)
> >          err = svn_sqlite__step_done(stmt2);
> > +
> > +      if (!err && strlen(dst_cp_relpath) > strlen(dst_relpath))
> > +        err = svn_wc__db_extend_parent_delete(wcroot, dst_cp_relpath,
> kind,
> > +                                              dst_op_depth,
scratch_pool);
> > +
> >        if (err)
> >          return svn_error_compose_create(err, svn_sqlite__reset(stmt));
> >
> >

Reply via email to