如何可能的話,我怎樣才能獲得有關在pysvn中運行svn update時添加,刪除,更新了哪些文件的信息?我想將這些信息寫入日誌文件。log pysvn update
3
A
回答
2
您可以保存原始和更新版本,然後使用diff_summarize獲取更新的文件。 (見pysvn Programmer's reference)
這裏有一個例子:
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
1
當你創建你的客戶對象,添加notify callback。回調函數需要一個關於事件的信息dict
。
import pysvn
import pprint
def notify(event_dict):
pprint.pprint(event_dict)
client = pysvn.Client()
client.callback_notify = notify
# Perform actions with client
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預先提交鉤子腳本上述。
的字典詳細資料請參閱文檔:
http://pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_transaction
http://pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_transaction_changed
而且,雖然我沒有使用事務的list()方法也可能會感興趣:
http://pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_transaction
相關問題
- 1. 使用pysvn做'svn update --set-depth = infinity'
- 2. Unix上的Custon服務與update-rc.d + LOG?
- 3. 在pysvn
- 4. 與svn + ssh pysvn
- 5. 編譯pysvn(win64)
- 6. 如何模擬pysvn
- 7. pysvn client.log()返回空的字典
- 8. pysvn請求SVN ROOT請求分支時
- 9. PySVN錯誤:URL不存在
- 10. pysvn和烏龜顛覆
- 11. 手動處理PySVN合併
- 12. pysvn獲取以前的版本
- 13. 增長率log(log * n)和log *(log n)哪個更快?
- 14. 是log(n!)= O((log(n))^ 2)?
- 15. log(n!)=Ω(n * log(n))?
- 16. 計算log(x /(y * z))或log(x)-log(y)-log(z)會更好嗎?
- 17. Matlab中的log(a * b)總是比log(a)+ log(b)更快?
- 18. (log n)/(log(log n))的順序是什麼?
- 19. pysvn在網絡服務器上
- 20. pysvn:獲取當前登錄用戶名
- 21. PYSVN提交的其他用戶
- 22. pysvn用svn + ssh提示輸入密碼
- 23. pysvn:如何獲取版本號?
- 24. 使用pysvn包中的import_()函數
- 25. pysvn文件複製功能版本號
- 26. 在Mac OSX 10.5中卸載pysvn
- 27. PySVN - 確定是否存在存儲庫
- 28. BASH將.log重命名爲.LOG
- 29. floor(√2n)的O(log log n)算法?
- 30. 證明log(n!)是Ω(n log(n))
'總結=客戶端。 diff_summarize(url,pysvn.Revision(pysvn.opt_revision_kind.committed),url,pysvn.Revision(pysvn.opt_revision_kind.previous))'can diff_summarize可以像上面那樣在兩個不在工作路徑上的url上使用? – slee 2013-07-21 08:08:10