[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: svn commit: r1470904 - /subversion/trunk/subversion/libsvn_wc/wc-metadata.sql

From: Paul Burba <ptburba_at_gmail.com>
Date: Thu, 25 Apr 2013 11:58:40 -0400

On Wed, Apr 24, 2013 at 6:34 PM, Bert Huijben <bert_at_qqmail.nl> wrote:
>
>
>> -----Original Message-----
>> From: Bert Huijben [mailto:bert_at_qqmail.nl]
>> Sent: donderdag 25 april 2013 00:14
>> To: 'Paul Burba'; 'Subversion Development'
>> Subject: RE: svn commit: r1470904 -
>> /subversion/trunk/subversion/libsvn_wc/wc-metadata.sql
>
>> > > Which ultimately causes libsvn_wc/upgrade:bump_to_31() to create an
>> > > INHERITED_PROPS cache for the WC root, albeit and empty one.
>> > >
>> > > The tweak I suggest above avoids the root from being selected:
>> > >
>> > > SELECT l.wc_id, l.local_relpath FROM nodes as l
>> > > LEFT OUTER JOIN nodes as r
>> > > ON l.wc_id = r.wc_id
>> > > AND r.local_relpath = l.parent_relpath
>> > > AND r.op_depth = 0 AND l.op_depth = 0
>> > > AND l.repos_path != ''
>> >
>> > ^^^
>> > This line should have that same effect?
>> > (Moved from the where to the join to have it apply to all the or clauses
>> > without having to duplicate it 3 times)
>> >
>> > Are you sure that you have that line in your testcase.
>>
>> Tested this query and indeed it shows this problem.
>>
>> The op-depth checks on the line above it should also be moved to the where
>> part for all three cases.
>
> I tweaked the query further in r1471744.

Hi Bert,

Unfortunately that change is actually worse, because it doesn't catch
the case where the root of the WC *doesn't* point to the root of the
repos (and hence requires an INHERITED_PROPS cache). This breaks the
inherited properties feature.

For example, we checkout some repository subtree with a 1.7 client"

1.7.10-dev>svn co
file:///C:/SVN/src-branch-1.7.x/Debug/subversion/tests/cmdline/svn-test-work/repositories/merge_tests-101/A/B
wc-non-root
A wc-non-root\lambda
A wc-non-root\E
A wc-non-root\E\beta
A wc-non-root\E\alpha
A wc-non-root\F
Checked out revision 9.

1.7.10-dev>cd wc-non-root

# Note that svn:auto-props is set on the root of the repository:

1.7.10-dev>svn pg svn:auto-props ^^/
*.c = svn:eol-style=native

# But your latest query doesn't select the wc root:

SELECT l.wc_id, l.local_relpath FROM nodes as l
LEFT OUTER JOIN nodes as r
ON l.wc_id = r.wc_id
   AND r.local_relpath = l.parent_relpath
WHERE l.op_depth = 0 AND r.op_depth = 0
  AND l.repos_path != ''
  AND ((l.repos_id IS NOT r.repos_id)
       OR (l.repos_path IS NOT (CASE WHEN (r.local_relpath) = '' THEN
(CASE WHEN (r.repos_path) = '' THEN (l.local_relpath) WHEN
(l.local_relpath) = '' THEN (r.repos_path) ELSE (r.repos_path) || '/'
|| (l.local_relpath) END) WHEN (r.repos_path) = '' THEN (CASE WHEN
(r.local_relpath) = '' THEN (l.local_relpath) WHEN
SUBSTR((l.local_relpath), 1, LENGTH(r.local_relpath)) =
(r.local_relpath) THEN CASE WHEN LENGTH(r.local_relpath) =
LENGTH(l.local_relpath) THEN '' WHEN SUBSTR((l.local_relpath),
LENGTH(r.local_relpath)+1, 1) = '/' THEN SUBSTR((l.local_relpath),
LENGTH(r.local_relpath)+2) END END) WHEN SUBSTR((l.local_relpath), 1,
LENGTH(r.local_relpath)) = (r.local_relpath) THEN CASE WHEN
LENGTH(r.local_relpath) = LENGTH(l.local_relpath) THEN (r.repos_path)
WHEN SUBSTR((l.local_relpath), LENGTH(r.local_relpath)+1, 1) = '/'
THEN (r.repos_path) || SUBSTR((l.local_relpath),
LENGTH(r.local_relpath)+1) END END)))

#
-

0 row(s) affected in 0.001066 second(s).

# Which means that when we upgrade with a 1.8/1.9-dev client, that
there is no inherited property cache on the WC root and thus
disconnected inheritance no longer works:

1.9.0-dev_at_1475809>cd wc-non-root

1.9.0-dev_at_1475809>svn st
..\..\..\subversion\svn\svn.c:2899: (apr_err=SVN_ERR_WC_UPGRADE_REQUIRED)
svn: E155036: Please see the 'svn upgrade' command
..\..\..\subversion\svn\status-cmd.c:352,
..\..\..\subversion\svn\util.c:621,
..\..\..\subversion\libsvn_client\status.c:590,
..\..\..\subversion\libsvn_wc\status.c:2817,
..\..\..\subversion\libsvn_wc\status.c:2723,
..\..\..\subversion\libsvn_wc\status.c:270,
..\..\..\subversion\libsvn_wc\wc_db.c:8446,
..\..\..\subversion\libsvn_wc\wc_db_wcroot.c:687,
..\..\..\subversion\libsvn_wc\wc_db_wcroot.c:317:
(apr_err=SVN_ERR_WC_UPGRADE_REQUIRED)
svn: E155036: The working copy at
'C:\SVN\src-branch-1.7.x\Debug\subversion\tests\cmdline\svn-test-work\working_copies\wc-non-root'
is too old (format 29) to work with client version '1.9.0-dev (under
development)' (expects format 31). You need to upgrade the working
copy first.

1.9.0-dev_at_1475809>svn upgrade

1.9.0-dev_at_1475809>svn pg svn:auto-props -v ^^/
Properties on 'file:///C:/SVN/src-branch-1.7.x/Debug/subversion/tests/cmdline/svn-test-work/repositories/merge_tests-101':
  svn:auto-props
    *.c = svn:eol-style=native

1.9.0-dev_at_1475809>svn pg svn:auto-props ^^/
*.c = svn:eol-style=native

# We expect the repos root property to show up here!

1.9.0-dev_at_1475809>svn pg svn:auto-props . --show-inherited-props

1.9.0-dev_at_1475809>

# Analogous to this:

1.9.0-dev_at_1475809>svn pg svn:auto-props --show-inherited-props ^^/A/B_at_9
file:///C:/SVN/src-branch-1.7.x/Debug/subversion/tests/cmdline/svn-test-work/repositories/merge_tests-101
- *.c = svn:eol-style=native

Just looking at this part of your query:

SELECT l.wc_id, l.local_relpath FROM nodes as l
LEFT OUTER JOIN nodes as r
ON l.wc_id = r.wc_id
   AND r.local_relpath = l.parent_relpath
WHERE l.op_depth = 0 AND r.op_depth = 0

It will *never* select the root of any WC because l.parent_relpath for
the WC root is NULL right?

--
Paul T. Burba
CollabNet, Inc. -- www.collab.net -- Enterprise Cloud Development
Skype: ptburba
> The 'IS NOT' expression in the new query is similar to '!=' but returns TRUE when one side is NULL, while '!=' would return NULL if either or both sides are NULL which evaluated to false in this query.
>
>>
>>       Bert
Received on 2013-04-25 17:59:11 CEST

This is an archived mail posted to the Subversion Dev mailing list.