Tool collecting path entries across SVN history
Project description
About
svneverever helps you inspect the structure of a SVN repository and the changes made to it over time. Its most common use is in combination with svn-all-fast-export (or "KDE's svn2git" if you wish).
Installation
Dependencies
svneverever requires Python 3.6 or higher and PySVN (the one on SourceForge, not the one on PyPI). If you want to install svneverever with pip you need a few additional packages. For Debian/Ubuntu the following should work:
# sudo apt install python3-svn python3-pip
System package manager
Some distributions offer a native package for svneverever:
pip
Install with pip as user to avoid messes with Python system files.
# pip install --user svneverever
From source
# git clone https://github.com/hartwork/svneverever.git
# cd svneverever
# python3 setup.py install --user
# echo 'export PATH="${HOME}/.local/bin:${PATH}"' >> ~/.bashrc
Usage
svneverever needs the "server-side" of the repository with full history. There are two ways to obtain this. Let's take the SVN history of headphone effect library bs2b as an example.
The first way is to directly point svneverever to the server svneverever svn://svn.code.sf.net/p/bs2b/code/
. However this is slow and it puts a lot of stress on the server.
The second, and recommended, method is first downloading the history with rsvndump. For this method we first need to use svnadmin
to create an empty repository and then load the output of rsvndump into it. This can be done in the following way:
# svnadmin create bs2b_svn_store
# time sh -c 'rsvndump svn://svn.code.sf.net/p/bs2b/code/ | svnadmin load bs2b_svn_store/'
[..]
real 2m54.403s
user 0m1.003s
sys 0m1.300s
The output can now be obtained by pointing svneverver to the svn store directory bs2b_svn_store
.
# svneverever --no-progress bs2b_svn_store/
Analyzing the output
The output of the direct method or the rsvndump method will be the same and looks like this:
Analyzing 175 revisions...
( 1; 175) /branches
( 66; 76) /libbs2b-config-header
[..]
( 1; 175) /tags
(109; 175) /description
[..]
( 46; 175) /libbs2b
[..]
( 28; 46) /libbs2b-2.2.1
[..]
( 31; 175) /plugins
[..]
( 1; 175) /trunk
( 80; 175) /description
( 80; 175) /img
( 2; 175) /libbs2b
( 2; 175) /doc
( 2; 80) /img
( 2; 6) /src
( 4; 175) /m4
( 2; 175) /src
( 2; 175) /win32
( 2; 175) /bs2bconvert
( 2; 175) /bs2bstream
( 2; 175) /examples
( 2; 175) /sndfile
( 2; 175) /plugins
( 38; 175) /audacious
( 38; 175) /m4
( 38; 175) /src
( 24; 175) /foobar2000
(143; 175) /ladspa
(144; 175) /m4
(143; 175) /src
( 39; 175) /qmmp
( 2; 175) /vst
( 2; 175) /src
( 2; 175) /resources
( 2; 175) /win32
(117; 175) /winamp
( 2; 175) /xmms
( 12; 175) /m4
( 12; 175) /src
The ranges on the left indicate at what revision folders appeared first and got deleted latest.
You can see a few things in this output:
- That a branch called
libbs2b-config-header
got deleted at revision 76. - In which order plug-ins in
plugins
appeared over time. - That tag
libbs2b-2.2.1
was deleted at the same revision that a tag folderlibbs2b
appeared.
The last item we can verify to see if it was actually moved into that tag subfolder.
# svneverever --no-progress --tags --flatten bs2b_svn_store/ | grep '2.2.1$'
Analyzing 175 revisions...
(110; 175) /tags/description/2.2.1
( 47; 175) /tags/libbs2b/2.2.1
( 28; 46) /tags/libbs2b-2.2.1
Next I have a look at who the committers where, when they joined or left and how many commits the did (though that last number is of limited value). This can help to write an identity map for svn2git.
# svneverever --no-progress --committers bs2b_svn_store/
Analyzing 175 revisions...
81 ( 1; 174) boris_mikhaylov
94 ( 4; 175) hartwork
--help
output
# svneverever --help
usage: svneverever [-h] [--version] [--committers] [--no-numbers]
[--no-progress] [--non-interactive] [--tags] [--branches]
[--no-dots] [--depth DEPTH] [--flatten]
[--unknown-committer NAME]
REPOSITORY
Collects path entries across SVN history
positional arguments:
REPOSITORY Path or URI to SVN repository
optional arguments:
-h, --help show this help message and exit
--version show program's version number and exit
mode selection arguments:
--committers Collect committer names instead of path information
(default: disabled)
common arguments:
--no-numbers Hide numbers, e.g. revision ranges (default: disabled)
--no-progress Hide progress bar (default: disabled)
--non-interactive Will not ask for input (e.g. login credentials) if
required (default: ask if required)
path tree mode arguments:
--tags Show content of tag folders (default: disabled)
--branches Show content of branch folders (default: disabled)
--no-dots Hide "[..]" omission marker (default: disabled)
--depth DEPTH Maximum depth to print (starting at 1)
--flatten Flatten tree (default: disabled)
committer mode arguments:
--unknown-committer NAME
Committer name to use for commits without a proper
svn:author property (default: "<unknown>")
Please report bugs at https://github.com/hartwork/svneverever. Thank you!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for svneverever-1.7.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c2eeca90a95a84db8c27b32bb5e3fd381b74bfd7f9c15e9a3704d803c9b9e2a4 |
|
MD5 | b7231cf813ead014091816d077937ce8 |
|
BLAKE2b-256 | e69a69c67f77cad05ec8a260a31092c2da9a4d394e3d81eae9a6d50c465cf45d |