bionic (1) repocutter.1.gz

Provided by: reposurgeon_3.42-2ubuntu1_amd64 bug

NAME

       repocutter - surgical and filtering operations on Subversion dump files

SYNOPSIS

       repocutter [-q] [-r selection] subcommand

DESCRIPTION

       This program does surgical and filtering operations on Subversion dump files. While it is is not as
       flexible as reposurgeon(1), it can perform Subversion-specific transformations that reposurgeon cannot,
       and can be useful for processing Subversion repositories into a form suitable for conversion.

       (As a matter of possible historical interest, the reason for the partial functional overlap between
       repocutter and reposurgeon is that repocutter was first written earlier and became a testbed for some of
       the design concepts in reposurgeon. After reposurgeon was written, the author learned that it could not
       naturally support some useful operations very specific to Subversion, and enhanced repocutter to do
       those.)

       In all commands, the -r (or --range) option limits the selection of revisions over which an operation
       will be performed. A selection consists of one or more comma-separated ranges. A range may consist of an
       integer revision number or the special name HEAD for the head revision. Or it may be a colon-separated
       pair of integers, or an integer followed by a colon followed by HEAD.

       Normally, each subcommand produces a progress spinner on standard error; each turn means another revision
       has been filtered. The -q (or --quiet) option suppresses this.

       Generally, if you need to use this program at all, you will find that you need to pipe your dump file
       through multiple instances of it doing one kind of operation each. This is not as expensive as it sounds;
       with the exception of the reduce subcommand, the working set of this program is bounded by the size of
       the largest commit metadata item. It does not need to hold the entire repo metadata in memory.

       The following subcommands are available:

       help
           Without arguments, list available commands. With a command-name argument, show detailed help for that
           subcommand.

       select
           The 'select' subcommand selects a range and permits only revisions in that range to pass to standard
           output. A range beginning with 0 includes the dumpfile header.

       propset
           Set a property to a value. May be restricted by a revision selection. You may specify multiple
           property settings. See the embedded help for syntax details.

       propdel
           Delete the named property. May be restricted by a revision selection. You may specify multiple
           properties to be deleted. See the embedded help for syntax details.

       proprename
           Rename a property. May be restricted by a revision selection. You may specify multiple properties to
           be renamed. See the embedded help for syntax details.

       log
           enerate a log report, same format as the output of svn log on a repository, to standard output.

       setlog
           Replace the log entries in the input dumpfile with the corresponding entries in a specified file,
           which should be in the format of an svn log output. Replacements may be restricted to a specified
           range. See the embedded help for syntax details.

       squash
           The 'squash' subcommand merges adjacent commits that have the same author and log text and were made
           within 5 minutes of each other. This can be helpful in cleaning up after migrations from
           file-oriented revision control systems, or if a developer has been using a pre-2006 version of Emacs
           VC. See the embedded help for syntax details.

       strip
           Replace content with unique generated cookies on all node paths matching the specified regular
           expressions; if no expressions are given, match all paths. Useful when you need to examine a
           particularly complex node structure.

       expunge
           Delete all operations with Node-path headers matching specified Python regular expressions. Any
           revision left with no Node records after this filtering has its Revision record removed as well.

       pathrename
           Modify Node-path and Node-copyfrom-path headers matching a specified Python regular expression;
           replace with a given string. The string may contain Python backreferences to parenthesized portions
           of the pattern. See the embedded help for syntax details.

       renumber
           Renumber all revisions, patching Node-copyfrom headers as required. Any selection option is ignored.
           Takes no arguments.

       reduce
           Strip revisions out of a dump so the only parts left those likely to be relevant to a conversion
           problem. See the embedded help for syntax details and the relevance filter.

HISTORY

       Under the name “snvcutter”, an ancestor of this program traveled in the contrib/ director of the
       Subversion distribution. It had functional overlap with reposurgeon(1) because it was directly ancestral
       to that code. It was moved to the reposurgeon(1) distribution in January 2016.

SEE ALSO

       reposurgeon(1).

EXAMPLE

       Suppose you have a Subversion repository with the following semi-pathological structure:

           Directory1/ (with unrelated content)
           Directory2/ (with unrelated content)
           TheDirIWantToMigrate/
                           branches/
                                          crazy-feature/
                                                          UnrelatedApp1/
                                                          TheAppIWantToMigrate/
                           tags/
                                          v1.001/
                                                          UnrelatedApp1/
                                                          UnrelatedApp2/
                                                          TheAppIWantToMigrate/
                           trunk/
                                          UnrelatedApp1/
                                          UnrelatedApp2/
                                          TheAppIWantToMigrate/

       You want to transform the dump file so that TheAppIWantToMigrate can be subject to a regular branchy
       lift. A way to dissect out the code of interest would be with the following series of filters applied:

           repocutter expunge '^Directory1' '^Directory2'
           repocutter pathrename '^TheDirIWantToMigrate/' ''
           repocutter expunge '^branches/crazy-feature/UnrelatedApp1/
           repocutter pathrename 'branches/crazy-feature/TheAppIWantToMigrate/' 'branches/crazy-feature/'
           repocutter expunge '^tags/v1.001/UnrelatedApp1/'
           repocutter expunge '^tags/v1.001/UnrelatedApp2/'
           repocutter pathrename '^tags/v1.001/TheAppIWantToMigrate/' 'tags/v1.001/'
           repocutter expunge '^trunk/UnrelatedApp1/'
           repocutter expunge '^trunk/UnrelatedApp2/'
           repocutter pathrename '^trunk/TheAppIWantToMigrate/' 'trunk/'

AUTHOR

       Eric S. Raymond <esr@thyrsus.com>. This tool is distributed with reposurgeon; see the project page at
       http://www.catb.org/~esr/reposurgeon.