Renaming the JavaHL classes and providing compatibility wrappers for
the old classes has allowed us to make some changes in the new
classes, such as dropping deprecated classes and renaming things etc.
I took the opportunity to ask the SVNKit developers if there was
anything more we could do to help them. They provide a pure-Java
implementation of the JavaHL interface and I know they ran into a few
areas in our code where we did things that made this difficult.
They provided me the attached patch and accompanying explanation of
the changes. It all makes sense to me, but I thought I would run it
by the list. A lot of these items, such as creating an interface for
SVNAdmin, are really obvious. Maybe the constructor change will be
more controversial, but I think it reflects what needs to be done if
the JavaHL interface is truly meant to be something that could have
alternate implementations.
Here is there explanation of the changes in the patch:
1. Changed all package local constructors to public ones. This will let
SVNKit keep as much of the SVNKit-code out of the Subversion namespace
as possible. Also, current version is not consistent in that aspect, for
instance Status class constructor is public while Info2 class has
package local one.
2. Added ISVNAdmin interface and made SVNAdmin implement it.
As you know, there are two ways SVNKit could be used:
1. User removes svn-javahl.jar and replaces it with svnkit-javahl.jar.
In this case original JavaHL classes are replaced with SVNKit ones, in
particular SVNClient, SVNAdmin, Path and (in this new version) Version
and NativeResources. This is not preferred way to use SVNKit and I would
talk of it as of a deprecated one. With that approach it is not possible
to switch between implementations without use of a custom class loader.
2. Another, preferred approach, is to work with JavaHL API using its
interfaces (ISVNClient) and only depend on particular implementation
where instance of certain implementation is instantiated.
So, to enable second approach for users who'd like to use SVNAdmin I've
added ISVNAdmin interface and made SVNAdmin class implement it. I also
moved constant and callback interface defined in the SVNAdmin class to
the new ISVNAdmin interface.
3. NativeResources.version field made private and instead
NativeResources.getVersion() method added.
This modification will let SVNKit provide a replacement of
NativeResources class for the "deprecated" approach along with custom
getVersion() method implementation.
Please let me know what you think on my proposal and whether it will be
possible to include this patch into the new version of the API.
--
Thanks
Mark Phippard
http://markphip.blogspot.com/
Received on 2010-02-12 17:15:20 CET