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

📄 dav_svn.h

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * dav_svn.h: types, functions, macros for the DAV/SVN Apache module * * ==================================================================== * 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/. * ==================================================================== */#ifndef DAV_SVN_H#define DAV_SVN_H#include <httpd.h>#include <http_log.h>#include <apr_tables.h>#include <apr_xml.h>#include <mod_dav.h>#include "svn_error.h"#include "svn_fs.h"#include "svn_repos.h"#include "svn_path.h"#ifdef __cplusplusextern "C" {#endif /* __cplusplus *//* what the one VCC is called */#define DAV_SVN_DEFAULT_VCC_NAME        "default"/* a pool-key for the shared dav_svn_root used by autoversioning  */#define DAV_SVN_AUTOVERSIONING_ACTIVITY "svn-autoversioning-activity"/* dav_svn_repos * * Record information about the repository that a resource belongs to. * This structure will be shared between multiple resources so that we * can optimized our FS access. * * Note that we do not refcount this structure. Presumably, we will need * it throughout the life of the request. Therefore, we can just leave it * for the request pool to cleanup/close. * * Also, note that it is possible that two resources may have distinct * dav_svn_repos structures, yet refer to the same repository. This is * allowed by the SVN FS interface. * * ### should we attempt to merge them when we detect this situation in * ### places like is_same_resource, is_parent_resource, or copy/move? * ### I say yes: the FS will certainly have an easier time if there is * ### only a single FS open; otherwise, it will have to work a bit harder * ### to keep the things in sync. */typedef struct {  apr_pool_t *pool;     /* request_rec -> pool */  /* Remember the root URL path of this repository (just a path; no     scheme, host, or port).     Example: the URI is "http://host/repos/file", this will be "/repos".     This always starts with "/", and if there are any components     beyond that, then it does not end with "/".  */  const char *root_path;  /* Remember an absolute URL for constructing other URLs. In the above     example, this would be "http://host" (note: no trailing slash)  */  const char *base_url;  /* Remember the special URI component for this repository */  const char *special_uri;  /* This records the filesystem path to the SVN FS */  const char *fs_path;  /* The name of this repository */  const char *repo_name;  /* The URI of the XSL transform for directory indexes */  const char *xslt_uri;  /* Whether autoversioning is active for this repository. */  svn_boolean_t autoversioning;  /* the open repository */  svn_repos_t *repos;  /* a cached copy of REPOS->fs above. */  svn_fs_t *fs;  /* the user operating against this repository */  const char *username;  /* is the client a Subversion client? */  svn_boolean_t is_svn_client;} dav_svn_repos;/*** dav_svn_private_restype: identifiers for our different private resources**** There are some resources within mod_dav_svn that are "privately defined".** This isn't so much to prevent other people from knowing what they are,** but merely that mod_dav doesn't have a standard name for them.*/enum dav_svn_private_restype {  DAV_SVN_RESTYPE_UNSET,  DAV_SVN_RESTYPE_ROOT_COLLECTION,      /* .../!svn/     */  DAV_SVN_RESTYPE_VER_COLLECTION,       /* .../!svn/ver/ */  DAV_SVN_RESTYPE_HIS_COLLECTION,       /* .../!svn/his/ */  DAV_SVN_RESTYPE_WRK_COLLECTION,       /* .../!svn/wrk/ */  DAV_SVN_RESTYPE_ACT_COLLECTION,       /* .../!svn/act/ */  DAV_SVN_RESTYPE_VCC_COLLECTION,       /* .../!svn/vcc/ */  DAV_SVN_RESTYPE_BC_COLLECTION,        /* .../!svn/bc/  */  DAV_SVN_RESTYPE_BLN_COLLECTION,       /* .../!svn/bln/ */  DAV_SVN_RESTYPE_WBL_COLLECTION,       /* .../!svn/wbl/ */  DAV_SVN_RESTYPE_VCC,                  /* .../!svn/vcc/NAME */  DAV_SVN_RESTYPE_PARENTPATH_COLLECTION /* see SVNParentPath directive */};/* store info about a root in a repository */typedef struct {  /* If a root within the FS has been opened, the value is stored here.     Otherwise, this field is NULL. */  svn_fs_root_t *root;  /* If the root has been opened, and it was opened for a specific revision,     then it is contained in REV. If the root is unopened or corresponds to     a transaction, then REV will be SVN_INVALID_REVNUM. */  svn_revnum_t rev;  /* If this resource is an activity or part of an activity, this specifies     the ID of that activity. It may not (yet) correspond to a transaction     in the FS.     WORKING and ACTIVITY resources use this field.  */  const char *activity_id;  /* If the root is part of a transaction, this contains the FS's tranaction     name. It may be NULL if this root corresponds to a specific revision.     It may also be NULL if we have not opened the root yet.     WORKING and ACTIVITY resources use this field.  */  const char *txn_name;  /* If the root is part of a transaction, this contains the FS's transaction     handle. It may be NULL if this root corresponds to a specific revision.     It may also be NULL if we have not opened the transaction yet.     WORKING resources use this field.  */  svn_fs_txn_t *txn;} dav_svn_root;/* internal structure to hold information about this resource */struct dav_resource_private {  /* Path from the SVN repository root to this resource. This value has     a leading slash. It will never have a trailing slash, even if the     resource represents a collection.     For example: URI is http://host/repos/file -- path will be "/file".     NOTE: this path is from the URI and does NOT necessarily correspond           to a path within the FS repository.  */  svn_stringbuf_t *uri_path;  /* The FS repository path to this resource, with a leading "/". Note     that this is "/" the root. This value will be NULL for resources     that have no corresponding resource within the repository (such as     the PRIVATE resources, Baselines, or Working Baselines). */  const char *repos_path;  /* the FS repository this resource is associated with */  dav_svn_repos *repos;  /* what FS root this resource occurs within */  dav_svn_root root;  /* for PRIVATE resources: the private resource type */  enum dav_svn_private_restype restype;  /* The request which created this resource.  We need this to     generate subrequests. */  request_rec *r;  /* ### hack to deal with the Content-Type header on a PUT */  int is_svndiff;  /* ### record the base for computing a delta during a GET */  const char *delta_base;  /* SVNDIFF version we can transmit to the client.  */  int svndiff_version;  /* the value of any SVN_DAV_OPTIONS_HEADER that came in the request */  const char *svn_client_options;  /* the revnum value from a possible SVN_DAV_VERSION_NAME_HEADER */  svn_revnum_t version_name;  /* Hex MD5 digests for base text and resultant fulltext.     Either or both of these may be null, in which case ignored. */  const char *base_checksum;  const char *result_checksum;  /* was this resource auto-checked-out? */  svn_boolean_t auto_checked_out;  /* Pool to allocate temporary data from */  apr_pool_t *pool;};/*  LIVE PROPERTY HOOKS  These are standard hooks defined by mod_dav. We implement them to expose  various live properties on the resources under our control.  gather_propsets: appends URIs into the array; the property set URIs are                   used to specify which sets of custom properties we                   define/expose.  find_liveprop: given a namespace and name, return the hooks for the                 provider who defines that property.  insert_all_liveprops: for a given resource, insert all of the live                        properties defined on that resource. The properties                        are inserted according to the WHAT parameter.*/void dav_svn_gather_propsets(apr_array_header_t *uris);int dav_svn_find_liveprop(const dav_resource *resource,                          const char *ns_uri, const char *name,                          const dav_hooks_liveprop **hooks);void dav_svn_insert_all_liveprops(request_rec *r, const dav_resource *resource,                                  dav_prop_insert what, apr_text_header *phdr);/* register our live property URIs with mod_dav. */void dav_svn_register_uris(apr_pool_t *p);/* generate an ETag for RESOURCE and return it, allocated in POOL. */const char * dav_svn_getetag(const dav_resource *resource, apr_pool_t *pool);/* our hooks structures; these are gathered into a dav_provider */extern const dav_hooks_repository dav_svn_hooks_repos;extern const dav_hooks_propdb dav_svn_hooks_propdb;extern const dav_hooks_liveprop dav_svn_hooks_liveprop;extern const dav_hooks_vsn dav_svn_hooks_vsn;extern const dav_hooks_locks dav_svn_hooks_locks;/* for the repository referred to by this request, where is the SVN FS? */const char *dav_svn_get_fs_path(request_rec *r);const char *dav_svn_get_fs_parent_path(request_rec *r);/* for the repository referred to by this request, is autoversioning active? */svn_boolean_t dav_svn_get_autoversioning_flag(request_rec *r);/* for the repository referred to by this request, are subrequests active? */svn_boolean_t dav_svn_get_pathauthz_flag(request_rec *r);/* for the repository referred to by this request, is a GET of   SVNParentPath allowed? */svn_boolean_t dav_svn_get_list_parentpath_flag(request_rec *r);/* SPECIAL URI   SVN needs to create many types of "pseudo resources" -- resources   that don't correspond to the users' files/directories in the   repository. Specifically, these are:   - working resources   - activities   - version resources   - version history resources   Each of these will be placed under a portion of the URL namespace   that defines the SVN repository. For example, let's say the user   has configured an SVN repository at http://host/svn/repos. The   special resources could be configured to live at .../!svn/ under   that repository. Thus, an activity might be located at   http://host/svn/repos/!svn/act/1234.   The special URI is configurable on a per-server basis and defaults   to "!svn".   NOTE: the special URI is RELATIVE to the "root" of the   repository. The root is generally available only to   dav_svn_get_resource(). This is okay, however, because we can cache   the root_dir when the resource structure is built.*//* Return the special URI to be used for this resource. */const char *dav_svn_get_special_uri(request_rec *r);/* Return a descriptive name for the repository */const char *dav_svn_get_repo_name(request_rec *r);/* Return the URI of an XSL transform stylesheet */const char *dav_svn_get_xslt_uri(request_rec *r);/* Convert an svn_error_t into a dav_error, pushing another error based on   MESSAGE if MESSAGE is not NULL.  Use the provided HTTP status for the   DAV errors.  Allocate new DAV errors from POOL.   NOTE: this function destroys (cleanly, of course) SERR after it has   copied/converted its data to the new DAV error.   NOTE: MESSAGE needs to hang around for the lifetime of the error since   the current implementation doesn't copy it!  Lots of callers pass static   string constant. */dav_error *dav_svn_convert_err(svn_error_t *serr, int status,                               const char *message, apr_pool_t *pool);/* A wrapper around mod_dav's dav_new_error_tag, mod_dav_svn uses this   instead of the mod_dav function to enable special mod_dav_svn specific

⌨️ 快捷键说明

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