⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fs-wrap.c

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
  else  /* rev is either unreadable or only partially readable */    {      return svn_error_createf         (SVN_ERR_AUTHZ_UNREADABLE, NULL,         _("Write denied:  not authorized to read all of revision %ld"), rev);    }  return SVN_NO_ERROR;}svn_error_t *svn_repos_fs_change_rev_prop(svn_repos_t *repos,                             svn_revnum_t rev,                             const char *author,                             const char *name,                             const svn_string_t *new_value,                             apr_pool_t *pool){  return svn_repos_fs_change_rev_prop2(repos, rev, author, name, new_value,                                       NULL, NULL, pool);  }     svn_error_t *svn_repos_fs_revision_prop(svn_string_t **value_p,                           svn_repos_t *repos,                           svn_revnum_t rev,                           const char *propname,                           svn_repos_authz_func_t authz_read_func,                           void *authz_read_baton,                           apr_pool_t *pool){  int readability = rev_readable;  if (authz_read_func)    SVN_ERR(get_readability(&readability, repos->fs, rev,                            authz_read_func, authz_read_baton, pool));      if (readability == rev_unreadable)    {      /* Property?  What property? */      *value_p = NULL;    }  else if (readability == rev_partially_readable)    {            /* Only svn:author and svn:date are fetchable. */      if ((strncmp(propname, SVN_PROP_REVISION_AUTHOR,                   strlen(SVN_PROP_REVISION_AUTHOR)) != 0)          && (strncmp(propname, SVN_PROP_REVISION_DATE,                      strlen(SVN_PROP_REVISION_DATE)) != 0))        *value_p = NULL;      else        SVN_ERR(svn_fs_revision_prop(value_p, repos->fs,                                     rev, propname, pool));    }  else /* wholly readable revision */    {      SVN_ERR(svn_fs_revision_prop(value_p, repos->fs, rev, propname, pool));    }  return SVN_NO_ERROR;}svn_error_t *svn_repos_fs_revision_proplist(apr_hash_t **table_p,                               svn_repos_t *repos,                               svn_revnum_t rev,                               svn_repos_authz_func_t authz_read_func,                               void *authz_read_baton,                               apr_pool_t *pool){  int readability = rev_readable;  if (authz_read_func)    SVN_ERR(get_readability(&readability, repos->fs, rev,                            authz_read_func, authz_read_baton, pool));      if (readability == rev_unreadable)    {      /* Return an empty hash. */      *table_p = apr_hash_make(pool);    }  else if (readability == rev_partially_readable)    {            apr_hash_t *tmphash;      svn_string_t *value;      /* Produce two property hashtables, both in POOL. */      SVN_ERR(svn_fs_revision_proplist(&tmphash, repos->fs, rev, pool));      *table_p = apr_hash_make(pool);      /* If they exist, we only copy svn:author and svn:date into the         'real' hashtable being returned. */      value = apr_hash_get(tmphash, SVN_PROP_REVISION_AUTHOR,                           APR_HASH_KEY_STRING);      if (value)        apr_hash_set(*table_p, SVN_PROP_REVISION_AUTHOR,                     APR_HASH_KEY_STRING, value);      value = apr_hash_get(tmphash, SVN_PROP_REVISION_DATE,                           APR_HASH_KEY_STRING);      if (value)        apr_hash_set(*table_p, SVN_PROP_REVISION_DATE,                     APR_HASH_KEY_STRING, value);    }  else /* wholly readable revision */    {      SVN_ERR(svn_fs_revision_proplist(table_p, repos->fs, rev, pool));    }  return SVN_NO_ERROR;}svn_error_t *svn_repos_fs_lock(svn_lock_t **lock,                  svn_repos_t *repos,                  const char *path,                  const char *token,                  const char *comment,                  svn_boolean_t is_dav_comment,                  apr_time_t expiration_date,                  svn_revnum_t current_rev,                  svn_boolean_t steal_lock,                  apr_pool_t *pool){  svn_error_t *err;  svn_fs_access_t *access_ctx = NULL;  const char *username = NULL;  apr_array_header_t *paths;  /* Setup an array of paths in anticipation of the ra layers handling     multiple locks in one request (1.3 most likely).  This is only     used by svn_repos__hooks_post_lock. */  paths = apr_array_make(pool, 1, sizeof(const char *));  APR_ARRAY_PUSH(paths, const char *) = path;  SVN_ERR(svn_fs_get_access(&access_ctx, repos->fs));  if (access_ctx)    SVN_ERR(svn_fs_access_get_username(&username, access_ctx));  if (! username)    return svn_error_createf       (SVN_ERR_FS_NO_USER, NULL,       "Cannot lock path '%s', no authenticated username available.", path);    /* Run pre-lock hook.  This could throw error, preventing     svn_fs_lock() from happening. */  SVN_ERR(svn_repos__hooks_pre_lock(repos, path, username, pool));  /* Lock. */  SVN_ERR(svn_fs_lock(lock, repos->fs, path, token, comment, is_dav_comment,                      expiration_date, current_rev, steal_lock, pool));  /* Run post-lock hook. */  if ((err = svn_repos__hooks_post_lock(repos, paths, username, pool)))    return svn_error_create      (SVN_ERR_REPOS_POST_LOCK_HOOK_FAILED, err,       "Lock succeeded, but post-lock hook failed");  return SVN_NO_ERROR;}svn_error_t *svn_repos_fs_unlock(svn_repos_t *repos,                    const char *path,                    const char *token,                    svn_boolean_t break_lock,                    apr_pool_t *pool){  svn_error_t *err;  svn_fs_access_t *access_ctx = NULL;  const char *username = NULL;  /* Setup an array of paths in anticipation of the ra layers handling     multiple locks in one request (1.3 most likely).  This is only     used by svn_repos__hooks_post_lock. */  apr_array_header_t *paths = apr_array_make(pool, 1, sizeof(const char *));  APR_ARRAY_PUSH(paths, const char *) = path;  SVN_ERR(svn_fs_get_access(&access_ctx, repos->fs));  if (access_ctx)    SVN_ERR(svn_fs_access_get_username(&username, access_ctx));  if (! break_lock && ! username)    return svn_error_createf       (SVN_ERR_FS_NO_USER, NULL,       _("Cannot unlock path '%s', no authenticated username available"),       path);  /* Run pre-unlock hook.  This could throw error, preventing     svn_fs_unlock() from happening. */  SVN_ERR(svn_repos__hooks_pre_unlock(repos, path, username, pool));  /* Unlock. */  SVN_ERR(svn_fs_unlock(repos->fs, path, token, break_lock, pool));  /* Run post-unlock hook. */  if ((err = svn_repos__hooks_post_unlock(repos, paths, username, pool)))    return svn_error_create      (SVN_ERR_REPOS_POST_UNLOCK_HOOK_FAILED, err,       _("Unlock succeeded, but post-unlock hook failed"));  return SVN_NO_ERROR;}struct get_locks_baton_t{  svn_fs_t *fs;  svn_fs_root_t *head_root;  svn_repos_authz_func_t authz_read_func;  void *authz_read_baton;  apr_hash_t *locks;};/* This implements the svn_fs_get_locks_callback_t interface. */static svn_error_t *get_locks_callback(void *baton,                    svn_lock_t *lock,                    apr_pool_t *pool){  struct get_locks_baton_t *b = baton;  svn_boolean_t readable = TRUE;  apr_pool_t *hash_pool = apr_hash_pool_get(b->locks);  /* If there's auth to deal with, deal with it. */  if (b->authz_read_func)    {      SVN_ERR(b->authz_read_func(&readable, b->head_root, lock->path,                                 b->authz_read_baton, pool));    }  /* If we can read this lock path, add the lock to the return hash. */  if (readable)    apr_hash_set(b->locks, apr_pstrdup(hash_pool, lock->path),                  APR_HASH_KEY_STRING, svn_lock_dup(lock, hash_pool));  return SVN_NO_ERROR;}svn_error_t *svn_repos_fs_get_locks(apr_hash_t **locks,                       svn_repos_t *repos,                       const char *path,                       svn_repos_authz_func_t authz_read_func,                       void *authz_read_baton,                       apr_pool_t *pool){  apr_hash_t *all_locks = apr_hash_make(pool);  svn_revnum_t head_rev;  struct get_locks_baton_t baton;  /* Locks are always said to apply to HEAD revision, so we'll check     to see if locked-paths are readable in HEAD as well. */  SVN_ERR(svn_fs_youngest_rev(&head_rev, repos->fs, pool));  /* Populate our callback baton. */  baton.fs = repos->fs;  baton.locks = all_locks;  baton.authz_read_func = authz_read_func;  baton.authz_read_baton = authz_read_baton;  SVN_ERR(svn_fs_revision_root(&(baton.head_root), repos->fs,                                head_rev, pool));  /* Get all the locks. */  SVN_ERR(svn_fs_get_locks(repos->fs, path, get_locks_callback,                           &baton, pool));  *locks = baton.locks;  return SVN_NO_ERROR;}/*  * vim:ts=4:sw=4:expandtab:tw=80:fo=tcroq  * vim:isk=a-z,A-Z,48-57,_,.,-,>  * vim:cino=>1s,e0,n0,f0,{.5s,}0,^-.5s,=.5s,t0,+1s,c3,(0,u0,\:0 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -