#!/usr/bin/env python # # iprop_tests.py: testing versioned inherited properties # # Subversion is a tool for revision control. # See http://subversion.apache.org for more information. # # ==================================================================== # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. ###################################################################### # General modules import os # Our testing module import svntest # (abbreviation) Skip = svntest.testcase.Skip_deco SkipUnless = svntest.testcase.SkipUnless_deco XFail = svntest.testcase.XFail_deco Issues = svntest.testcase.Issues_deco Issue = svntest.testcase.Issue_deco Wimp = svntest.testcase.Wimp_deco Item = svntest.wc.StateItem ###################################################################### # Tests #---------------------------------------------------------------------- # Working property inheritance, uniform revision WC. def iprops_basic_working(sbox): "basic inherited working properties" sbox.build() wc_dir = sbox.wc_dir # Paths of note. mu_path = sbox.ospath('A/mu') D_path = sbox.ospath('A/D') psi_path = sbox.ospath('A/D/H/psi') iota_path = sbox.ospath('iota') alpha_path = sbox.ospath('A/B/E/alpha') G_path = sbox.ospath('A/D/G') rho_path = sbox.ospath('A/D/G/rho') sbox.simple_propset('RootProp1', 'Root-Prop-Val1', '.') sbox.simple_propset('RootProp2', 'Root-Prop-Val2', '.') sbox.simple_propset('DirProp2', 'Dir-Prop-Val-Root', '.') sbox.simple_propset('FileProp1', 'File-Prop-Val1', 'iota') sbox.simple_propset('FileProp2', 'File-Prop-Val2', 'A/D/H/psi') sbox.simple_propset('DirProp1', 'Dir-Prop-Val1', 'A/D') sbox.simple_propset('DirProp2', 'Dir-Prop-Val2', 'A/D') sbox.simple_propset('DirProp3', 'Dir-Prop-Val3', 'A/D') sbox.simple_propset('SomeProp', 'Some-Prop-Val1', 'A/D/G') sbox.simple_propset('SomeProp', 'Some-Prop-Val2', 'A/D/G/rho') ### Proplist Directory Targets # Proplist directory target with only explicit props. expected_iprops = {} expected_explicit_props = {'DirProp2' : 'Dir-Prop-Val-Root', 'RootProp1' : 'Root-Prop-Val1', 'RootProp2' : 'Root-Prop-Val2'} svntest.actions.run_and_verify_inherited_prop_xml( wc_dir, expected_iprops, expected_explicit_props) # Proplist directory target with only inherited props. expected_iprops = {wc_dir : {'DirProp2' : 'Dir-Prop-Val-Root', 'RootProp1' : 'Root-Prop-Val1', 'RootProp2' : 'Root-Prop-Val2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( alpha_path, expected_iprops, expected_explicit_props) # Proplist directory target with inherited and explicit props. expected_iprops = {wc_dir : {'RootProp1' : 'Root-Prop-Val1', 'RootProp2' : 'Root-Prop-Val2', 'DirProp2' : 'Dir-Prop-Val-Root'}} expected_explicit_props = {'DirProp1' : 'Dir-Prop-Val1', 'DirProp2' : 'Dir-Prop-Val2', 'DirProp3' : 'Dir-Prop-Val3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props) ### Propget Directory Targets # Propget directory target with only explicit props. expected_iprops = {} expected_explicit_props = {'RootProp2' : 'Root-Prop-Val2'} svntest.actions.run_and_verify_inherited_prop_xml( wc_dir, expected_iprops, expected_explicit_props, 'RootProp2') # Propget directory target with only inherited props. expected_iprops = {wc_dir : {'RootProp2': 'Root-Prop-Val2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( alpha_path, expected_iprops, expected_explicit_props, 'RootProp2') # Propget directory target with inherited and explicit props. expected_iprops = {wc_dir : {'DirProp2' : 'Dir-Prop-Val-Root',}} expected_explicit_props = {'DirProp2' : 'Dir-Prop-Val2'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'DirProp2') ### Propget File Targets # Propget file target with only explicit props. expected_iprops = {} expected_explicit_props = {'FileProp1' : 'File-Prop-Val1'} svntest.actions.run_and_verify_inherited_prop_xml( iota_path, expected_iprops, expected_explicit_props, 'FileProp1') # Propget file target with only inherited props. expected_iprops = {wc_dir : {'RootProp2': 'Root-Prop-Val2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( alpha_path, expected_iprops, expected_explicit_props, 'RootProp2') # Propget file target with inherited and explicit props. expected_iprops = {G_path : {'SomeProp' : 'Some-Prop-Val1',}} expected_explicit_props = {'SomeProp' : 'Some-Prop-Val2'} svntest.actions.run_and_verify_inherited_prop_xml( rho_path, expected_iprops, expected_explicit_props, 'SomeProp') ### Proplist File Targets # Proplist file target with only inherited props. expected_iprops = {wc_dir : {'DirProp2' : 'Dir-Prop-Val-Root', 'RootProp1' : 'Root-Prop-Val1', 'RootProp2' : 'Root-Prop-Val2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( mu_path, expected_iprops, expected_explicit_props) # Proplist file target with inherited and explicit props. expected_iprops = {wc_dir : {'RootProp1' : 'Root-Prop-Val1', 'RootProp2' : 'Root-Prop-Val2', 'DirProp2' : 'Dir-Prop-Val-Root'}, D_path : {'DirProp1' : 'Dir-Prop-Val1', 'DirProp2' : 'Dir-Prop-Val2', 'DirProp3' : 'Dir-Prop-Val3'}} expected_explicit_props = {'FileProp2' : 'File-Prop-Val2'} svntest.actions.run_and_verify_inherited_prop_xml( psi_path, expected_iprops, expected_explicit_props) # Proplist file target with only explicit props. svntest.actions.run_and_verify_svn(None, [], 'revert', wc_dir) expected_iprops = {} expected_explicit_props = {'FileProp1' : 'File-Prop-Val1'} svntest.actions.run_and_verify_inherited_prop_xml( iota_path, expected_iprops, expected_explicit_props) #---------------------------------------------------------------------- # Property inheritance with repository targets. def iprops_basic_repos(sbox): "basic inherited repository properties" sbox.build() wc_dir = sbox.wc_dir # Paths of note. D_path = sbox.ospath('A/D') alpha_path = sbox.ospath('A/B/E/alpha') sbox.simple_propset('FileProp1', 'File-Prop-Val1', 'iota') sbox.simple_propset('FileProp2', 'File-Prop-Val2', 'A/D/H/psi') sbox.simple_propset('SomeProp', 'Some-Prop-Val2', 'A/D/G/rho') svntest.main.run_svn(None, 'commit', '-m', 'Add some file properties', wc_dir) svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) sbox.simple_propset('RootProp1', 'Root-Prop-Val1', '.') sbox.simple_propset('RootProp2', 'Root-Prop-Val2', '.') sbox.simple_propset('DirProp2', 'Dir-Prop-Val-Root', '.') sbox.simple_propset('DirProp1', 'Dir-Prop-Val1', 'A/D') sbox.simple_propset('DirProp2', 'Dir-Prop-Val2', 'A/D') sbox.simple_propset('DirProp3', 'Dir-Prop-Val3', 'A/D') sbox.simple_propset('SomeProp', 'Some-Prop-Val1', 'A/D/G') svntest.main.run_svn(None, 'commit', '-m', 'Add some dir properties', wc_dir) ### Proplist Directory Targets # Proplist directory target with only explicit props. expected_iprops = {} expected_explicit_props = {'DirProp2' : 'Dir-Prop-Val-Root', 'RootProp1' : 'Root-Prop-Val1', 'RootProp2' : 'Root-Prop-Val2'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url, expected_iprops, expected_explicit_props) # Proplist directory target with only inherited props. expected_iprops = {sbox.repo_url : {'DirProp2' : 'Dir-Prop-Val-Root', 'RootProp1' : 'Root-Prop-Val1', 'RootProp2' : 'Root-Prop-Val2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/B/E/alpha', expected_iprops, expected_explicit_props) # Proplist directory target with inherited and explicit props. expected_iprops = {sbox.repo_url : {'RootProp1' : 'Root-Prop-Val1', 'RootProp2' : 'Root-Prop-Val2', 'DirProp2' : 'Dir-Prop-Val-Root'}} expected_explicit_props = {'DirProp1' : 'Dir-Prop-Val1', 'DirProp2' : 'Dir-Prop-Val2', 'DirProp3' : 'Dir-Prop-Val3'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props) ### Propget Directory Targets # Propget directory target with only explicit props. expected_iprops = {} expected_explicit_props = {'RootProp2' : 'Root-Prop-Val2'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url, expected_iprops, expected_explicit_props, 'RootProp2') # Propget directory target with only inherited props. expected_iprops = {sbox.repo_url : {'RootProp2': 'Root-Prop-Val2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/B/E/alpha', expected_iprops, expected_explicit_props, 'RootProp2') # Propget directory target with inherited and explicit props. expected_iprops = {sbox.repo_url : {'DirProp2' : 'Dir-Prop-Val-Root',}} expected_explicit_props = {'DirProp2' : 'Dir-Prop-Val2'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, 'DirProp2') ### Proplist File Targets # Proplist file target with only explicit props. expected_iprops = {} expected_explicit_props = {'FileProp1' : 'File-Prop-Val1'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/iota', expected_iprops, expected_explicit_props, 'FileProp1', 2) # Proplist file target with only inherited props. expected_iprops = {sbox.repo_url : {'RootProp1' : 'Root-Prop-Val1'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/mu', expected_iprops, expected_explicit_props, 'RootProp1') # Proplist file target with inherited and explicit props. expected_iprops = {sbox.repo_url : {'RootProp1' : 'Root-Prop-Val1', 'RootProp2' : 'Root-Prop-Val2', 'DirProp2' : 'Dir-Prop-Val-Root'}, sbox.repo_url + '/A/D' : {'DirProp1' : 'Dir-Prop-Val1', 'DirProp2' : 'Dir-Prop-Val2', 'DirProp3' : 'Dir-Prop-Val3'}} expected_explicit_props = {'FileProp2' : 'File-Prop-Val2'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D/H/psi', expected_iprops, expected_explicit_props) ### Propget File Targets # Propget file target with only explicit props. expected_iprops = {} expected_explicit_props = {'FileProp1' : 'File-Prop-Val1'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/iota', expected_iprops, expected_explicit_props, 'FileProp1', 2) # Propget file target with only inherited props. expected_iprops = {sbox.repo_url : {'RootProp2': 'Root-Prop-Val2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/B/E/alpha', expected_iprops, expected_explicit_props, 'RootProp2') # Propget file target with inherited and explicit props. expected_iprops = {sbox.repo_url + '/A/D/G' : { 'SomeProp' : 'Some-Prop-Val1',}} expected_explicit_props = {'SomeProp' : 'Some-Prop-Val2'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D/G/rho', expected_iprops, expected_explicit_props, 'SomeProp') #---------------------------------------------------------------------- # Property inheritance in a WC with switched subtrees. def iprops_switched_subtrees(sbox): "inherited properties in switched subtrees" sbox.build() wc_dir = sbox.wc_dir # Paths of note. branch2_path = sbox.ospath('branch2') branch2_B_path = sbox.ospath('branch2/B') branch2_lambda_path = sbox.ospath('branch2/B/lambda') # r2-3 - Create two branches svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A', sbox.repo_url + '/branch1', '-m', 'Make branch1') svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A', sbox.repo_url + '/branch2', '-m', 'Make branch2') # Create a root property and two branch properties svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) sbox.simple_propset('Root-Prop-1', 'Root-Prop-Val1', '.') sbox.simple_propset('Branch-Name', 'Feature #1', 'branch1') sbox.simple_propset('Branch-Name', 'Feature #2', 'branch2') # Switch a subtree of branch2 to branch1: svntest.main.run_svn(None, 'switch', sbox.repo_url + '/branch1/B', branch2_B_path) # Check for inherited props on branch2/B/lambda. Since the prop changes # made above have not been committed, there should be none. expected_iprops = {} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( branch2_B_path, expected_iprops, expected_explicit_props) # r4 - Commit the prop changes made above. svntest.main.run_svn(None, 'commit', '-m', 'Add some dir properties', wc_dir) # Again check for inherited props on branch2/B/lambda. And again there # should be none because branch2/B is switched to ^/branch1/B@3. expected_iprops = {} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( branch2_lambda_path, expected_iprops, expected_explicit_props) # Now update the WC, now branch2/B is switched to ^/branch1/B@4 # which does inherit properties from ^/branch1 and ^/. The inherited # properties cache should be updated to reflect this when asking what # properties branch2/B/lambda inherits. svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) expected_iprops = { sbox.repo_url : {'Root-Prop-1' : 'Root-Prop-Val1'}, sbox.repo_url + '/branch1' : {'Branch-Name' : 'Feature #1'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( branch2_lambda_path, expected_iprops, expected_explicit_props) # Now update the WC back to r3, where there are no properties. The # inheritable properties cache for the WC-root at branch2/B should be # cleared and no inheritable properties found for branch2/B/lambda. svntest.actions.run_and_verify_svn(None, [], 'up', '-r3', wc_dir) expected_iprops = {} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( branch2_lambda_path, expected_iprops, expected_explicit_props) # Update back to HEAD=r4 before continuing. svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) # Now unswitch branch2/B and check branch2/B/lambda's inherited props. # Now no iprop cache for branch2/B should exist and branch2/B/lambda # should inherit from branch2 and '.'. svntest.main.run_svn(None, 'switch', sbox.repo_url + '/branch2/B', branch2_B_path) svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) expected_iprops = { ### Working copy parents! ### wc_dir : {'Root-Prop-1' : 'Root-Prop-Val1'}, branch2_path : {'Branch-Name' : 'Feature #2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( branch2_lambda_path, expected_iprops, expected_explicit_props) # Now switch the root of the WC to ^/branch2 and check the inherited # properties on B/lambda. It should inherit the explicit property # on the WC path '.' (i.e. ^/branch2) and the property on the root # of the repos via the inherited props cache. svntest.main.run_svn(None, 'switch', '--ignore-ancestry', sbox.repo_url + '/branch2', wc_dir) expected_iprops = { ### Root if a repos parent ### sbox.repo_url : {'Root-Prop-1' : 'Root-Prop-Val1'}, ### Branch root is a working copy parent ### wc_dir : {'Branch-Name' : 'Feature #2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('B/lambda'), expected_iprops, expected_explicit_props) # Check that switched files have properties cached too. # Switch the root of the WC to ^/A, then switch mu to ^/branch1/mu. svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A', wc_dir) svntest.main.run_svn(None, 'switch', sbox.repo_url + '/branch1/mu', sbox.ospath('mu')) expected_iprops = { sbox.repo_url : {'Root-Prop-1' : 'Root-Prop-Val1'}, sbox.repo_url + '/branch1' : {'Branch-Name' : 'Feature #1'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('mu'), expected_iprops, expected_explicit_props) #---------------------------------------------------------------------- # Property inheritance with pegged wc and repos targets. def iprops_pegged_wc_targets(sbox): "iprops of pegged wc targets at operative revs" sbox.build() wc_dir = sbox.wc_dir # Paths of note. C_path = sbox.ospath('A/C') D_path = sbox.ospath('A/D') G_path = sbox.ospath('A/D/G') alpha_path = sbox.ospath('A/B/E/alpha') replaced_alpha_path = sbox.ospath('A/D/G/E/alpha') # r2 - Set some root properties and a property on A/D, and make an edit # to A/B/E/alpha. sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-set-in-r2', '.') sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-set-in-r2', '.') sbox.simple_propset('D-Prop', 'D-Prop-Val-set-in-r2', 'A/D') svntest.main.file_write(alpha_path, "Edit in r2.\n") svntest.main.run_svn(None, 'commit', '-m', 'Add some properties', wc_dir) # r3 - Change all of the properties. sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-set-in-r3', '.') sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-set-in-r3', '.') sbox.simple_propset('D-Prop', 'D-Prop-Val-set-in-r3', 'A/D') svntest.main.run_svn(None, 'commit', '-m', 'Modify some properties', wc_dir) # Set some working properties. sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-WORKING', '.') sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-WORKING', '.') sbox.simple_propset('D-Prop', 'D-Prop-Val-WORKING', 'A/D') ### Peg Revision = HEAD # Operation | Target | Peg Revision | Operative Revision # proplist | WC | HEAD | unspecified expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'HEAD') # Operation | Target | Peg Revision | Operative Revision # propget | WC | HEAD | unspecified expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | HEAD | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'HEAD', '-r2') # Operation | Target | Peg Revision | Operative Revision # propget | WC | HEAD | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD', '-r2') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | HEAD | COMMITTED expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'HEAD', '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # propget | WC | HEAD | COMMITTED expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD', '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | HEAD | PREV expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'HEAD', '-rPREV') # Operation | Target | Peg Revision | Operative Revision # propget | WC | HEAD | PREV expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD', '-rPREV') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | HEAD | BASE expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'HEAD', '-rBASE') # Operation | Target | Peg Revision | Operative Revision # propget | WC | HEAD | BASE expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD', '-rBASE') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | HEAD | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'HEAD', '-rHEAD') # Operation | Target | Peg Revision | Operative Revision # propget | WC | HEAD | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'HEAD', '-rHEAD') ### Peg Revision = Unspecified # Operation | Target | Peg Revision | Operative Revision # proplist | WC | unspecified | unspecified expected_iprops = { wc_dir : {'RootProp1' : 'Root-Prop-Val-1-WORKING', 'RootProp2' : 'Root-Prop-Val-2-WORKING'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-WORKING'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props) # Operation | Target | Peg Revision | Operative Revision # propget | WC | unspecified | unspecified expected_iprops = { wc_dir : {'RootProp1' : 'Root-Prop-Val-1-WORKING'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | unspecified | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, None, '-r2') # Operation | Target | Peg Revision | Operative Revision # propget | WC | unspecified | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', None, '-r2') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | unspecified | revision=COMMITTED (i.e. r3) expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, None, '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # propget | WC | unspecified | COMMITTED expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', None, '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | unspecified | revision=PREV (i.e. r2) expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, None, '-rPREV') # Operation | Target | Peg Revision | Operative Revision # propget | WC | unspecified | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', None, '-rPREV') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | unspecified | revision=BASE (i.e. r3) expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, None, '-rBASE') # Operation | Target | Peg Revision | Operative Revision # propget | WC | unspecified | revision=BASE (i.e. r3) expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', None, '-rBASE') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | unspecified | revision=HEAD (i.e. r3) expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, None, '-rHEAD') # Operation | Target | Peg Revision | Operative Revision # propget | WC | unspecified | revision=HEAD (i.e. r3) expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', None, '-rHEAD') ### Peg Revision = rN # Operation | Target | Peg Revision | Operative Revision # proplist | WC | revision=1 | unspecified expected_iprops = {} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, '1') # Operation | Target | Peg Revision | Operative Revision # propget | WC | revision=1 | unspecified expected_iprops = {} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', '1') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | revision=1 | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, '1', '-r2') # Operation | Target | Peg Revision | Operative Revision # propget | WC | revision=1 | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', '1', '-r2') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | revision=1 | COMMITTED # The last committed revision for A/D is r3. expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, '1', '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # propget | WC | revision=1 | COMMITTED expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', '1', '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | revision=3 | PREV expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, '3', '-rPREV') # Operation | Target | Peg Revision | Operative Revision # propget | WC | revision=3 | PREV expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', '3', '-rPREV') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | revision=1 | BASE expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, '1', '-rBASE') # Operation | Target | Peg Revision | Operative Revision # propget | WC | revision=1 | BASE expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', '1', '-rBASE') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | revision=2 | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, '2', '-rHEAD') # Operation | Target | Peg Revision | Operative Revision # propget | WC | revision=1 | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', '1', '-rHEAD') ### Peg Revision = PREV # Operation | Target | Peg Revision | Operative Revision # proplist | WC | PREV | unspecified expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'PREV') # Operation | Target | Peg Revision | Operative Revision # propget | WC | PREV | unspecified expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | PREV | revision=3 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'PREV', '-r3') # Operation | Target | Peg Revision | Operative Revision # propget | WC | PREV | revision=3 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV', '-r3') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | PREV | COMMITTED expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'PREV', '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # propget | WC | PREV | COMMITTED expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV', '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | PREV | PREV expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'PREV', '-rPREV') # Operation | Target | Peg Revision | Operative Revision # propget | WC | PREV | PREV expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV', '-rPREV') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | PREV | BASE expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'PREV', '-rBASE') # Operation | Target | Peg Revision | Operative Revision # propget | WC | PREV | BASE expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV', '-rBASE') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | PREV | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3'} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, None, 'PREV', '-rHEAD') # Operation | Target | Peg Revision | Operative Revision # propget | WC | PREV | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( D_path, expected_iprops, expected_explicit_props, 'RootProp1', 'PREV', '-rHEAD') ### Peg Revision = BASE # Replace A/D/G with a copy of ^/A/B. # Check inherited props on base of A/D/G/E/alpha. # Inherited props should always come from the repository parent of # ^/A/B/E/alpha and so should not include the property (working or # otherwise) on A/D. svntest.actions.run_and_verify_svn(None, [], 'delete', G_path) svntest.actions.run_and_verify_svn(None, [], 'copy', sbox.repo_url + '/A/B', G_path) # Operation | Target | Peg Revision | Operative Revision # proplist | WC | BASE | unspecified expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'BASE') # Operation | Target | Peg Revision | Operative Revision # propget | WC | BASE | unspecified expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'BASE') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | BASE | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'BASE', '-r2') # Operation | Target | Peg Revision | Operative Revision # propget | WC | BASE | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'BASE', '-r2') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | BASE | COMMITTED # The most recent change on the copy source, ^/A/B/E/alpha is r2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'BASE', '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # propget | WC | BASE | revision=2 # The most recent change on the copy source, ^/A/B/E/alpha is r2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'BASE', '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | BASE | COMMITTED # The most recent change on the copy source, ^/A/B/E/alpha is r2 # so PREV=r1, but there are no properties at all in r1. expected_iprops = {} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'BASE', '-rPREV') # Operation | Target | Peg Revision | Operative Revision # propget | WC | BASE | COMMITTED # The most recent change on the copy source, ^/A/B/E/alpha is r2 # so PREV=r1, but there are no properties at all in r1. expected_iprops = {} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'BASE', '-rPREV') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | BASE | BASE expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'BASE', '-rBASE') # Operation | Target | Peg Revision | Operative Revision # propget | WC | BASE | BASE expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'BASE', '-rBASE') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | BASE | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'BASE', '-rHEAD') # Operation | Target | Peg Revision | Operative Revision # propget | WC | BASE | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'BASE', '-rHEAD') ### Peg Revision = COMMITTED # Operation | Target | Peg Revision | Operative Revision # proplist | WC | COMMITTED | unspecified # The most recent change on the copy source, ^/A/B/E/alpha is r2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'COMMITTED') # Operation | Target | Peg Revision | Operative Revision # propget | WC | COMMITTED | unspecified # The most recent change on the copy source, ^/A/B/E/alpha is r2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'COMMITTED') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | COMMITTED | revision=3 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'COMMITTED', '-r3') # Operation | Target | Peg Revision | Operative Revision # propget | WC | COMMITTED | revision=3 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'COMMITTED', '-r3') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | COMMITTED | COMMITTED # The most recent change on the copy source, ^/A/B/E/alpha is r2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'COMMITTED', '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # propget | WC | COMMITTED | COMMITTED # The most recent change on the copy source, ^/A/B/E/alpha is r2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'COMMITTED', '-rCOMMITTED') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | COMMITTED | PREV # The most recent change on the copy source, ^/A/B/E/alpha is r2 # so PREV=r1, but there are no properties at all in r1. expected_iprops = {} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'COMMITTED', '-rPREV') # Operation | Target | Peg Revision | Operative Revision # propget | WC | COMMITTED | PREV # The most recent change on the copy source, ^/A/B/E/alpha is r2 # so PREV=r1, but there are no properties at all in r1. expected_iprops = {} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'COMMITTED', '-rPREV') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | COMMITTED | BASE expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'COMMITTED', '-rBASE') # Operation | Target | Peg Revision | Operative Revision # propget | WC | COMMITTED | BASE expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'COMMITTED', '-rBASE') # Operation | Target | Peg Revision | Operative Revision # proplist | WC | COMMITTED | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'COMMITTED', '-rHEAD') # Operation | Target | Peg Revision | Operative Revision # propget | WC | COMMITTED | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'COMMITTED', '-rHEAD') # Revert the replacement with history of A/D/G and once again # replace A/D/G, but this time without history (using and export # of A/B. svntest.actions.run_and_verify_svn(None, [], 'revert', G_path, '-R') svntest.actions.run_and_verify_svn(None, [], 'delete', G_path) svntest.actions.run_and_verify_svn(None, [], 'export', sbox.repo_url + '/A/B', G_path) svntest.actions.run_and_verify_svn(None, [], 'add', G_path) # Set a working prop on a file within the replaced tree, we should *never* # see this property if asking about the # file@[HEAD | PREV | COMMITTED | BASE] sbox.simple_propset('FileProp', 'File-Prop-WORKING-NO-BASE', 'A/D/G/E/alpha') # There is no HEAD, PREV, COMMITTED, or BASE revs for A/D/G/E/alpha in this # case # so be sure requests for such error out or return nothing as per the # existing behavior for proplist and propget sans the --show-inherited-props # option. # # proplist/propget WC-PATH@HEAD svntest.actions.run_and_verify_svn( None, ".*Unknown node kind for '" + sbox.repo_url + "/A/D/G/E/alpha'\n", 'pl', '-v', '--show-inherited-props', replaced_alpha_path + '@HEAD') svntest.actions.run_and_verify_svn( None, ".*'" + sbox.repo_url + "/A/D/G/E/alpha' does not exist in revision 3\n", 'pg', 'RootProp1', '-v', '--show-inherited-props', replaced_alpha_path + '@HEAD') # proplist/propget WC-PATH@PREV svntest.actions.run_and_verify_svn( None, ".*Path '.*alpha' has no committed revision\n", 'pl', '-v', '--show-inherited-props', replaced_alpha_path + '@PREV') svntest.actions.run_and_verify_svn( None, ".*Path '.*alpha' has no committed revision\n", 'pg', 'RootProp1', '-v', '--show-inherited-props', replaced_alpha_path + '@PREV') # proplist/propget WC-PATH@COMMITTED expected_iprops = {} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'COMMITTED') svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'COMMITTED') # proplist/propget WC-PATH@BASE svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, None, 'BASE') svntest.actions.run_and_verify_inherited_prop_xml( replaced_alpha_path, expected_iprops, expected_explicit_props, 'RootProp1', 'BASE') #---------------------------------------------------------------------- # Property inheritance with pegged repos targets at operative revs. def iprops_pegged_url_targets(sbox): "iprops of pegged url targets at operative revs" sbox.build() wc_dir = sbox.wc_dir # r2 - Set some root properties and some properties on A/D. sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-set-in-r2', '.') sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-set-in-r2', '.') sbox.simple_propset('DirProp', 'Dir-Prop-Val-set-in-r2', '.') sbox.simple_propset('DirProp', 'Dir-Prop-Val-set-in-r2-on-D', 'A/D') sbox.simple_propset('D-Prop', 'D-Prop-Val-set-in-r2', 'A/D') svntest.main.run_svn(None, 'commit', '-m', 'Add some properties', wc_dir) # r3 - Make another change to all of the properties set in r2. sbox.simple_propset('RootProp1', 'Root-Prop-Val-1-set-in-r3', '.') sbox.simple_propset('RootProp2', 'Root-Prop-Val-2-set-in-r3', '.') sbox.simple_propset('DirProp', 'Dir-Prop-Val-set-in-r3', '.') sbox.simple_propset('DirProp', 'Dir-Prop-Val-set-in-r3-on-D', 'A/D') sbox.simple_propset('D-Prop', 'D-Prop-Val-set-in-r3', 'A/D') svntest.main.run_svn(None, 'commit', '-m', 'Modify some properties', wc_dir) ### Peg Revision = Unspecified # Operation | Target | Peg Revision | Operative Revision # proplist | URL | unspecified | unspecified expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3', 'DirProp' : 'Dir-Prop-Val-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3', 'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props) # Operation | Target | Peg Revision | Operative Revision # propget | URL | unspecified | unspecified expected_iprops = { sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r3'}} expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, 'DirProp') # Operation | Target | Peg Revision | Operative Revision # proplist | URL | unspecified | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2', 'DirProp' : 'Dir-Prop-Val-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2', 'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None, None, '-r2') # Operation | Target | Peg Revision | Operative Revision # propget | URL | unspecified | revision=2 expected_iprops = { sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r2'}} expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, 'DirProp', None, '-r2') # Operation | Target | Peg Revision | Operative Revision # proplist | URL | unspecified | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3', 'DirProp' : 'Dir-Prop-Val-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3', 'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None, None, '-rHEAD') # Operation | Target | Peg Revision | Operative Revision # propget | URL | unspecified | HEAD expected_iprops = { sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r3'}} expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, 'DirProp', None, '-rHEAD') ### Peg Revision = rN # Operation | Target | Peg Revision | Operative Revision # proplist | URL | revision=2 | unspecified expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2', 'DirProp' : 'Dir-Prop-Val-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2', 'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None, '2') # Operation | Target | Peg Revision | Operative Revision # propget | URL | revision=2 | unspecified expected_iprops = { sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r2'}} expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, 'DirProp', '2') # Operation | Target | Peg Revision | Operative Revision # proplist | URL | revision=2 | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2', 'DirProp' : 'Dir-Prop-Val-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2', 'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None, '2', '-r2') # Operation | Target | Peg Revision | Operative Revision # propget | URL | revision=2 | revision=2 expected_iprops = { sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r2'}} expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, 'DirProp', '2', '-r2') # Operation | Target | Peg Revision | Operative Revision # proplist | URL | revision=2 | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3', 'DirProp' : 'Dir-Prop-Val-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3', 'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None, '2', '-rHEAD') # Operation | Target | Peg Revision | Operative Revision # propget | URL | revision=2 | HEAD expected_iprops = { sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r3'}} expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, 'DirProp', '2', '-rHEAD') ### Peg Revision = HEAD # Operation | Target | Peg Revision | Operative Revision # proplist | URL | HEAD | unspecified expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3', 'DirProp' : 'Dir-Prop-Val-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3', 'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None, 'HEAD') # Operation | Target | Peg Revision | Operative Revision # propget | URL | HEAD | unspecified expected_iprops = { sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r3'}} expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, 'DirProp', 'HEAD') # Operation | Target | Peg Revision | Operative Revision # proplist | URL | HEAD | revision=2 expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r2', 'RootProp2' : 'Root-Prop-Val-2-set-in-r2', 'DirProp' : 'Dir-Prop-Val-set-in-r2'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r2', 'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None, 'HEAD', '-r2') # Operation | Target | Peg Revision | Operative Revision # propget | URL | HEAD | revision=2 expected_iprops = { sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r2'}} expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r2-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, 'DirProp', 'HEAD', '-r2') # Operation | Target | Peg Revision | Operative Revision # proplist | URL | HEAD | HEAD expected_iprops = { sbox.repo_url : {'RootProp1' : 'Root-Prop-Val-1-set-in-r3', 'RootProp2' : 'Root-Prop-Val-2-set-in-r3', 'DirProp' : 'Dir-Prop-Val-set-in-r3'}} expected_explicit_props = {'D-Prop' : 'D-Prop-Val-set-in-r3', 'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, None, 'HEAD', '-rHEAD') # Operation | Target | Peg Revision | Operative Revision # propget | URL | HEAD | HEAD expected_iprops = { sbox.repo_url : {'DirProp' : 'Dir-Prop-Val-set-in-r3'}} expected_explicit_props = {'DirProp' : 'Dir-Prop-Val-set-in-r3-on-D'} svntest.actions.run_and_verify_inherited_prop_xml( sbox.repo_url + '/A/D', expected_iprops, expected_explicit_props, 'DirProp', 'HEAD', '-rHEAD') #---------------------------------------------------------------------- # Inherited property caching during shallow updates. def iprops_shallow_operative_depths(sbox): "iprop caching works with shallow updates" sbox.build() wc_dir = sbox.wc_dir # r2 - Create a branch.. svntest.main.run_svn(None, 'copy', sbox.repo_url + '/A', sbox.repo_url + '/branch1', '-m', 'Make branch1') svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) # r3 - Create a root property and some branch properties sbox.simple_propset('Root-Prop-1', 'Root-Prop-Val1', '.') sbox.simple_propset('Branch-Name', 'Feature #1', 'branch1') sbox.simple_propset('Branch-Name', 'Trunk', 'A') svntest.main.run_svn(None, 'commit', '-m', 'Add some properties', wc_dir) # r4 - Change the root and a branch properties added in r3. sbox.simple_propset('Root-Prop-1', 'Root-Prop-Val1.1', '.') sbox.simple_propset('Branch-Name', 'Feature No. 1', 'branch1') sbox.simple_propset('Branch-Name', 'Trunk Branch', 'A') svntest.main.run_svn(None, 'commit', '-m', 'Change some properties', wc_dir) svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) # Switch the WC to ^/branch1: svntest.main.run_svn(None, 'switch', '--ignore-ancestry', sbox.repo_url + '/branch1', wc_dir) # Switch the B to ^/A/B: svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/B', sbox.ospath('B')) # Switch the mu to ^/A/mu: svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/mu', sbox.ospath('mu')) # Update the whole WC back to r3. svntest.actions.run_and_verify_svn(None, [], 'up', '-r3', wc_dir) # Check the inherited props on B/E within the switched subtree # and the switched file mu. The props should all be inherited # from repository locations and reflect the values at r3. expected_iprops = { sbox.repo_url : {'Root-Prop-1' : 'Root-Prop-Val1'}, sbox.repo_url + '/A' : {'Branch-Name' : 'Trunk'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('B/E'), expected_iprops, expected_explicit_props) svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('mu'), expected_iprops, expected_explicit_props) # Update only the root of the WC (to HEAD=r4) using a shallow update. # Again check the inherited props on B/E. This shouldn't affect the # switched subtree at all, the props it inherits should still reflect # the values at r3. svntest.actions.run_and_verify_svn(None, [], 'up', '--depth=empty', wc_dir) svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('B/E'), expected_iprops, expected_explicit_props) svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('mu'), expected_iprops, expected_explicit_props) # Update the root of the WC (to HEAD=r4) at depth=files. B/E should # still inherit vales from r3, but mu should now inherit props from r4. svntest.actions.run_and_verify_svn(None, [], 'up', '--depth=files', wc_dir) svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('B/E'), expected_iprops, expected_explicit_props) expected_iprops = { sbox.repo_url : {'Root-Prop-1' : 'Root-Prop-Val1.1'}, sbox.repo_url + '/A' : {'Branch-Name' : 'Trunk Branch'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('mu'), expected_iprops, expected_explicit_props) # Update the root of the WC (to HEAD=r4) at depth=immediates. Now both B/E # and mu inherit props from r4. svntest.actions.run_and_verify_svn(None, [], 'up', '--depth=immediates', wc_dir) svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('B/E'), expected_iprops, expected_explicit_props) svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('mu'), expected_iprops, expected_explicit_props) #---------------------------------------------------------------------- # Inherited property caching by directory externals. def iprops_with_directory_externals(sbox): "iprop caching works with directory externals" sbox.build() wc_dir = sbox.wc_dir # Create a second repository with the original greek tree repo_dir = sbox.repo_dir other_repo_dir, other_repo_url = sbox.add_repo_path("other") other_wc_dir = sbox.add_wc_path("other") svntest.main.copy_repos(repo_dir, other_repo_dir, 1, 1) svntest.actions.run_and_verify_svn(None, [], 'co', other_repo_url, other_wc_dir) # Create a root property on the first WC. sbox.simple_propset('Prime-Root-Prop', 'Root-Prop-Val1', '.') svntest.main.run_svn(None, 'commit', '-m', 'Add a root property', wc_dir) # Create a root property on the "other" WC. svntest.actions.run_and_verify_svn(None, [], 'ps', 'Other-Root-Prop', 'Root-Prop-Val-from-other', other_wc_dir) svntest.main.run_svn(None, 'commit', '-m', 'Add a root property', other_wc_dir) # Switch the root of the first WC to a repository non-root, it will # now have cached iprops from the first repos. svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/B', wc_dir, '--ignore-ancestry') # Create an external in the first WC that points to a location in the # "other" WC. sbox.simple_propset('svn:externals', other_repo_url + '/A/D/G X-Other-Repos', 'E') svntest.actions.run_and_verify_svn(None, [], 'ci', '-m', 'Add external point to other WC', wc_dir) svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) # Create an external in the first WC that points to a location in the # same WC. sbox.simple_propset('svn:externals', sbox.repo_url + '/A/D/H X-Same-Repos', 'F') svntest.actions.run_and_verify_svn(None, [], 'ci', '-m', 'Add external pointing to same repos', wc_dir) svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) # Check the properties inherited by the external from the same repository. # It should inherit the props from the root of the same repository. expected_iprops = { sbox.repo_url : {'Prime-Root-Prop' : 'Root-Prop-Val1'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('F/X-Same-Repos'), expected_iprops, expected_explicit_props) # Check the properties inherited by the external from the "other" # repository. It should inherit from the root of the other repos, # despite being located in the first repository's WC. expected_iprops = { other_repo_url : {'Other-Root-Prop' : 'Root-Prop-Val-from-other'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('E/X-Other-Repos'), expected_iprops, expected_explicit_props) #---------------------------------------------------------------------- # Inherited property caching by file externals. def iprops_with_file_externals(sbox): "iprop caching works with file externals" sbox.build() wc_dir = sbox.wc_dir # Create a root property. sbox.simple_propset('Prime-Root-Prop', 'Root-Prop-Val1', '.') svntest.main.run_svn(None, 'commit', '-m', 'Add a root property', wc_dir) # Create a "branch" property on 'A/D'. sbox.simple_propset('Prime-Branch-Prop', 'Branch-Prop-Val1', 'A/D') svntest.main.run_svn(None, 'commit', '-m', 'Add a branch property', wc_dir) # Create two file externals, one pegged to a fixed revision. sbox.simple_propset('svn:externals', sbox.repo_url + '/A/D/H/psi file-external', 'A/B/E') sbox.simple_propset('svn:externals', sbox.repo_url + '/A/D/H/psi@4 file-external-pegged', 'A/B/F') svntest.actions.run_and_verify_svn(None, [], 'ci', '-m', 'Add a file external', wc_dir) svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) # Check the properties inherited by the external files. Both should # inherit the properties from ^/ and ^/A/D. expected_iprops = { sbox.repo_url : {'Prime-Root-Prop' : 'Root-Prop-Val1'}, sbox.repo_url + '/A/D' : {'Prime-Branch-Prop' : 'Branch-Prop-Val1'}} expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('A/B/E/file-external'), expected_iprops, expected_explicit_props) svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('A/B/F/file-external-pegged'), expected_iprops, expected_explicit_props) # Modify the "branch" property on 'A/D'. sbox.simple_propset('Prime-Branch-Prop', 'Branch-Prop-Val2', 'A/D') svntest.main.run_svn(None, 'commit', '-m', 'Add a branch property', wc_dir) # There should be no change in the external file's # inherited properties until... svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('A/B/E/file-external'), expected_iprops, expected_explicit_props) svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('A/B/F/file-external-pegged'), expected_iprops, expected_explicit_props) # ...We update the external: svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir) # The pegged file external's iprops should remain unchanged. svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('A/B/F/file-external-pegged'), expected_iprops, expected_explicit_props) # But the other's should be updated. expected_iprops = { sbox.repo_url : {'Prime-Root-Prop' : 'Root-Prop-Val1'}, sbox.repo_url + '/A/D' : {'Prime-Branch-Prop' : 'Branch-Prop-Val2'}} svntest.actions.run_and_verify_inherited_prop_xml( sbox.ospath('A/B/E/file-external'), expected_iprops, expected_explicit_props) def iprops_survive_commit(sbox): "verify that iprops survive a commit" sbox.build() sbox.simple_propset('key', 'D', 'A/B',) sbox.simple_commit() svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/B/E', sbox.ospath('A/D'), '--ignore-ancestry') svntest.main.run_svn(None, 'switch', sbox.repo_url + '/A/B/F', sbox.ospath('iota'), '--ignore-ancestry') expected_iprops = { sbox.repo_url + '/A/B' : {'key' : 'D'}, } expected_explicit_props = {} svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('A/D'), expected_iprops, expected_explicit_props) svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('iota'), expected_iprops, expected_explicit_props) sbox.simple_propset('new', 'V', 'A/D', 'iota') sbox.simple_commit() expected_explicit_props = {'new': 'V'} svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('A/D'), expected_iprops, expected_explicit_props) svntest.actions.run_and_verify_inherited_prop_xml(sbox.ospath('iota'), expected_iprops, expected_explicit_props) ######################################################################## # Run the tests # list all tests here, starting with None: test_list = [ None, iprops_basic_working, iprops_basic_repos, iprops_switched_subtrees, iprops_pegged_wc_targets, iprops_pegged_url_targets, iprops_shallow_operative_depths, iprops_with_directory_externals, iprops_with_file_externals, iprops_survive_commit, ] if __name__ == '__main__': svntest.main.run_tests(test_list) # NOTREACHED ### End of file.