📄 revert.c
字号:
/* * revert.c: wrapper around wc revert functionality. * * ==================================================================== * Copyright (c) 2000-2004 CollabNet. All rights reserved. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://subversion.tigris.org/license-1.html. * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * * This software consists of voluntary contributions made by many * individuals. For exact contribution history, see the revision * history and logs, available at http://subversion.tigris.org/. * ==================================================================== *//* ==================================================================== *//*** Includes. ***/#include "svn_wc.h"#include "svn_client.h"#include "svn_pools.h"#include "svn_error.h"#include "svn_time.h"#include "svn_config.h"#include "client.h"/*** Code. ***//* Attempt to revert PATH, recursively if RECURSIVE is true and PATH is a directory, else non-recursively. Consult CTX to determine whether or not to revert timestamp to the time of last commit ('use-commit-times = yes'). Use POOL for temporary allocation. If PATH is unversioned, return SVN_ERR_UNVERSIONED_RESOURCE. */static svn_error_t *revert(const char *path, svn_boolean_t recursive, svn_boolean_t use_commit_times, svn_client_ctx_t *ctx, apr_pool_t *pool){ svn_wc_adm_access_t *adm_access, *target_access; const char *target; svn_error_t *err; SVN_ERR(svn_wc_adm_open_anchor(&adm_access, &target_access, &target, path, TRUE, recursive ? -1 : 0, ctx->cancel_func, ctx->cancel_baton, pool)); err = svn_wc_revert2(path, adm_access, recursive, use_commit_times, ctx->cancel_func, ctx->cancel_baton, ctx->notify_func2, ctx->notify_baton2, pool); if (err) { /* If target isn't versioned, just send a 'skip' notification and move on. */ if (err->apr_err == SVN_ERR_ENTRY_NOT_FOUND || err->apr_err == SVN_ERR_UNVERSIONED_RESOURCE) { if (ctx->notify_func2) (*ctx->notify_func2) (ctx->notify_baton2, svn_wc_create_notify(path, svn_wc_notify_skip, pool), pool); svn_error_clear(err); } else return err; } SVN_ERR(svn_wc_adm_close(adm_access)); return SVN_NO_ERROR;}svn_error_t *svn_client_revert(const apr_array_header_t *paths, svn_boolean_t recursive, svn_client_ctx_t *ctx, apr_pool_t *pool){ apr_pool_t *subpool; svn_error_t *err = SVN_NO_ERROR; int i; svn_config_t *cfg; svn_boolean_t use_commit_times; cfg = ctx->config ? apr_hash_get(ctx->config, SVN_CONFIG_CATEGORY_CONFIG, APR_HASH_KEY_STRING) : NULL; SVN_ERR(svn_config_get_bool(cfg, &use_commit_times, SVN_CONFIG_SECTION_MISCELLANY, SVN_CONFIG_OPTION_USE_COMMIT_TIMES, FALSE)); subpool = svn_pool_create(pool); for (i = 0; i < paths->nelts; i++) { const char *path = APR_ARRAY_IDX(paths, i, const char *); svn_pool_clear(subpool); /* See if we've been asked to cancel this operation. */ if ((ctx->cancel_func) && ((err = ctx->cancel_func(ctx->cancel_baton)))) goto errorful; err = revert(path, recursive, use_commit_times, ctx, subpool); if (err) goto errorful; } errorful: svn_pool_destroy(subpool); /* Sleep to ensure timestamp integrity. */ svn_sleep_for_timestamps(); return err;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -