svnにはクライアントを簡単に作るためにライブラリがあるとのことで、ちょっとやってみたんだけど大苦戦。とりあえずチェックアウトだけ動いたので、メモ書き。完全にヤッツケだから参考にはならないだろうけどね(-_-)。
- 1. finkで必要なライブラリをぶっ込み。
$ fink install svn $ fink install svn-dev $ fink install apr
- 2. コードを書く
#include <subversion-1/svn_client.h> #include <subversion-1/svn_pools.h> #include <subversion-1/svn_path.h> int main(int argc, char const * const *argv){ svn_client_ctx_t *ctx; apr_pool_t *pool; svn_opt_revision_t revision; revision.kind = svn_opt_revision_head; //↑HEADをとってくるように指定 //aprの初期化 apr_app_initialize(&argc, &argv, NULL); //メモリプールの作成 pool = svn_pool_create(NULL); //クライアントコンテキストを作成 svn_client_create_context(&ctx, pool); //認証プロバイダを作る svn_auth_provider_object_t *provider; apr_array_header_t *providers = apr_array_make (pool, 1, sizeof (svn_auth_provider_object_t *)); svn_client_get_simple_provider (&provider, pool); APR_ARRAY_PUSH (providers, svn_auth_provider_object_t *) = provider; //プロバイダをコンテキストに渡す svn_auth_baton_t *ab; svn_auth_open (&ab, providers, pool); ctx->auth_baton = ab; //ターゲットディレクトリを正規化 const char *target_dir = "./test/"; target_dir = svn_path_uri_decode(target_dir, pool); target_dir = svn_path_canonicalize (target_dir, pool); //SVNリポジトリURLの正規化 const char *true_url = "http://www.hogehoge.com/foofoo/"; true_url = svn_path_canonicalize (true_url, pool); //やっとチェックアウト svn_error_t *err = svn_client_checkout(NULL, true_url, target_dir, &revision, TRUE, ctx, pool); //エラー処理 if(err) printf("END %s\n", err->message); return 0; }
- 3. ヘッダやライブラリを指定してコンパイル
$ gcc -Wall -I/sw/include -I/sw/include/apr-0 test.c \ $ -L/sw/lib -lsvn_client-1 -lsvn_subr-1 -lapr-0
TortoiseSVNみたいの作るなんてかなり遠い道のりだorz。