These are the changes in plan to introduce in PyBaz. There is a lot of cruft and crack in this code base, so many disruptive changes will be necessary to clean up the mess. If you are unhappy with these changes because they will make your life harder or because you think they are just more crack, please notify me and I'll try to find a solution to make you happy. David Allouche ddaa in #arch on irc.freenode.net * Plans for PyBaz 1.3 - Remove deprecations present in 1.1 All functions, methods and properties marked as deprecated in PyBaz 1.1 will be removed in PyBaz 1.3. - Deprecate SourceTree SourceTree is used as a (quite useless) abstract base class for all source tree classes, and a factory that magically instanciate WorkingTree, LibraryTree or ForeignTree instance. The magic factory behaviour will be deprecated. - Deprecate ForeignTree and LibraryTree Theses classes serve no useful purpose. - New type testing features for source trees New properties will be introduced to provide a transition path before the simplification of the source tree hierarchy. ArchSourceTree.is_reference_tree: True if the tree is a pristine or a revision library entry and cannot be used to create WorkingTree. False if the tree may be modified. pybaz.is_tree_root(dirname): True if dirname is the root of an Arch source tree and may be used to create an ArchSourceTree or WorkingTree. - Deprecate ArchSourceTree.inventory In favour of the iter_inventory method. - Deprecate ArchSourceTree.get_tree_version() - Deprecate WorkingTree.set_tree_version(V) In favour of the tree_version property. - Deprecate ArchSourceTree.get_tagging_method() - Deprecate WorkingTree.set_tagging_method() In favour of the tagging_method property. - Deprecate ArchSourceTree.get_tree() Obscure legacy function. - WorkingTree.add_log_version() This method serves no use case. The log-version should be create on import when necessary. In all other cases, log versions are already created as needed, and empty log versions are useless. - WorkingTree.add_pristine() This is generally immediately followed by find_pristine. The functionality will be folded into find_pristine with a create=True keyword argument. - Revision.library_add() This is generally immediately followed by library_find. The functionality will be folded into library_find with a create=True keyword argument. - Deprecate methods inherited from DirName in SourceTree and Changeset SourceTree and Changeset should have a "has a" (inclusion) relationship to DirName, instead of a "is a" (derivation) relationship. All methods inherited from DirName will emit deprecation warnings. A new "path" property will give the associated DirName instance. - Redesign the output parsing subsystem It is expected that baz incremental output will change in such a way as to require a major redesign of the output parsing classes. In any case, the current design relies on the client to use "isinstance" to classify the various output lines. That is bad design. - Redesign NameParser The NameParser interface is awkyard and broken. It shoud also undergo many deprecations to become more convenient and more consistent with other classes. * Plans for PyBaz 1.4 - Remove SourceTree, ForeignTree and LibraryTree - Remove methods deprecated in PyBaz 1.3 - Remove subclass relationship between DirName, SourceTree and Changeset That will break code that relies on the fact that SourceTree and Changeset instances are also instances of str, but there is no way to provide a deprecation path.