Pysvnプログラマー使用ガイド

47753 ワード

ソース:http://ju.outofmemory.cn/entry/35762
これはpysvnモジュールに関するガイドです。
完全かつ詳細なAPIを参照してください。  http://pysvn.tigris.org/docs/pysvn_progref..
pysvnはSubversionのバージョン制御を操作するPythonインターフェースモジュールであり、このAPIインターフェースは作業コピーを管理し、アーカイブライブラリを検索し、同期した2つのAPIインターフェースを管理することができる。
APIは新しい倉庫を作成できない。既存の倉庫にしか使えません。もし倉庫を作る必要があるなら、Subversionのsvnadminコマンドを使ってください。
このAPIを使って、作業をコピーしたり、編集したり、作業ファイルを削除したり、check inと比較したり、変更を放棄したりすることができます。
Subversionモデル
Subversionは更新-編集-提出のモデルです。まずローカルで作業コピーを作成します。作業のコピーを修正して、最終的に中央倉庫に提出します。
このモデルは、多くの人が同じファイルを同時に修正することを可能にします。ほとんどの場合、Subversionはこれらの異なる修正に干渉しません。もし一つの提出が失敗したら、ユーザーまたはアプリケーションは再チェックと修正をして再提出します。
よくある任務
このセクションでは、pysvnインターフェースを使用する一般的な例を示します。業務は再帰的な処理ディレクトリになります。このような行為を防ぐためにパラメータrecurse=Falseを追加します。例えば、ディレクトリを追加していないコンテンツを追加する必要があります。
check out作業コピー一つ
 
import pysvn
client = pysvn.Client()#check out the current version of the pysvn project
client.checkout('http://localhost/example/trunk','./examples/pysvn')#check out revision 11 of the pysvn project
client.checkout('http://localhost/example/trunk','./examples/pysvn-11',
   revision=pysvn.Revision(pysvn.opt_revision_kind.number,11))
 
 
これはexampleテスト項目を作成する例です。カタログはexamples/pysvnです。このプロジェクトは残りの例に使います。
リポジトリにファイルまたはディレクトリを追加します。
import pysvn
# write a file foo.txt
f = file('./examples/pysvn/foo.txt','w')
f.write('Sample versioned file via pithon
') f.close() client = pysvn.Client()#schedule the addition;# the working copy will now track the file as a scheduled change client.add('./examples/pysvn/foo.txt')#committing the change actually adds the file to the repository client.checkin(['./examples/pysvn/foo.txt'],'Adding a sample file')
 
この例は作業コピーで'foo.txt'ファイルを作成して倉庫に追加します。Client.import()に注意してください。コマンドは同時に追加と提出されます。ほとんどのアプリケーションは多くの修正後に提出されます。
作業のコピーを更新します
import pysvn
client = pysvn.Client()
client.update('./examples/pysvn')
 
リポジトリから他のユーザーの変更を更新して、ローカルレプリカに保存します。ほとんどのアプリケーションは常にこのようにして衝突を防ぐべきです。
更新を倉庫に提出する
import pysvn
# edit the file foo.txt
f = open('./examples/pysvn/foo.txt','w')
f.write('Sample versioned file via python
'
) f.close()# checkin the change with a log message client = pysvn.Client() client.checkin(['./examples/pysvn'],'Corrected spelling of python in foo.txt')
Subversionに提出したのは原子です。すべての修正が成功したか、または失敗したかのいずれかです。ほとんどのアプリケーションはこの例に示すように作業コピーのすべての修正を提出します。あるいは個別のファイルまたはカタログを通して、同じ単位である必要があります。
作業コピーの変更を破棄
import pysvn
# edit the file foo.txt
f = file('./examples/pysvn/foo.txt','w')
f.write('This change will never be seen
'
) f.close()#discard the edits client = pysvn.Client() client.revert('./examples/pysvn/foo.txt')
これは、ジョブコピーおよび復元されたファイルまたはディレクトリのいずれかの未送信編集の状態変化を破棄する。
バージョンの追加または削除を計画しています。あるいはコピーを作業に復元します。
ファイルの名前変更または移動
import pysvn
client = pysvn.Client()#rename the file client side
client.move('./examples/pysvn/foo.txt','./examples/pysvn/foo2.txt')#checkin the change removes the file from the repository
client.checkin(['./examples/pysvn/foo.txt','./examples/pysvn/foo2.txt'],'Foo has become Foo2')
ファイルを移動または名前を変更して古いパスまたは名前のファイルを削除し、新しい場所で以前のバージョンに関する情報を保存します。
この例では、ファイル名Cient.checkinを通じて父ディレクトリを転送することも有効です。
転送とマージはサーバ端でワンステップで行うことができます。倉庫の任務の例を参照してもいいです。
ファイルまたはディレクトリをリポジトリから削除します。
import pysvn
client = pysvn.Client()#schedule the removal;#  the file will be removed from the working copy
client.remove('./examples/pysvn/foo2.txt')#committing the change removes the file from the repository
client.checkin(['./examples/pysvn/foo2.txt'],'Removing sample file')
一部の人が削除したファイルを完全に削除したり、ライブラリのディレクトリをクリアしたりします。このファイルは以前のバージョンに残っています。以前に修正した内容を検査または他の方法で検索できます。
確定待ち変動
import pysvn
client = pysvn.Client()
changes = client.status('./examples/pysvn')print'files to be added:'print[f.path for f in changes if f.text_status == pysvn.wc_status_kind.added]print'files to be removed:'print[f.path for f in changes if f.text_status == pysvn.wc_status_kind.deleted]print'files that have changed:'print[f.path for f in changes if f.text_status == pysvn.wc_status_kind.modified]print'files with merge conflicts:'print[f.path for f in changes if f.text_status == pysvn.wc_status_kind.conflicted]print'unversioned files:'print[f.path for f in changes if f.text_status == pysvn.wc_status_kind.unversioned]
差異またはパッチを生成する
import pysvn
client = pysvn.Client()
diff_text = client.diff('./tmp-file-prefix-','.')
倉庫URLを取得する
import pysvn
client = pysvn.Client()
entry = client.info('.')print'Url:',entry.url
倉庫の役割
このセクションでは、タスクの例を説明し、倉庫を操作または検査します。共通のタスクは、ローカルのコピー時間の変化によって、ライブラリが倉庫ディレクトリのリストを取得することに直接影響を及ぼします。
import pysvn
client = pysvn.Client()
entry_list = client.ls('.')
倉庫からファイルの内容を取得する
import pysvn
client = pysvn.Client()
file_content = client.cat('file.txt')
タグまたはブランチを作成します。
import pysvn
client = pysvn.Client()
log_message ="reason for change"def get_log_message():returnTrue, log_message
client.callback_get_log_message = get_log_message
client.copy('http://svnrepo.com/svn/trunk','http://svnrepo.com/svn/tag/%s'% tag_name )
倉庫から移動または名前の変更
import pysvn
client = pysvn.Client()
client.move('file_old.txt','file_new.txt')
ファイルをロック
import pysvn
client = pysvn.Client()
client.lock('file.txt','reason for locking')
ファイルをロックし、他のユーザまたは作業のコピーをロックします。
import pysvn
client = pysvn.Client()
client.lock('file.txt','reason for locking', force=True)
錠をはずす
import pysvn
client = pysvn.Client()
client.unlock('file.txt')
ファイルをロックして、他のユーザーまたはコピーをロックします。
import pysvn
client = pysvn.Client()
client.unlock('file.txt', force=True)
テストロックファイル
Method 1:
all_entries =self.client.info2( path, recurse=False)for path, info in all_entries:if info['lock']:if info['lock']['token']!='':print'%s is locked'% path
        print info['lock']['comment']
Method 2:
all_status =self.client.status( path, recurse=False, update=True)for status in all_status:if status.entry isnotNone:if status.entry.lock_token isnotNone:print'%s is locked'% status.path