I made a new patch available for subversion repository access directly
out of Jabref. Please, have a look at the patches section on the project
web page. It would be really cool, if someone could pick this up and
integrate it into the main development branch. I am willing to help if
you do not get along with the code.
Take care,
Bernd
--
Hi everyone,
I had provided quick and dirty subversion functionality for Jabref in a
previous patch. This is an update now on the code. The diff was
generated against revision 2587. Structure and usability have improved a
lot. In addition, there is rudimentary conflict management available now
using a configurable merging app.
Storage of databases in subversion repositories is particularly useful
for concurrent multiuser access (as e.g. required in research groups).
We have used cvs/subversion for this purpose a lot by wrapping jabref
into shell scripts. Shell scripts are, however, not portable. Therefore,
I started to implement the functionality in Java resulting in the
presented code.
I believe the project has reached a status where inclusion into the main
development branch makes sense. I hope any of the developers is picking
this up. Alternatively, you could grant me write access to the svn
repository and I will do it myself :-)
Current Features
* General framework for implementing access to files in
repositories. Noteworthy, the term repository is to be
interpreted in a very broad sense. Anything can be a repository
as long as it supports the basic actions check out, update,
commit and revert. Implementation is realized via interfaces
Repository and RepositoryFactory.
* Pure Java implementation of access to subversion repositories.
The subversion merging algorithm allows for fairly robust
concurrent multi-user access including powerful version
management. As a side effect, access becomes available from all
over the world via SSH. Rudimentary conflict resolution is
supported by calling a merging application like kdiff3 or
kompare (configurable).
Once subversion repositories have been configured properly (see below) a
submenu “Repositories” will appear in the file menu. A menu item will be
added to the “Check out” submenu that can be used to check out databases
for every repository that has been configured. In addition, the
following commands will become available for manipulation of databases
from repositories.
Commit – Commit changes of the working copy. An update against the head
revision will be performed automatically prior to the actual commit.
Update – Update working copy against head revision in the repository.
Revert - Revert to head revision in the repository. All changes in the
working copy will be lost.
Requirements
* Pure java subversion library SVNkit (http://www.svnkit.com)
* Pure java ssh2 library (http://www.ganymed.ethz.ch/ssh2/)
Both jars have to be present in the trunk/jabref/lib directory.
What's missing
* Conflict management is only rudimentary. Ideally, collaboration
features of jabref would be used to handle conflicts in a smart
way.
* GUI extension for configuration of repositories via the jabref
preferences dialog is still missing.
Configuration
Up to now, GUI configuration via the jabref preferences dialog has not
been implemented. Configuration therefore has to be added manually to
the preferences file. The fields svnTitle, svnUrl, svnFile and
svnWorkingDir (optional) are used for configuration. Fields are
enumerated starting with 0 in order to allow for configuration of
multiple repositories. Entries that are incomplete will be ignored. The
first missing or incomplete entry further stops the search for more
repositories. Configuration of subversion repositories is explained in
the following. Examples of configuration are given in between
explanations.
svnTitle - Title to be displayed for user interaction. The title will be
used e.g. to create a menu item in the "check out" submenu.
<entry key="svnTitle0" value="BPT Literaturdatenbank"/>
svnUrl - URL to the SVN repository. All modes of access are supported.
See SVN documentation for details.
<entry key="svnUrl0" value="svn+ssh://tolpatsch/home/spunky/svn-rep"/>
svnFile - Name of the actual database file within the repository
directory. This is the file to open after check out of a working copy.
Since SVN only supports the check out of whole directories (as specified
by the repository URL) this entry is mandatory.
<entry key="svnFile0" value="Literaturdatenbank.bib"/>
svnWorkingDir - Optional directory for check out of working copies. The
working directory will be left untouched upon termination of jabref. If
this entry is omitted a temporary directory is used instead.
<entry key="svnWorkingDir0" value="~/biolit"/>
svnConflictApp - In addition to repositories, a conflict manager
application may be installed that is called if SVN is unable to merge
database files. The following patterns will be replaced in the command
string:
%1 - Full path of local working copy
%2 - Full path of head revision from repository
%f - Full path of merged copy (target file)
%w - Working directory
<entry key="svnConflictApp" value="kdiff3 %1 %2 -o %f"/>
Details
Lots of comments have been added to the code. Have a look at them if you
want to understand the implementation in detail. Check interfaces
Repository and RepositoryFactory first if you want to implement access
to a new type of repository. Check the following tables for a quick
overview.
New classes or interfaces:
Name
Description
net.sf.jabref.Repository
Interface for access to repositories
net.sf.jabref.RepositoryException
Repository exception thrown to
indicate failure on manipulation of
repositories
net.sf.jabref.RepositoryFactory
Interface to be implemented by
repository factories which are used
to create repository instances of
any kind
net.sf.jabref.RepositoryCollection
Collection of repositories that have
been configured and are provided to
the user
net.sf.jabref.SvnRepository
Implementation of Subversion (SVN)
repository access
net.sf.jabref.SvnRepositoryFactory
Factory implementation for creating
SVN repository instances that have
been configured in jabref
preferences
net.sf.jabref.imports.CheckOutDatabaseAction
The action concerned with checking
out a database from a subversion
repository
Changed classes:
Name
Changes
net.sf.jabref.JabRefFrame
Added submenu and related action
classes for access and manipulation
of files from repositories.
net.sf.jabref.BasePanel
Made BasePanel aware of repositories
net.sf.jabref.imports.OpenDataBaseAction
Access restriction of frame variable
relaxed to protected
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Jabref-devel mailing list
Jabref-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jabref-devel