読者です 読者をやめる 読者になる 読者になる

09

SVNKit(4)

前回まででとりあえず最新のコンテンツの取得はなんとかなりそうかと考えている。

個人的にあと押さえておきたい動きとしては削除・移動・名前の変更がある。

これらの操作の動きを確認するために、リポジトリにいくつか操作をして、履歴を以下のようにした。

  • r1 : プロジェクト構成(trunk/branches/tags)のディレクトリを作成
  • r2 : file1.txt, .project を追加
  • r3 : file1.txtの内容を更新、file2.txt を追加
  • r4 : folder1, folder1/file3.txt, folder2,folder2/file4.txt を追加
  • r5 : folder1/file3.txt を file3.txt に移動
  • r6 : 空になった folder1 と、folder2/file4.txt を削除
  • r7 : file2.txt の名前を file5.txt に変更

移動

r4 -> r5 の 「folder1/file3.txt を file3.txt に移動」を見てみる。

SVNRepository#update の呼び出しは以下のようにリビジョンに5を指定

    @Test
    public void repositoryUpdate() throws Exception {

        setUpRepo();

        final SVNRepository repository = SVNRepositoryFactory.create(SVNURL.parseURIEncoded(url));
        final ISVNAuthenticationManager authenticationManager = SVNWCUtil.createDefaultAuthenticationManager(user, password.toCharArray());
        repository.setAuthenticationManager(authenticationManager);
        repository.update(5, "trunk", true, new ExpReporter(), new ExpEditor());
    }

ワーキングコピーの状態を報告するISVNReporterBatonの実装ではワーキングコピーのトップで リビジョンが4であると報告

public class ExpReporter implements ISVNReporterBaton {

    @Override
    public void report(final ISVNReporter reporter) throws SVNException {

        reporter.setPath("", null, 4, SVNDepth.INFINITY, false);
        reporter.finishReport();
        return;
    }

}

以下のような出力が得られた

#targetRevision start > [rev.5]
#openRoot start > [rev.4]
#openDir start > trunk[rev.4]
#changeDirProperty start > svn:wc:ra_dav:version-url /svn/test/!svn/ver/5/trunk
#changeDirProperty start > svn:entry:committed-rev 5
#changeDirProperty start > svn:entry:committed-date 2016-03-12T13:00:44.576740Z
#changeDirProperty start > svn:entry:last-author test
#changeDirProperty start > svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#addFile start > trunk/file3.txt
#changeFileProperty start > trunk/file3.txt svnkit:entry:sha1-checksum 6b3c45f2d43d16c028ef18e38cb1e516f653463d
#changeFileProperty start > trunk/file3.txt svn:wc:ra_dav:version-url /svn/test/!svn/ver/5/trunk/file3.txt
#changeFileProperty start > trunk/file3.txt svn:entry:committed-rev 5
#changeFileProperty start > trunk/file3.txt svn:entry:committed-date 2016-03-12T13:00:44.576740Z
#changeFileProperty start > trunk/file3.txt svn:entry:last-author test
#changeFileProperty start > trunk/file3.txt svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#changeFileProperty start > trunk/file3.txt svn:mime-type text/plain
#applyTextDelta start > trunk/file3.txt
#textDeltaChunk start > trunk/file3.txt 0:0:7:1:7:8:0
commit4
[MD5] trunk/file3.txt -> A47E3E5340D0E65435F9D3DAB044561F
#textDeltaEnd start > trunk/file3.txt
#closeFile start > trunk/file3.txt
[MD5] match for trunk/file3.txt / a47e3e5340d0e65435f9d3dab044561f == A47E3E5340D0E65435F9D3DAB044561F
#openDir start > trunk/folder1[rev.4]
#changeDirProperty start > svn:wc:ra_dav:version-url /svn/test/!svn/ver/5/trunk/folder1
#changeDirProperty start > svn:entry:committed-rev 5
#changeDirProperty start > svn:entry:committed-date 2016-03-12T13:00:44.576740Z
#changeDirProperty start > svn:entry:last-author test
#changeDirProperty start > svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#deleteEntry start > trunk/folder1/file3.txt[rev.-1]
#closeDir start > 
#closeDir start > 
#closeDir start > 
#closeEdit start > 

まあ普段からSubversionを使っている人ならなんとなく知っているだろうが、単純に新パスの追加と旧パスの削除になっている。addFileには引数にコピー元のファイルパスとリビジョンが与えられる場合があり、個人的には移動の際には新パスのメタ情報として旧パスからコピーしたよといった情報が入るかと思っていたが、上記に表れていないのは渡されていないということで、これは若干意外。もう少し使い方を調べてみる必要があるかもしれない。

削除

次に r5 -> r6 の「空になった folder1 と、folder2/file4.txt を削除」を見てみる。

移動の時同様にコードの指すリビジョンを修正して実行してみた。

#targetRevision start > [rev.6]
#openRoot start > [rev.5]
#openDir start > trunk[rev.5]
#changeDirProperty start > svn:wc:ra_dav:version-url /svn/test/!svn/ver/6/trunk
#changeDirProperty start > svn:entry:committed-rev 6
#changeDirProperty start > svn:entry:committed-date 2016-03-12T13:02:02.887978Z
#changeDirProperty start > svn:entry:last-author test
#changeDirProperty start > svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#deleteEntry start > trunk/folder1[rev.-1]
#openDir start > trunk/folder2[rev.5]
#changeDirProperty start > svn:wc:ra_dav:version-url /svn/test/!svn/ver/6/trunk/folder2
#changeDirProperty start > svn:entry:committed-rev 6
#changeDirProperty start > svn:entry:committed-date 2016-03-12T13:02:02.887978Z
#changeDirProperty start > svn:entry:last-author test
#changeDirProperty start > svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#deleteEntry start > trunk/folder2/file4.txt[rev.-1]
#closeDir start > 
#closeDir start > 
#closeDir start > 
#closeEdit start > 

移動の時でも同様だが、openDirした後でdeleteEntryされている。ただそれだけ。

名前の変更

移動の例からほぼ結果が見えているが、r6 -> r7 「file2.txt の名前を file5.txt に変更」も同様に実行してみる。

#targetRevision start > [rev.7]
#openRoot start > [rev.6]
#openDir start > trunk[rev.6]
#changeDirProperty start > svn:wc:ra_dav:version-url /svn/test/!svn/ver/7/trunk
#changeDirProperty start > svn:entry:committed-rev 7
#changeDirProperty start > svn:entry:committed-date 2016-03-12T13:02:42.772197Z
#changeDirProperty start > svn:entry:last-author test
#changeDirProperty start > svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#deleteEntry start > trunk/file2.txt[rev.-1]
#addFile start > trunk/file5.txt
#changeFileProperty start > trunk/file5.txt svnkit:entry:sha1-checksum 54563f95fefa691baa82a522156322c21f7d6df3
#changeFileProperty start > trunk/file5.txt svn:wc:ra_dav:version-url /svn/test/!svn/ver/7/trunk/file5.txt
#changeFileProperty start > trunk/file5.txt svn:entry:committed-rev 7
#changeFileProperty start > trunk/file5.txt svn:entry:committed-date 2016-03-12T13:02:42.772197Z
#changeFileProperty start > trunk/file5.txt svn:entry:last-author test
#changeFileProperty start > trunk/file5.txt svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#changeFileProperty start > trunk/file5.txt svn:mime-type text/plain
#applyTextDelta start > trunk/file5.txt
#textDeltaChunk start > trunk/file5.txt 0:0:7:1:7:8:0
commit2
[MD5] trunk/file5.txt -> 8AFDB541A011CC47D258C4962EC19D90
#textDeltaEnd start > trunk/file5.txt
#closeFile start > trunk/file5.txt
[MD5] match for trunk/file5.txt / 8afdb541a011cc47d258c4962ec19d90 == 8AFDB541A011CC47D258C4962EC19D90
#closeDir start > 
#closeDir start > 
#closeEdit start > 

これも追加・削除の操作になっている。

Overall

r3 -> r7 の差分取得をした場合、削除されてワーキングコピーに影響のないファイル(folder1, file4.txt)については得に知らされない。

#targetRevision start > [rev.7]
#openRoot start > [rev.3]
#openDir start > trunk[rev.3]
#changeDirProperty start > svn:wc:ra_dav:version-url /svn/test/!svn/ver/7/trunk
#changeDirProperty start > svn:entry:committed-rev 7
#changeDirProperty start > svn:entry:committed-date 2016-03-12T13:02:42.772197Z
#changeDirProperty start > svn:entry:last-author test
#changeDirProperty start > svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#deleteEntry start > trunk/file2.txt[rev.-1]
#addFile start > trunk/file3.txt
#changeFileProperty start > trunk/file3.txt svnkit:entry:sha1-checksum 6b3c45f2d43d16c028ef18e38cb1e516f653463d
#changeFileProperty start > trunk/file3.txt svn:wc:ra_dav:version-url /svn/test/!svn/ver/5/trunk/file3.txt
#changeFileProperty start > trunk/file3.txt svn:entry:committed-rev 5
#changeFileProperty start > trunk/file3.txt svn:entry:committed-date 2016-03-12T13:00:44.576740Z
#changeFileProperty start > trunk/file3.txt svn:entry:last-author test
#changeFileProperty start > trunk/file3.txt svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#changeFileProperty start > trunk/file3.txt svn:mime-type text/plain
#applyTextDelta start > trunk/file3.txt
#textDeltaChunk start > trunk/file3.txt 0:0:7:1:7:8:0
commit4
[MD5] trunk/file3.txt -> A47E3E5340D0E65435F9D3DAB044561F
#textDeltaEnd start > trunk/file3.txt
#closeFile start > trunk/file3.txt
[MD5] match for trunk/file3.txt / a47e3e5340d0e65435f9d3dab044561f == A47E3E5340D0E65435F9D3DAB044561F
#addFile start > trunk/file5.txt
#changeFileProperty start > trunk/file5.txt svnkit:entry:sha1-checksum 54563f95fefa691baa82a522156322c21f7d6df3
#changeFileProperty start > trunk/file5.txt svn:wc:ra_dav:version-url /svn/test/!svn/ver/7/trunk/file5.txt
#changeFileProperty start > trunk/file5.txt svn:entry:committed-rev 7
#changeFileProperty start > trunk/file5.txt svn:entry:committed-date 2016-03-12T13:02:42.772197Z
#changeFileProperty start > trunk/file5.txt svn:entry:last-author test
#changeFileProperty start > trunk/file5.txt svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#changeFileProperty start > trunk/file5.txt svn:mime-type text/plain
#applyTextDelta start > trunk/file5.txt
#textDeltaChunk start > trunk/file5.txt 0:0:7:1:7:8:0
commit2
[MD5] trunk/file5.txt -> 8AFDB541A011CC47D258C4962EC19D90
#textDeltaEnd start > trunk/file5.txt
#closeFile start > trunk/file5.txt
[MD5] match for trunk/file5.txt / 8afdb541a011cc47d258c4962ec19d90 == 8AFDB541A011CC47D258C4962EC19D90
#addDir start > trunk/folder2
#changeDirProperty start > svn:wc:ra_dav:version-url /svn/test/!svn/ver/6/trunk/folder2
#changeDirProperty start > svn:entry:committed-rev 6
#changeDirProperty start > svn:entry:committed-date 2016-03-12T13:02:02.887978Z
#changeDirProperty start > svn:entry:last-author test
#changeDirProperty start > svn:entry:uuid 5025b694-87bc-4570-9e45-8a2bcb52a122
#closeDir start > 
#closeDir start > 
#closeDir start > 
#closeEdit start > 

さて、個人的に知りたいこととしてはここまでで一通り知ることができたので、このシリーズはここでおしまい。

carrotsword 先生の次回作にご期待ください!