void file_sekop_write_transact_block(Tfsekop_transact *sekop_transact, const void *packet, int packet_size, int packet_num, time_t fin_time) { sekop_transact->res = FSEKOP_TRANSACT_OK; if(sekop_transact->opened != 1) { sekop_transact->res = FSEKOP_TRANSACT_ENOPEN; return; } if(sekop_transact->hdr.pnum >= packet_num) { sekop_transact->res = FSEKOP_TRANSACT_EEXIST; return; } int written_size = sekop_transact->hdr.size; if((written_size + packet_size) > sekop_transact->size) { sekop_transact->res = FSEKOP_TRANSACT_ENOSPC; return; } lseek_(sekop_transact, buff_offset(sekop_transact) + written_size, SEEK_SET); IF_ERROR_RETURN(); write_(sekop_transact, packet, packet_size); IF_ERROR_RETURN(); sekop_transact->hdr.size = written_size + packet_size; sekop_transact->hdr.pnum = packet_num; sekop_transact->hdr.time = fin_time; save_hdr(sekop_transact); }
static int l_propset (lua_State *L) { const char *path = luaL_checkstring (L, 1); const char *propname = luaL_checkstring (L, 2); const char *propval = lua_isnil (L, 3) ? NULL : luaL_checkstring (L, 3); apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); const char *propname_utf8; err = svn_utf_cstring_to_utf8 (&propname_utf8, propname, pool); IF_ERROR_RETURN (err, pool, L); if (propval != NULL) { svn_string_t *sstring = svn_string_create (propval, pool); err = svn_client_propset2 (propname_utf8, sstring, path, TRUE, FALSE, ctx, pool); } else { err = svn_client_propset2 (propname_utf8, NULL, path, TRUE, FALSE, ctx, pool); } IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 0; }
static int l_revprop_list (lua_State *L) { const char *url = luaL_checkstring (L, 1); svn_opt_revision_t revision; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = get_revision_kind (url); } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 2); } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); url = svn_path_canonicalize (url, pool); apr_hash_t *entries; apr_hash_index_t *hi; void *val; const void *key; svn_revnum_t rev; err = svn_client_revprop_list (&entries, url, &revision, &rev, ctx, pool); IF_ERROR_RETURN (err, pool, L); lua_newtable (L); for (hi = apr_hash_first (pool, entries); hi; hi = apr_hash_next (hi)) { const char *pname; svn_string_t *pval; apr_hash_this (hi, &key, NULL, &val); pname = key; pval = (svn_string_t *) val; if (svn_prop_needs_translation (pname)) { err = svn_subst_translate_string (&pval, pval, APR_LOCALE_CHARSET, pool); IF_ERROR_RETURN (err, pool, L); } err = svn_cmdline_cstring_from_utf8 (&pname, pname, pool); IF_ERROR_RETURN (err, pool, L); lua_pushstring (L, pval->data); lua_setfield (L, -2, pname); } svn_pool_destroy (pool); return 1; }
static int l_propget (lua_State *L) { apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; apr_hash_t *props; const char *propname_utf8; const void *key; void *val; apr_hash_index_t *hi; svn_opt_revision_t peg_revision; svn_opt_revision_t revision; const char *path = luaL_checkstring (L, 1); const char *propname = luaL_checkstring (L, 2); int itable = 4; svn_boolean_t recursive = FALSE; peg_revision.kind = svn_opt_revision_unspecified; if (lua_gettop (L) < 3 || lua_isnil (L, 3)) { revision.kind = svn_opt_revision_unspecified; } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 3); } if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "recursive"); if (lua_isboolean (L, -1)) { recursive = lua_toboolean (L, -1); } } init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); err = svn_utf_cstring_to_utf8 (&propname_utf8, propname, pool); IF_ERROR_RETURN (err, pool, L); err = svn_client_propget2 (&props, propname_utf8, path, &peg_revision, &revision, recursive, ctx, pool); IF_ERROR_RETURN (err, pool, L); lua_newtable (L); for (hi = apr_hash_first (pool, props); hi; hi = apr_hash_next (hi)) { svn_string_t *s; apr_hash_this (hi, &key, NULL, &val); s = (svn_string_t *) val; lua_pushstring (L, s->data); lua_setfield (L, -2, (char *) key); } svn_pool_destroy (pool); return 1; }
static void read_hdr(Tfsekop_transact *sekop_transact) { lseek_(sekop_transact, sekop_transact->offs, SEEK_SET); IF_ERROR_RETURN(); read_(sekop_transact, &sekop_transact->hdr, sizeof(Tfsekop_transact_hdr)); IF_ERROR_RETURN(); if(sekop_transact->hdr.crc != hdr_crc(&sekop_transact->hdr)) sekop_transact->res = FSEKOP_TRANSACT_ECRPT; }
static int l_revprop_set (lua_State *L) { apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; svn_opt_revision_t revision; svn_revnum_t rev; const char *url = luaL_checkstring (L, 1); const char *propname = luaL_checkstring (L, 2); const char *propval = lua_isnil (L, 3) ? NULL : luaL_checkstring (L, 3); const char *propname_utf8 = NULL; int itable = 5; svn_boolean_t force = FALSE; if (lua_gettop (L) < 4 || lua_isnil (L, 4)) { revision.kind = get_revision_kind (url); } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 4); } if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "force"); if (lua_isboolean (L, -1)) { force = lua_toboolean (L, -1); } } init_function (&ctx, &pool, L); url = svn_path_canonicalize (url, pool); err = svn_utf_cstring_to_utf8 (&propname_utf8, propname, pool); IF_ERROR_RETURN (err, pool, L); if (propval != NULL) { svn_string_t *sstring = svn_string_create (propval, pool); if (svn_prop_needs_translation (propname_utf8)) { err = svn_subst_translate_string (&sstring, sstring, APR_LOCALE_CHARSET, pool); IF_ERROR_RETURN (err, pool, L); } err = svn_client_revprop_set (propname_utf8, sstring, url, &revision, &rev, force, ctx, pool); } else { err = svn_client_revprop_set (propname_utf8, NULL, url, &revision, &rev, force, ctx, pool); } IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 0; }
static int l_propset (lua_State *L) { const char *path = luaL_checkstring (L, 1); const char *propname = luaL_checkstring (L, 2); const char *propval = lua_isnil (L, 3) ? NULL : luaL_checkstring (L, 3); svn_boolean_t recursive = FALSE; svn_boolean_t force = FALSE; int itable = 4; if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "recursive"); if (lua_isboolean (L, -1)) { recursive = lua_toboolean (L, -1); } lua_getfield (L, itable, "force"); if (lua_isboolean (L, -1)) { force = lua_toboolean (L, -1); } } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); const char *propname_utf8; err = svn_utf_cstring_to_utf8 (&propname_utf8, propname, pool); IF_ERROR_RETURN (err, pool, L); if (propval != NULL) { svn_string_t *sstring = svn_string_create (propval, pool); err = svn_client_propset2 (propname_utf8, sstring, path, recursive, force, ctx, pool); } else { err = svn_client_propset2 (propname_utf8, NULL, path, recursive, force, ctx, pool); } IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 0; }
static int init_function (svn_client_ctx_t **ctx, apr_pool_t **pool, lua_State *L) { apr_allocator_t *allocator; svn_auth_baton_t *ab; svn_config_t *cfg; svn_error_t *err; if (svn_cmdline_init("svn", stderr) != EXIT_SUCCESS) { return send_error (L, "Error initializing svn\n"); } if (apr_allocator_create(&allocator)) { return send_error (L, "Error creating allocator\n"); } apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE); *pool = svn_pool_create_ex(NULL, allocator); apr_allocator_owner_set(allocator, *pool); err = svn_ra_initialize(*pool); IF_ERROR_RETURN (err, *pool, L); err = svn_client_create_context (ctx, *pool); IF_ERROR_RETURN (err, *pool, L); err = svn_config_get_config(&((*ctx)->config), NULL, *pool); IF_ERROR_RETURN (err, *pool, L); cfg = apr_hash_get((*ctx)->config, SVN_CONFIG_CATEGORY_CONFIG, APR_HASH_KEY_STRING); err = svn_cmdline_setup_auth_baton(&ab, FALSE, NULL, NULL, NULL, FALSE, cfg, (*ctx)->cancel_func, (*ctx)->cancel_baton, *pool); IF_ERROR_RETURN (err, *pool, L); (*ctx)->auth_baton = ab; return 0; }
void file_sekop_transact_open(Tfsekop_transact *sekop_transact) { sekop_transact->res = FSEKOP_TRANSACT_OK; read_hdr(sekop_transact); IF_ERROR_RETURN(); sekop_transact->opened = 1; }
static int l_update (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); svn_opt_revision_t revision; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = svn_opt_revision_head; } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 2); } svn_boolean_t recursive = TRUE; svn_boolean_t ignore_externals = FALSE; int itable = 3; if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "recursive"); if (lua_isboolean (L, -1)) { recursive = lua_toboolean (L, -1); } lua_getfield (L, itable, "ignore_externals"); if (lua_isboolean (L, -1)) { ignore_externals = lua_toboolean (L, -1); } } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); apr_array_header_t *array; array = apr_array_make (pool, 1, sizeof (const char *)); (*((const char **) apr_array_push (array))) = path; apr_array_header_t *result_revs = NULL; err = svn_client_update2 (&result_revs, array, &revision, recursive, ignore_externals, ctx, pool); IF_ERROR_RETURN (err, pool, L); if (result_revs == NULL) { lua_pushnil (L); } else { int rev = (int) ((int **) (result_revs->elts))[0]; lua_pushinteger (L, rev); } svn_pool_destroy (pool); return 1; }
static int l_list (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); svn_opt_revision_t revision; svn_opt_revision_t peg_revision; peg_revision.kind = svn_opt_revision_unspecified; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = get_revision_kind (path); } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 2); } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); lua_newtable (L); err = svn_client_list (path, &peg_revision, &revision, TRUE, SVN_DIRENT_ALL, TRUE, list_func, L, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 1; }
static int l_move (lua_State *L) { const char *src_path = luaL_checkstring (L, 1); const char *dest_path = luaL_checkstring (L, 2); const char *message = (lua_gettop (L) < 3 || lua_isnil (L, 3)) ? "" : luaL_checkstring (L, 3); apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); src_path = svn_path_canonicalize (src_path, pool); dest_path = svn_path_canonicalize (dest_path, pool); svn_commit_info_t *commit_info = NULL; if (svn_path_is_url (dest_path)) { make_log_msg_baton (&(ctx->log_msg_baton2), message, NULL, ctx->config, pool, L); ctx->log_msg_func2 = log_msg_func2; } err = svn_client_move4 (&commit_info, src_path, dest_path, FALSE, ctx, pool); IF_ERROR_RETURN (err, pool, L); if (commit_info == NULL) { lua_pushnil (L); } else { lua_pushinteger (L, commit_info->revision); } svn_pool_destroy (pool); return 1; }
static void save_hdr(Tfsekop_transact *sekop_transact) { lseek_(sekop_transact, sekop_transact->offs, SEEK_SET); IF_ERROR_RETURN(); sekop_transact->hdr.crc = hdr_crc(&sekop_transact->hdr); write_(sekop_transact, &sekop_transact->hdr, sizeof(Tfsekop_transact_hdr)); }
static int l_revprop_get (lua_State *L) { const char *url = luaL_checkstring (L, 1); const char *propname = luaL_checkstring (L, 2); svn_opt_revision_t revision; if (lua_gettop (L) < 3 || lua_isnil (L, 3)) { revision.kind = get_revision_kind (url); } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 3); } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); url = svn_path_canonicalize (url, pool); const char *propname_utf8; err = svn_utf_cstring_to_utf8 (&propname_utf8, propname, pool); IF_ERROR_RETURN (err, pool, L); svn_string_t *propval; svn_revnum_t rev; err = svn_client_revprop_get (propname_utf8, &propval, url, &revision, &rev, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_string_t *printable_val = propval; if (svn_prop_needs_translation (propname_utf8)) { err = svn_subst_detranslate_string (&printable_val, propval, TRUE, pool); IF_ERROR_RETURN (err, pool, L); } lua_pushstring (L, printable_val->data); svn_pool_destroy (pool); return 1; }
static int l_commit (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); const char *message = (lua_gettop (L) < 2 || lua_isnil (L, 2)) ? "" : luaL_checkstring (L, 2); svn_boolean_t recursive = TRUE; svn_boolean_t keep_locks = FALSE; int itable = 3; if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "recursive"); if (lua_isboolean (L, -1)) { recursive = lua_toboolean (L, -1); } lua_getfield (L, itable, "keep_locks"); if (lua_isboolean (L, -1)) { keep_locks = lua_toboolean (L, -1); } } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); apr_array_header_t *array; svn_commit_info_t *commit_info = NULL; array = apr_array_make (pool, 1, sizeof (const char *)); (*((const char **) apr_array_push (array))) = path; make_log_msg_baton (&(ctx->log_msg_baton2), message, path, ctx->config, pool, L); ctx->log_msg_func2 = log_msg_func2; err = svn_client_commit3 (&commit_info, array, recursive, keep_locks, ctx, pool); IF_ERROR_RETURN (err, pool, L); if (commit_info == NULL) { lua_pushnil (L); } else { lua_pushinteger (L, commit_info->revision); } svn_pool_destroy (pool); return 1; }
static int l_checkout (lua_State *L) { const char *path = luaL_checkstring (L, 1); const char *dir = luaL_checkstring (L, 2); svn_opt_revision_t revision; svn_opt_revision_t peg_revision; peg_revision.kind = svn_opt_revision_unspecified; if (lua_gettop (L) < 3 || lua_isnil (L, 3)) { revision.kind = svn_opt_revision_head; } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 3); } svn_boolean_t recursive = TRUE; svn_boolean_t ignore_externals = FALSE; int itable = 4; if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "recursive"); if (lua_isboolean (L, -1)) { recursive = lua_toboolean (L, -1); } lua_getfield (L, itable, "ignore_externals"); if (lua_isboolean (L, -1)) { ignore_externals = lua_toboolean (L, -1); } } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); dir = svn_path_canonicalize (dir, pool); svn_revnum_t rev; err = svn_client_checkout2 (&rev, path, dir, &peg_revision, &revision, recursive, ignore_externals, ctx, pool); IF_ERROR_RETURN (err, pool, L); lua_pushinteger (L, rev); svn_pool_destroy (pool); return 1; }
int file_sekop_transact_read(Tfsekop_transact *sekop_transact, void *dest, int dest_size) { sekop_transact->res = FSEKOP_TRANSACT_OK; if(sekop_transact->opened != 1) { sekop_transact->res = FSEKOP_TRANSACT_ENOPEN; return 0; } int read_offs = sekop_transact->roffs; int last_size = sekop_transact->hdr.size - read_offs; if(last_size <= 0) { if (last_size) // < 0 sekop_transact->res = FSEKOP_TRANSACT_EOFFS; return 0; } lseek_(sekop_transact, buff_offset(sekop_transact) + read_offs, SEEK_SET); IF_ERROR_RETURN(0); int read_size = MIN(last_size, dest_size); read_(sekop_transact, dest, read_size); IF_ERROR_RETURN(0); sekop_transact->roffs = read_offs + read_size; return read_size; }
static int l_import (lua_State *L) { const char *path = lua_isnil (L, 1) ? "" : luaL_checkstring (L, 1); const char *url = luaL_checkstring (L, 2); const char *message = (lua_gettop (L) < 3 || lua_isnil (L, 3)) ? "" : luaL_checkstring (L, 3); svn_boolean_t recursive = TRUE; svn_boolean_t no_ignore = FALSE; int itable = 4; if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "recursive"); if (lua_isboolean (L, -1)) { recursive = lua_toboolean (L, -1); } lua_getfield (L, itable, "no_ignore"); if (lua_isboolean (L, -1)) { no_ignore = lua_toboolean (L, -1); } } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); url = svn_path_canonicalize (url, pool); svn_commit_info_t *commit_info = NULL; make_log_msg_baton (&(ctx->log_msg_baton2), message, NULL, ctx->config, pool, L); ctx->log_msg_func2 = log_msg_func2; err = svn_client_import2 (&commit_info, path, url, !recursive, no_ignore, ctx, pool); IF_ERROR_RETURN (err, pool, L); if (commit_info == NULL) { lua_pushnil (L); } else { lua_pushinteger (L, commit_info->revision); } svn_pool_destroy (pool); return 1; }
static int l_list (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); svn_opt_revision_t revision; svn_opt_revision_t peg_revision; peg_revision.kind = svn_opt_revision_unspecified; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = get_revision_kind (path); } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 2); } svn_boolean_t recursive = FALSE; svn_boolean_t fetch_locks = FALSE; int itable = 3; if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "recursive"); if (lua_isboolean (L, -1)) { recursive = lua_toboolean (L, -1); } lua_getfield (L, itable, "fetch_locks"); if (lua_isboolean (L, -1)) { fetch_locks = lua_toboolean (L, -1); } } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); lua_newtable (L); err = svn_client_list (path, &peg_revision, &revision, recursive, SVN_DIRENT_ALL, fetch_locks, list_func, L, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 1; }
static int l_merge (lua_State *L) { const char *source1 = luaL_checkstring (L, 1); svn_opt_revision_t rev1; if (lua_isnil (L, 2)) { rev1.kind = svn_opt_revision_head; } else { rev1.kind = svn_opt_revision_number; rev1.value.number = lua_tointeger (L, 2); } const char *source2 = luaL_checkstring (L, 3); svn_opt_revision_t rev2; if (lua_isnil (L, 4)) { rev2.kind = svn_opt_revision_head; } else { rev2.kind = svn_opt_revision_number; rev2.value.number = lua_tointeger (L, 4); } const char *wcpath; if (lua_gettop (L) < 5 || lua_isnil (L, 5)) { wcpath = ""; } else { wcpath = luaL_checkstring (L, 5); } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); source1 = svn_path_canonicalize (source1, pool); source2 = svn_path_canonicalize (source2, pool); wcpath = svn_path_canonicalize (wcpath, pool); err = svn_client_merge2 (source1, &rev1, source2, &rev2, wcpath, TRUE, FALSE, FALSE, FALSE, NULL, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 0; }
static int l_log (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); svn_opt_revision_t start, end; svn_opt_revision_t peg_revision; peg_revision.kind = svn_opt_revision_unspecified; start.kind = svn_opt_revision_number; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { start.value.number = 0; } else { start.value.number = lua_tointeger (L, 2); } if (lua_gettop (L) < 3 || lua_isnil (L, 3)) { end.kind = get_revision_kind (path); } else { end.kind = svn_opt_revision_number; end.value.number = lua_tointeger (L, 3); } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); apr_array_header_t *array; array = apr_array_make (pool, 1, sizeof (const char *)); (*((const char **) apr_array_push (array))) = path; const int limit = 0; lua_newtable (L); err = svn_client_log3 (array, &peg_revision, &start, &end, limit, FALSE, FALSE, log_receiver, L, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 1; }
static int l_delete (lua_State *L) { apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; apr_array_header_t *array; const char *path = luaL_checkstring (L, 1); const char *message = (lua_gettop (L) < 2 || lua_isnil (L, 2)) ? "" : luaL_checkstring (L, 2); int itable = 3; svn_boolean_t force = FALSE; svn_commit_info_t *commit_info = NULL; if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "force"); if (lua_isboolean (L, -1)) { force = lua_toboolean (L, -1); } } init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); array = apr_array_make (pool, 1, sizeof (const char *)); (*((const char **) apr_array_push (array))) = path; lua_newtable (L); if (svn_path_is_url (path)) { make_log_msg_baton (&(ctx->log_msg_baton2), message, NULL, ctx->config, pool, L); ctx->log_msg_func2 = log_msg_func2; } err = svn_client_delete2 (&commit_info, array, force, ctx, pool); IF_ERROR_RETURN (err, pool, L); if (commit_info == NULL) { lua_pushnil (L); } else { lua_pushinteger (L, commit_info->revision); } svn_pool_destroy (pool); return 1; }
static svn_error_t * log_msg_func2 (const char **log_msg, const char **tmp_file, const apr_array_header_t *commit_items, void *baton, apr_pool_t *pool) { struct log_msg_baton *lmb = baton; svn_error_t *err = svn_utf_cstring_to_utf8 (log_msg, lmb->message, pool); IF_ERROR_RETURN (err, pool, lmb->L); *tmp_file = NULL; return SVN_NO_ERROR; }
static int l_copy (lua_State *L) { const char *src_path = luaL_checkstring (L, 1); const char *dest_path = luaL_checkstring (L, 2); svn_opt_revision_t revision; if (lua_gettop (L) < 3 || lua_isnil (L, 3)) { revision.kind = svn_opt_revision_unspecified; } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 3); } const char *message = (lua_gettop (L) < 4 || lua_isnil (L, 4)) ? "" : luaL_checkstring (L, 4); apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); src_path = svn_path_canonicalize (src_path, pool); dest_path = svn_path_canonicalize (dest_path, pool); svn_commit_info_t *commit_info = NULL; if (svn_path_is_url (dest_path)) { make_log_msg_baton (&(ctx->log_msg_baton2), message, NULL, ctx->config, pool, L); ctx->log_msg_func2 = log_msg_func2; } err = svn_client_copy3 (&commit_info, src_path, &revision, dest_path, ctx, pool); IF_ERROR_RETURN (err, pool, L); if (commit_info == NULL) { lua_pushnil (L); } else { lua_pushinteger (L, commit_info->revision); } svn_pool_destroy (pool); return 1; }
static int l_repos_delete (lua_State *L) { apr_pool_t *pool; svn_error_t *err; const char *path = luaL_checkstring (L, 1); if (init_pool (&pool) != 0) { return init_pool_error (L); } path = svn_path_canonicalize (path, pool); err = svn_repos_delete (path, pool); IF_ERROR_RETURN (err, pool, L); return 0; }
static int l_cleanup (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); err = svn_client_cleanup (path, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 0; }
static int l_add (lua_State *L) { const char *path = luaL_checkstring (L, 1); apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); err = svn_client_add3 (path, TRUE, FALSE, FALSE, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 0; }
static int l_add (lua_State *L) { const char *path = luaL_checkstring (L, 1); svn_boolean_t recursive = TRUE; svn_boolean_t force = FALSE; svn_boolean_t no_ignore = FALSE; int itable = 2; if (lua_gettop (L) >= itable && lua_istable (L, itable)) { lua_getfield (L, itable, "recursive"); if (lua_isboolean (L, -1)) { recursive = lua_toboolean (L, -1); } lua_getfield (L, itable, "force"); if (lua_isboolean (L, -1)) { force = lua_toboolean (L, -1); } lua_getfield (L, itable, "no_ignore"); if (lua_isboolean (L, -1)) { no_ignore = lua_toboolean (L, -1); } } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); err = svn_client_add3 (path, recursive, force, no_ignore, ctx, pool); IF_ERROR_RETURN (err, pool, L); svn_pool_destroy (pool); return 0; }
static int l_cat (lua_State *L) { const char *path = luaL_checkstring (L, 1); svn_opt_revision_t peg_revision; svn_opt_revision_t revision; peg_revision.kind = svn_opt_revision_unspecified; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = get_revision_kind (path); } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 2); } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); svn_stream_t *stream; stream = svn_stream_empty (pool); svn_stream_set_write (stream, write_fn); svn_stringbuf_t *buffer = svn_stringbuf_create ("\0", pool); svn_stream_set_baton (stream, buffer); err = svn_client_cat2 (stream, path, &peg_revision, &revision, ctx, pool); IF_ERROR_RETURN (err, pool, L); lua_pushstring (L, buffer->data); svn_pool_destroy (pool); return 1; }
static int l_update (lua_State *L) { const char *path = (lua_gettop (L) < 1 || lua_isnil (L, 1)) ? "" : luaL_checkstring (L, 1); svn_opt_revision_t revision; if (lua_gettop (L) < 2 || lua_isnil (L, 2)) { revision.kind = svn_opt_revision_head; } else { revision.kind = svn_opt_revision_number; revision.value.number = lua_tointeger (L, 2); } apr_pool_t *pool; svn_error_t *err; svn_client_ctx_t *ctx; init_function (&ctx, &pool, L); path = svn_path_canonicalize (path, pool); apr_array_header_t *array; array = apr_array_make (pool, 1, sizeof (const char *)); (*((const char **) apr_array_push (array))) = path; apr_array_header_t *result_revs = NULL; err = svn_client_update2 (&result_revs, array, &revision, TRUE, FALSE, ctx, pool); IF_ERROR_RETURN (err, pool, L); if (result_revs == NULL) { lua_pushnil (L); } else { int rev = (int) ((int **) (result_revs->elts))[0]; lua_pushinteger (L, rev); } svn_pool_destroy (pool); return 1; }