如果可能的话,在 pysvn 中运行 svn update 时,我如何获取有关已添加、删除、更新等文件的信息?我想将此信息写入日志文件。
问问题
4461 次
3 回答
2
您可以保存原始和更新的修订,然后使用 diff_summarize 获取更新的文件。(见pysvn 程序员参考)
这是一个例子:
import time
import pysvn
work_path = '.'
client = pysvn.Client()
entry = client.info(work_path)
old_rev = entry.revision.number
revs = client.update(work_path)
new_rev = revs[-1].number
print 'updated from %s to %s.\n' % (old_rev, new_rev)
head = pysvn.Revision(pysvn.opt_revision_kind.number, old_rev)
end = pysvn.Revision(pysvn.opt_revision_kind.number, new_rev)
log_messages = client.log(work_path, revision_start=head, revision_end=end,
limit=0)
for log in log_messages:
timestamp = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(log.date))
print '[%s]\t%s\t%s\n %s\n' % (log.revision.number, timestamp,
log.author, log.message)
print
FILE_CHANGE_INFO = {
pysvn.diff_summarize_kind.normal: ' ',
pysvn.diff_summarize_kind.modified: 'M',
pysvn.diff_summarize_kind.delete: 'D',
pysvn.diff_summarize_kind.added: 'A',
}
print 'file changed:'
summary = client.diff_summarize(work_path, head, work_path, end)
for info in summary:
path = info.path
if info.node_kind == pysvn.node_kind.dir:
path += '/'
file_changed = FILE_CHANGE_INFO[info.summarize_kind]
prop_changed = ' '
if info.prop_changed:
prop_changed = 'M'
print file_changed + prop_changed, path
print
于 2010-09-08T06:30:15.507 回答
1
我知道这很旧,但没有公认的答案,我在搜索与node_kind
.
import pysvn
tmpFile = open('your.log', 'w')
repository = sys.argv[1]
transactionId = sys.argv[2]
transaction = pysvn.Transaction(repository, transactionId)
#
# transaction.changed()
#
# {
# u'some.file': ('R', <node_kind.file>, 1, 0),
# u'another.file': ('R', <node_kind.file>, 1, 0),
# u'aDirectory/a.file': ('R', <node_kind.file>, 1, 0),
# u'anotherDirectory': ('A', <node_kind.dir>, 0, 0),
# u'junk.file': ('D', <node_kind.file>, 0, 0)
# }
#
for changedFile in transaction.changed():
tmpFile.writelines(transaction.cat(changedFile))
# if you need to check data in the .changed() dict...
# if ('A' or 'R') in transaction.changed()[changedFile][0]
我在 SVN 预提交挂钩脚本中以与上述类似的方式使用 Transaction。
有关字典详细信息,请参阅文档:http:
//pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_transaction
http://pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_transaction_changed
另外,虽然我没有使用 Transaction 的 list() 方法,但也可能感兴趣: http:
//pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_transaction
于 2014-03-26T18:05:01.940 回答
1
创建客户端对象时,添加一个通知回调。回调是一个dict
获取有关事件信息的函数。
import pysvn
import pprint
def notify(event_dict):
pprint.pprint(event_dict)
client = pysvn.Client()
client.callback_notify = notify
# Perform actions with client
于 2010-09-08T06:36:20.797 回答