Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Collects path entries across SVN history (Python)
Python Makefile
branch: master

README.asciidoc

About

svneverever helps you inspect the structure of a SVN repository and the changes made to it over time. Its most common use probably is in combination with svn-all-fast-export (or "KDE’s svn2git" if you wish).

Example

In the following shell session I am first dumping the SVN history of headphone effect library bs2b using rsvndump. (I could pass svn://svn.code.sf.net/p/bs2b/code/ to svneverever directly but it would mean to download all history for each run to svneverever.)

# 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

After dumping the SVN history, I make svneverever show a tree of all directories in there ever ever.

# svneverever --no-progress bs2b_svn_store/
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 very output:

  • That a branch called "libbs2b-config-header" got deleted at revision 76.

  • In which order bs2b plug-ins appeared over time.

  • That tag "libbs2b-2.2.1" was deleted at the same revision that a tag folder "libbs2b" appeared.

Let’s see if that tag was actually moved into that tag subfolder. Yes it was:

# 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).

# svneverever --no-progress --committers bs2b_svn_store/
Analyzing 175 revisions...

 81 (  1; 174)  boris_mikhaylov
 94 (  4; 175)  hartwork

Installation

If your Linux distribution of choice does not come with a package for svneverever yet, you can install svneverever using pip from PyPI

# pip instal svneverever

or from a Git clone:

# git clone https://github.com/hartwork/svneverever.git
# cd svneverever
# python setup.py install

Besides Python, svneverever's only dependency is pysvn.

Usage

# svneverever --help
usage: svneverever [-h] [--version] [--tags] [--branches] [--no-dots]
                   [--no-numbers] [--no-progress] [--depth DEPTH]
                   [--committers] [--flatten]
                   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
  --tags         Show content of tag folders (default: disabled)
  --branches     Show content of branch folders (default: disabled)
  --no-dots      Hide "[..]" omission marker (default: disabled)
  --no-numbers   Hide numbers, e.g. revision ranges (default: disabled)
  --no-progress  Hide progress bar (default: disabled)
  --depth DEPTH  Maximum depth to print (starting at 1)
  --committers   Collect committer names instead of path information (default:
                 disabled)
  --flatten      Flatten tree (default: disabled)
Something went wrong with that request. Please try again.