2

由于某种原因,我们无法在某些构建机器中更新 SVN。安装的 svn 版本是 1.3.x。但是 Hudson slave 使用 1.6 创建结帐。这意味着我们不能在这些结账时运行“svn info”:

$ svnversion 
subversion/libsvn_wc/questions.c:110: (apr_err=155021)
svn: This client is too old to work with working copy '.'; please get a newer Subversion client
$ svn info
subversion/libsvn_wc/questions.c:110: (apr_err=155021)
svn: This client is too old to work with working copy '.'; please get a newer Subversion client
$

我的问题是,有没有一种无需调用 svn 二进制文件就可以访问修订号的方法?你知道,比如试图查看 .svn/ 目录?假设结帐使用的是最新的 svn 版本(1.6)。

4

1 回答 1

1

我通过查看 setuptools 源代码 ( setuptools/command/egg_info.py )找到了答案

        entries_file = join(dirname(__file__), '.svn', 'entries')
        assert exists(entries_file), '%s is missing' % entries_file
        with open(entries_file) as f:
            data = f.read()
            # parsing code inherited from setuptools/command/egg_info.py
            if data.startswith('<?xml'):
                localrev = max([int(m.group(1)) for m in revre.finditer(data)]+[0])
            else:
                if data<8:
                    raise Exception, "unrecognized .svn/entries format"

                data = map(str.splitlines,data.split('\n\x0c\n'))
                del data[0][0]  # get rid of the '8' or '9'
                localrev = max([int(d[9]) for d in data if len(d)>9 and d[9]]+[0])
于 2010-03-26T16:05:12.467 回答