Skip to content

Backwards-compatibility testing for Subversion 1.5

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

Your email is never published nor shared. Required fields are marked *
*
*