// Subversion Client // // Douglas Thrift // // $Id$ #include #include "Client.hpp" namespace Subversion { Client::Client() { CheckError(::svn_client_create_context(&context, pool)); } cse::String Client::GetProperty(const cse::String &property, const cse::String &target) const { ::apr_hash_t *hash; ::svn_opt_revision_t revision = { ::svn_opt_revision_unspecified }; CheckError(::svn_client_propget2(&hash, property.NullTerminate(), target.NullTerminate(), &revision, &revision, false, context, pool)); if (::apr_hash_index_t *index = ::apr_hash_first(pool, hash)) { ::svn_string_t *string; ::apr_hash_this(index, NULL, NULL, reinterpret_cast(&string)); return cse::String(string->data, string->len); } else return cse::EmptyString; } _L Client::GetEntries(const cse::String &target) const { ::apr_hash_t *hash; ::svn_opt_revision_t revision = { ::svn_opt_revision_unspecified }; #if (SVN_VER_MAJOR == 1) && (SVN_VER_MINOR == 2) CheckError(::svn_client_ls2(&hash, target.NullTerminate(), &revision, &revision, false, context, pool)); #else CheckError(::svn_client_ls3(&hash, NULL, target.NullTerminate(), &revision, &revision, false, context, pool)); #endif _L entries; for (::apr_hash_index_t *index(::apr_hash_first(pool, hash)); index; index = apr_hash_next(index)) { const char *string; ::apr_ssize_t size; ::svn_dirent_t *entry; ::apr_hash_this(index, reinterpret_cast(&string), &size, reinterpret_cast(&entry)); entries.InsertLast(Entry(cse::String(string, size), entry)); } return entries; } }