This 'tree-read-api' branch is a feature branch to develop a new API. As a 'feature' branch, it is maintained by periodic 'catch-up' (aka 'sync') merges from trunk, and may one day be reintegrated to trunk. The new API is an abstraction of a generic tree of (probably) versioned nodes -- files, directories and symbolic links, each node optionally having a set of versioned properties. The idea is that client code that reads from a tree can use the same interface to read the WC base as it uses to read revision X in a repository. Some examples of such client functionality are 'list', 'proplist', 'propget' and 'export'. If this works out and can be made efficient, it should enable existing libsvn_client code to be simplified and new client code to be written more easily. Then a more interesting stage: we should be able to write e.g. a 'diff' routine that compares two arbitrary trees, such as r100 in repo A against r100 in repo B, or the unversioned tree '/tmp/saved-tests' against the WC tree 'wc/subversion/tests'. Diffing large unrelated trees byte-by-byte is inherently expensive compared with Subversion's present diff methods, and we might want to consider ways to shortcut the full comparison such as by comparing checksums, but even without optimization, at least such diffs become possible and can be much faster than a manual process. At the time of this writing, the API is in subversion/libsvn_client/tree.h, but I expect to move it. - Julian Foad, October 2011