0

私はRubyでプログラムを書いていますが、起動時にチームのソフトウェアの最新バージョンをSVNからダウンロードする必要があります。

(Ruby SVNバインディングからの)チェックアウト関数は、私のマシンのローカルの「トランク」ワークスペースに存在しないファイルを更新によって追加しないため、私が使用したいと思うものです。チェックアウトステートメントは、HEADと一致しないファイルを更新し、まったく存在しないファイルをダウンロードします。事実上、完全に再帰的なチェックアウトを実行した後、最新のSVNリポジトリの正確なコピーが欲しいと思います。

このAPIによると、チェックアウトステートメントは基本的に次のようになります。

  • 正確なSVNURL
  • ローカルルートプロジェクトディレクトリ
  • リビジョン(文字列「HEAD」を使用します)
  • 再帰的(整数1または0)
  • プールオブジェクト(これが何のためにあるのか正確にはわかりませんが、影響はないと思います)

SVNリポジトリ内のファイルごとに反復するブロック内に私が書いたものは次のとおりです。

if status != NORMAL #any file that changed or is 'missing'
  ctx.checkout(status.entry.url, ROOTDIR, 'HEAD', 0, nil) #update abnormal file to HEAD
end

テストとして、ローカルワークスペースからディレクトリを消去し、このコマンドを使用してディレクトリを復元しようとしました。欠落しているファイルの1つに到達するまで実行され、その時点でエラーが発生します。

`svn_client_checkout3':subversion / libsvn_fs_fs / tree.c:663:Svn :: Error :: FsNotFound:ファイルが見つかりません:リビジョン0、パス'/trunk/project-gadfly/SocketServer/DiscoveryServer.cpp'(Svn :: Error: :FsNotFound)

チェックアウトステートメントはディレクトリ(つまりファイル)がローカルに存在しないことを確認してから作成すると考えたため、このエラーが発生する理由がわかりません。おそらく私は何か間違ったことをしていますか?

私が書いたものを振り返ると、これはすべて、次の簡単な質問をするための長い道のりだったと思います。SVNRubyコマンドを使用してローカルハードドライブに最新バージョンのSVNリポジトリを取得するにはどうすればよいですか。

よろしくお願いします、エルウッド・ホプキンス

4

1 に答える 1

0

質問のRuby固有の部分についてはわかりませんが、SVN APIにリビジョン0の「status.entry.url」をチェックアウトするように依頼したことは明らかです。もちろん、ここには存在しません。

Rubyで書くためにPerlのドキュメントを調べたのも不思議です。代わりに、Subversionのソースを確認することをお勧めします。

Rubyメソッド宣言は次のとおりです: http ://svn.apache.org/repos/asf/subversion/branches/1.7.x/subversion/bindings/swig/ruby/svn/client.rb

  def checkout(url, path, revision=nil, peg_rev=nil,
               depth=nil, ignore_externals=false,
               allow_unver_obstruction=false)
    revision ||= "HEAD"
    Client.checkout3(url, path, peg_rev, revision, depth,
                     ignore_externals, allow_unver_obstruction,
                     self)
  end

ご覧のとおり、ペグリビジョンとして0を指定しました。ただし、代わりにHEADを指定する必要があります。

プールについてはどうですか---それらはSVNメモリ管理の一部です。説明は次のとおりです:http ://subversion.apache.org/docs/community-guide/conventions.html#apr-pools

于 2012-07-23T14:18:27.130 に答える