The Subversion team has been hard at work on version 1.5 for over a year. Subversion 1.5 contains several large features with both client and server components; the most obvious are merge tracking and sparse checkouts. It is important that we ensure that we stick to Subversion’s backwards compatibility guidelines: for example, we need to make sure that:
- the server code to simulate svn co -N from old clients works
- the client code to ignore extra server output from old servers with svn co –depth=files works.
We can test old-client/new-server behavior over ra_svn like so (testing the DAV ra methods is a little more involved):
1.4.x-checkout$ svnserve-trunk -d -r `pwd`/subversion/tests/cmdline &
1.4.x-checkout$ make svncheck
Currently, the 1.4.x branch code passes these tests against the current trunk over all RA backends!
The situation isn’t quite as rosy for new-client/old-server; that’s because the current trunk tests expect the server they are run against to support all trunk features. To make it work at all, you need to explicitly tell the test suite that the server is 1.4.x (among other things, this makes the test suite svnadmin create repositories with the –pre-1.5-compatible option):
trunk-checkout$ svnserve-1.4.x -d -r `pwd`/subversion/tests/cmdline &
trunk-checkout$ make svncheck SERVER_MINOR_VERSION=4
Unfortunately these tests don’t yet all pass; there may be some actual compatibility bugs hidden there, but they also expect features that require a trunk server to work. My next plan for working on Subversion (which is now part of my day job!) is to figure out which failing tests should just be skipped against old servers and tweak the test list to skip them; I’ve already done that for the commit tests which use the new –with-revprop option to commit commands; in the test_list at the bottom, you can see a bunch of lines like:
SkipUnless(mkdir_with_revprop, server_has_revprop_commit),
These use the value of the server minor version specified on the command line to skip tests that shouldn’t work with old servers.
The currently failing tests are:
FAIL: prop_tests.py 7: commit with conflicting dirprops FAIL: log_tests.py 16: test sensitive log on a single revision FAIL: log_tests.py 18: test 'svn log -g' on a non-branching revision FAIL: merge_tests.py 45: target inherits mergeinfo from nearest ancestor FAIL: merge_tests.py 48: merge works when target has copied children FAIL: merge_tests.py 50: merge to path with switched children FAIL: merge_tests.py 52: mergeinfo can have empty rev ranges FAIL: merge_tests.py 66: merge -rold(before rename):head renamed dir FAIL: blame_tests.py 10: test 'svn blame -g' FAIL: blame_tests.py 11: don't look for merged files out of range FAIL: blame_tests.py 13: blame target not in HEAD FAIL: authz_tests.py 10: test authz for aliases FAIL: authz_tests.py 13: authz issue #2712 FAIL: depth_tests.py 4: update depth-empty wc shouldn't receive file mod FAIL: depth_tests.py 5: update depth-immediates wc gets top file mod only FAIL: depth_tests.py 10: bring a dir into a depth-immediates working copy FAIL: depth_tests.py 12: depth-empty working copy ignores a deletion FAIL: depth_tests.py 13: depth-immediates working copy ignores a deletion FAIL: depth_tests.py 15: gradually update an empty wc to depth=infinity FAIL: depth_tests.py 19: diff at various depths in non-infinity wc FAIL: depth_tests.py 21: depth-1 working copy receives a new directory FAIL: depth_tests.py 23: upgrade a depth=empty wc from above
Post a Comment