bool SVNPatch::RemoveFile( const CString& path ) { svn_error_t * err = NULL; apr_pool_t * scratchpool = NULL; svn_client_ctx_t * ctx = NULL; apr_pool_create_ex(&scratchpool, m_pool, abort_on_pool_failure, NULL); svn_error_clear(svn_client_create_context2(&ctx, SVNConfig::Instance().GetConfig(m_pool), scratchpool)); apr_array_header_t *targets = apr_array_make (scratchpool, 1, sizeof(const char *)); (*((const char **) apr_array_push (targets))) = svn_dirent_canonicalize(CUnicodeUtils::GetUTF8(path), scratchpool); err = svn_client_delete4(targets, true, false, NULL, NULL, NULL, ctx, scratchpool); apr_pool_destroy(scratchpool); if (err) { svn_error_clear(err); return false; } return true; }
static gpointer delete_thread (gpointer user_data) { struct thread_args *args = user_data; svn_error_t *err; apr_array_header_t *paths; svn_client_ctx_t *ctx = args->ctx; apr_pool_t *subpool, *pool = args->pool; TshNotifyDialog *dialog = args->dialog; gchar **files = args->files; gint size, i; gchar *error_str; #if CHECK_SVN_VERSION_S(1,6) svn_commit_info_t *commit_info; gchar *message; gchar buffer[256]; #endif g_free (args); size = files?g_strv_length(files):0; subpool = svn_pool_create (pool); if(size) { paths = apr_array_make (subpool, size, sizeof (const char *)); for (i = 0; i < size; i++) { APR_ARRAY_PUSH (paths, const char *) = files[i]; } } else { paths = apr_array_make (subpool, 1, sizeof (const char *)); APR_ARRAY_PUSH (paths, const char *) = ""; // current directory } #if CHECK_SVN_VERSION_S(1,6) if ((err = svn_client_delete3(&commit_info, paths, FALSE, FALSE, NULL, ctx, subpool))) #else /* CHECK_SVN_VERSION(1,7) */ if ((err = svn_client_delete4(paths, FALSE, FALSE, NULL, tsh_commit_func2, dialog, ctx, subpool))) #endif { svn_pool_destroy (subpool); error_str = tsh_strerror(err); G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_enter(); tsh_notify_dialog_add(dialog, _("Failed"), error_str, NULL); tsh_notify_dialog_done (dialog); gdk_threads_leave(); G_GNUC_END_IGNORE_DEPRECATIONS g_free(error_str); svn_error_clear(err); tsh_reset_cancel(); return GINT_TO_POINTER (FALSE); } #if CHECK_SVN_VERSION_S(1,6) if(commit_info && SVN_IS_VALID_REVNUM(commit_info->revision)) { g_snprintf(buffer, 256, _("At revision: %ld"), commit_info->revision); message = buffer; } else { message = _("Local delete"); } #endif svn_pool_destroy (subpool); G_GNUC_BEGIN_IGNORE_DEPRECATIONS gdk_threads_enter(); #if CHECK_SVN_VERSION_S(1,6) tsh_notify_dialog_add(dialog, _("Completed"), message, NULL); #endif tsh_notify_dialog_done (dialog); gdk_threads_leave(); G_GNUC_END_IGNORE_DEPRECATIONS tsh_reset_cancel(); return GINT_TO_POINTER (TRUE); }