Paul Burba wrote:

> A while back I started working on a branch[1] to implement inheritable
> properties, ultimately in pursuit of a server dictated config
> solution, as discussed here
> http://svn.haxx.se/dev/archive-2012-02/0207.shtml
> 
> I've finished the generic inherited properties solution I described in
> the wiki found here
> http://wiki.apache.org/subversion/InheritedProperties.

Hi Paul.  That's great.

> Any feedback, review, questions, etc. are appreciated.  If you do want
> to take a look I suggest starting with the wiki.

The main thing I wanted to check is the inheritance in the WC, since I didn't 
understand it when we wrote question-and-answer about it long ago in the Wiki.  
I think diagrams will make it easier.

So I tried it, and this is what I found.  It's simple and it's fine; I have no 
issue with it, I just wanted to reach a clear statement of it.


This example assumes there is a property 'p' which is explicitly set (to 
different values) on the BASE version of every node shown.  Also it is 
explicitly set (that is, modified) to some other different values on the ACTUAL 
version of every node shown.  This table shows all the explicitly set values of 
the property named 'p':

  PATH             BASE PROPVAL    ACTUAL PROPVAL

  wc                 b1              a1
  |
  +-doc              b2              a2
    |
    +-README         b3              a3

Trying it now (with  'wc' as the working directory), I see that the ACTUAL 
properties are inherited from the ACTUAL parent:

$ svn pl -v --show-inherited-props .
Properties on '.':
  p
    a1
$ svn pl -v --show-inherited-props ./doc
Properties inherited from '/home/julianfoad/tmp/svn/inh/wc':
  p
    a1
Properties on 'doc':
  p
    a2
$ svn pl -v --show-inherited-props ./doc/README 
Properties inherited from '/home/julianfoad/tmp/svn/inh/wc':
  p
    a1
Properties inherited from '/home/julianfoad/tmp/svn/inh/wc/doc':
  p
    a2
Properties on 'doc/README':
  p
    a3


and BASE properties are inherited from the BASE parent:

$ svn pl -v -rBASE --show-inherited-props .
Properties on '.':
  p
    b1
$ svn pl -v -rBASE --show-inherited-props ./doc
Properties inherited from 'file:///home/julianfoad/tmp/svn/inh/repo':
  p
    b1
Properties on 'doc':
  p
    b2
$ svn pl -v -rBASE --show-inherited-props ./doc/README 
Properties inherited from 'file:///home/julianfoad/tmp/svn/inh/repo':
  p
    b1
Properties inherited from 'file:///home/julianfoad/tmp/svn/inh/repo/doc':
  p
    b2
Properties on 'doc/README':
  p
    b3


So we can complete the picture with arrows that show which way the properties 
are inherited.

  wc                 b1              a1
  |                    |               |
  |                    v               v
  +-doc              b2              a2
    |                  |               |
    |                  v               v
    +-README         b3              a3

Or, more simply,

  wc                 BASE            ACTUAL
  |                    |               |
  |                    v               v
  +-doc              BASE            ACTUAL
    |                  |               |
    |                  v               v
    +-README         BASE            ACTUAL

And then, adding the info about what happens above the WC root:

parent dir in repo   NODE
|                      | \_____________
|                      v               v
+-wc root dir        BASE            ACTUAL
  |                    |               |
  |                    v               v
  +-doc              BASE            ACTUAL
    |                  |               |
    |                  v               v
    +-README         BASE            ACTUAL


(If at this point you're wondering what other picture I could possibly have 
imagined, your "principle: Inheritance within the WC is within the actual tree" 
made me wonder if you meant something like this:

  wc                 b1              a1
  |                    _____________/ |
  |                   v               v
  +-doc              b2              a2
    |                  _____________/ |
    |                 v               v
    +-README         b3              a3

since I consider BASE nodes as well as ACTUAL nodes to be within the WC.)


So I think that's settled and we can delete my notes from the Wiki "WC 
Inheritance Rules" section if you agree.

- Julian

Reply via email to