跳转到主要内容

工具收集SVN历史记录中的路径条目

项目描述

pre-commit

关于

svneverever 帮助您检查SVN仓库的结构以及随时间对其所做的更改。它最常用的用途是与 svn-all-fast-export(或“KDE的svn2git”)结合使用。

安装

依赖关系

svneverever 需要 Python 3.7 或更高版本和 PySVN(SourceForge上的,而不是PyPI上的)。如果您想使用 pip 安装 svneverever,则需要一些额外的包。对于 Debian/Ubuntu,以下应该可行

# sudo apt install python3-svn python3-pip

系统包管理器

一些发行版svneverever 提供了本地包

pip

以用户身份安装pip以避免与Python系统文件混淆。

# pip install --user svneverever

从源代码安装

# git clone https://github.com/hartwork/svneverever.git
# cd svneverever
# python3 setup.py install --user
# echo 'export PATH="${HOME}/.local/bin:${PATH}"' >> ~/.bashrc

用法

svneverever 需要包含完整历史的“服务器端”仓库。有两种方法可以获得这种。以 耳机效果库bs2b 的SVN历史记录为例。

第一种方法是将 svneverever 直接指向服务器 svneverever svn://svn.code.sf.net/p/bs2b/code/。然而,这种方法速度较慢,会对服务器造成很大压力,多次运行可能不太有趣。

第二种也是推荐的方法是首先使用 svnrdump dump(随 Subversion >=1.7 一起提供)或 rsvndump(具有略不同的功能集并支持 Subversion 的较旧版本)。对于这种方法,我们首先需要使用 svnadmin 创建一个空的仓库,然后将 svnrdump/rsvndump 的输出加载到其中。可以按照以下方式操作

使用 svnrdump dump

# svnadmin create bs2b_svn_store

# time sh -c 'svnrdump dump svn://svn.code.sf.net/p/bs2b/code/ | svnadmin load bs2b_svn_store/'
[..]
real    0m3.008s
user    0m0.309s
sys     0m0.235s

使用 rsvndump

# 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

现在可以通过将 svneverever 指向 svn 存储目录 bs2b_svn_store 来获取输出。

# svneverever --no-progress bs2b_svn_store/

分析输出

直接方法或 rsvndump 方法的输出将相同,如下所示

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

左侧的范围表示文件夹首次出现和最后删除的修订版本。

您可以从输出中看到一些内容

  • 名为 libbs2b-config-header 的分支在修订版本 76 被删除。
  • plugins 中插件随时间出现的顺序。
  • 标签 libbs2b-2.2.1 在与标签文件夹 libbs2b 出现相同的修订版本中被删除。

最后一个我们可以验证的项目是它是否确实被移动到那个标签子文件夹。

# 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

接下来,我查看提交者是谁,他们何时加入或离开,以及他们提交了多少次(尽管最后一个数字的价值有限)。这有助于为 svn2git 编写身份映射。

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

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

--help 输出

# 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!

项目详情


下载文件

下载适合您平台文件的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分发

svneverever-1.7.2.tar.gz (12.9 kB 查看散列)

上传时间

构建分发

svneverever-1.7.2-py3-none-any.whl (9.1 kB 查看散列)

上传时间 Python 3

支持者