00001 /** 00002 * @copyright 00003 * ==================================================================== 00004 * Licensed to the Apache Software Foundation (ASF) under one 00005 * or more contributor license agreements. See the NOTICE file 00006 * distributed with this work for additional information 00007 * regarding copyright ownership. The ASF licenses this file 00008 * to you under the Apache License, Version 2.0 (the 00009 * "License"); you may not use this file except in compliance 00010 * with the License. You may obtain a copy of the License at 00011 * 00012 * http://www.apache.org/licenses/LICENSE-2.0 00013 * 00014 * Unless required by applicable law or agreed to in writing, 00015 * software distributed under the License is distributed on an 00016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 00017 * KIND, either express or implied. See the License for the 00018 * specific language governing permissions and limitations 00019 * under the License. 00020 * ==================================================================== 00021 * @endcopyright 00022 * 00023 * @file svn_props.h 00024 * @brief Subversion properties 00025 */ 00026 00027 /* ==================================================================== */ 00028 00029 #ifndef SVN_PROPS_H 00030 #define SVN_PROPS_H 00031 00032 #include <apr_pools.h> /* for apr_pool_t */ 00033 #include <apr_tables.h> /* for apr_array_header_t */ 00034 #include <apr_hash.h> /* for apr_hash_t */ 00035 00036 #include "svn_types.h" /* for svn_boolean_t, svn_error_t */ 00037 #include "svn_string.h" /* for svn_string_t */ 00038 00039 #ifdef __cplusplus 00040 extern "C" { 00041 #endif /* __cplusplus */ 00042 00043 /** 00044 * @defgroup svn_props_support Properties management utilities 00045 * @{ 00046 */ 00047 00048 00049 00050 /** A general in-memory representation of a single property. Most of 00051 * the time, property lists will be stored completely in hashes. But 00052 * sometimes it's useful to have an "ordered" collection of 00053 * properties, in which case we use an array of these structures. 00054 * 00055 * Also: sometimes we want a list that represents a set of property 00056 * *changes*, and in this case, an @c apr_hash_t won't work -- there's no 00057 * way to represent a property deletion, because we can't store a @c NULL 00058 * value in a hash. So instead, we use these structures. 00059 */ 00060 typedef struct svn_prop_t 00061 { 00062 const char *name; /**< Property name */ 00063 const svn_string_t *value; /**< Property value */ 00064 } svn_prop_t; 00065 00066 00067 /** 00068 * Return a duplicate of @a prop, allocated in @a pool. No part of the new 00069 * structure will be shared with @a prop. 00070 * 00071 * @since New in 1.3. 00072 */ 00073 svn_prop_t * 00074 svn_prop_dup(const svn_prop_t *prop, 00075 apr_pool_t *pool); 00076 00077 00078 /** 00079 * Duplicate an @a array of svn_prop_t items using @a pool. 00080 * 00081 * @since New in 1.3. 00082 */ 00083 apr_array_header_t * 00084 svn_prop_array_dup(const apr_array_header_t *array, 00085 apr_pool_t *pool); 00086 00087 00088 /** A structure to represent inherited properties. 00089 * 00090 * @since New in 1.8. 00091 */ 00092 typedef struct svn_prop_inherited_item_t 00093 { 00094 /** The absolute working copy path, relative filesystem path, or URL 00095 * from which the properties in @a prop_hash are inherited. (For 00096 * details about which path specification format is in use for a 00097 * particular instance of this structure, consult the documentation 00098 * for the API which produced it.) */ 00099 const char *path_or_url; 00100 00101 /** A hash of (<tt>const char *</tt>) inherited property names, and 00102 * (<tt>svn_string_t *</tt>) property values. */ 00103 apr_hash_t *prop_hash; 00104 00105 } svn_prop_inherited_item_t; 00106 00107 00108 /** 00109 * Given a hash (keys <tt>const char *</tt> and values <tt>const 00110 * svn_string_t</tt>) of properties, returns an array of svn_prop_t 00111 * items using @a pool. 00112 * 00113 * @since New in 1.5. 00114 */ 00115 apr_array_header_t * 00116 svn_prop_hash_to_array(const apr_hash_t *hash, 00117 apr_pool_t *pool); 00118 00119 /** 00120 * Given an array of svn_prop_t items, return a hash mapping const char * 00121 * property names to const svn_string_t * values. 00122 * 00123 * @warning The behaviour on #svn_prop_t objects with a @c NULL @c 00124 * svn_prop_t.value member is undefined. 00125 * 00126 * @since New in 1.7. 00127 */ 00128 apr_hash_t * 00129 svn_prop_array_to_hash(const apr_array_header_t *properties, 00130 apr_pool_t *result); 00131 00132 /** 00133 * Creates a deep copy of @a hash (keys <tt>const char *</tt> and 00134 * values <tt>const svn_string_t *</tt>) in @a pool. 00135 * 00136 * @since New in 1.6. 00137 */ 00138 apr_hash_t * 00139 svn_prop_hash_dup(const apr_hash_t *hash, 00140 apr_pool_t *pool); 00141 00142 /** 00143 * Return the value of property @a prop_name as it is in @a properties, 00144 * with values <tt>const svn_string_t</tt>. If @a prop_name is not 00145 * in @a properties or @a properties is NULL, return NULL. 00146 * 00147 * @since New in 1.7. 00148 */ 00149 const char * 00150 svn_prop_get_value(const apr_hash_t *properties, 00151 const char *prop_name); 00152 00153 /** 00154 * Subversion distinguishes among several kinds of properties, 00155 * particularly on the client-side. There is no "unknown" kind; if 00156 * there's nothing special about a property name, the default category 00157 * is @c svn_prop_regular_kind. 00158 */ 00159 typedef enum svn_prop_kind 00160 { 00161 /** In .svn/entries, i.e., author, date, etc. */ 00162 svn_prop_entry_kind, 00163 00164 /** Client-side only, stored by specific RA layer. */ 00165 svn_prop_wc_kind, 00166 00167 /** Seen if user does "svn proplist"; note that this includes some "svn:" 00168 * props and all user props, i.e. ones stored in the repository fs. 00169 */ 00170 svn_prop_regular_kind 00171 } svn_prop_kind_t; 00172 00173 /** Return the property kind of a property named @a prop_name. 00174 * 00175 * @since New in 1.8. 00176 */ 00177 svn_prop_kind_t 00178 svn_property_kind2(const char *prop_name); 00179 00180 /** Return the prop kind of a property named @a prop_name, and 00181 * (if @a prefix_len is non-@c NULL) set @a *prefix_len to the length of 00182 * the prefix of @a prop_name that was sufficient to distinguish its kind. 00183 * 00184 * @deprecated Provided for backward compatibility with the 1.7 API. 00185 */ 00186 SVN_DEPRECATED 00187 svn_prop_kind_t 00188 svn_property_kind(int *prefix_len, 00189 const char *prop_name); 00190 00191 00192 /** Return @c TRUE iff @a prop_name represents the name of a Subversion 00193 * property. That is, any property name in Subversion's name space for 00194 * versioned or unversioned properties, regardless whether the particular 00195 * property name is recognized. 00196 */ 00197 svn_boolean_t 00198 svn_prop_is_svn_prop(const char *prop_name); 00199 00200 00201 /** Return @c TRUE iff @a props has at least one property whose name 00202 * represents the name of a Subversion property, in the sense of 00203 * svn_prop_is_svn_prop(). 00204 * 00205 * @since New in 1.5. 00206 */ 00207 svn_boolean_t 00208 svn_prop_has_svn_prop(const apr_hash_t *props, 00209 apr_pool_t *pool); 00210 00211 /** Return @c TRUE iff @a prop_name is a Subversion property whose 00212 * value is interpreted as a boolean. 00213 * 00214 * @since New in 1.5. 00215 */ 00216 svn_boolean_t 00217 svn_prop_is_boolean(const char *prop_name); 00218 00219 /** Return @c TRUE iff @a prop_name is in the "svn:" name space and is a 00220 * known revision property ("svn:log" or "svn:date", e.g.). 00221 * 00222 * This will return @c FALSE for any property name that is not known by this 00223 * version of the library, even though the name may be known to other (for 00224 * example, later) Subversion software. 00225 * 00226 * @since New in 1.8. 00227 */ 00228 svn_boolean_t 00229 svn_prop_is_known_svn_rev_prop(const char *prop_name); 00230 00231 /** Return @c TRUE iff @a prop_name is in the "svn:" name space and is a 00232 * known versioned property that is allowed on a file and/or on a 00233 * directory ("svn:eol-style", "svn:ignore", or "svn:mergeinfo", e.g.). 00234 * 00235 * This will return @c FALSE for any property name that is not known 00236 * by this version of the library, even though the name may be known 00237 * to other (for example, later) Subversion software. 00238 * 00239 * @since New in 1.8. 00240 */ 00241 svn_boolean_t 00242 svn_prop_is_known_svn_node_prop(const char *prop_name); 00243 00244 /** Return @c TRUE iff @a prop_name is in the "svn:" name space and is 00245 * a known versioned property that is allowed on a file 00246 * ("svn:eol-style" or "svn:mergeinfo", e.g.). 00247 * 00248 * This will return @c FALSE for any property name that is not known 00249 * by this version of the library, even though the name may be known 00250 * to other (for example, later) Subversion software. 00251 * 00252 * @since New in 1.8. 00253 */ 00254 svn_boolean_t 00255 svn_prop_is_known_svn_file_prop(const char *prop_name); 00256 00257 /** Return @c TRUE iff @a prop_name is in the "svn:" name space and is 00258 * a known versioned property that is allowed on a directory 00259 * ("svn:ignore" or "svn:mergeinfo", e.g.). 00260 * 00261 * This will return @c FALSE for any property name that is not known 00262 * by this version of the library, even though the name may be known 00263 * to other (for example, later) Subversion software. 00264 * 00265 * @since New in 1.8. 00266 */ 00267 svn_boolean_t 00268 svn_prop_is_known_svn_dir_prop(const char *prop_name); 00269 00270 /** If @a prop_name requires that its value be stored as UTF8/LF in the 00271 * repository, then return @c TRUE. Else return @c FALSE. This is for 00272 * users of libsvn_client or libsvn_fs, since it their responsibility 00273 * to do this translation in both directions. (See 00274 * svn_subst_translate_string()/svn_subst_detranslate_string() for 00275 * help with this task.) 00276 */ 00277 svn_boolean_t 00278 svn_prop_needs_translation(const char *prop_name); 00279 00280 00281 /** Given a @a proplist array of @c svn_prop_t structures, allocate 00282 * three new arrays in @a pool. Categorize each property and then 00283 * create new @c svn_prop_t structures in the proper lists. Each new 00284 * @c svn_prop_t structure's fields will point to the same data within 00285 * @a proplist's structures. 00286 * 00287 * Callers may pass NULL for each of the property lists in which they 00288 * are uninterested. If no props exist in a certain category, and the 00289 * property list argument for that category is non-NULL, then that 00290 * array will come back with <tt>->nelts == 0</tt>. 00291 */ 00292 svn_error_t * 00293 svn_categorize_props(const apr_array_header_t *proplist, 00294 apr_array_header_t **entry_props, 00295 apr_array_header_t **wc_props, 00296 apr_array_header_t **regular_props, 00297 apr_pool_t *pool); 00298 00299 00300 /** Given two property hashes (<tt>const char *name</tt> -> <tt>const 00301 * svn_string_t *value</tt>), deduce the differences between them (from 00302 * @a source_props -> @c target_props). Set @a propdiffs to a new array of 00303 * @c svn_prop_t structures, with one entry for each property that differs, 00304 * including properties that exist in @a source_props or @a target_props but 00305 * not both. The @c value field of each entry is that property's value from 00306 * @a target_props or NULL if that property only exists in @a source_props. 00307 * 00308 * Allocate the array from @a pool. Allocate the contents of the array from 00309 * @a pool or by reference to the storage of the input hashes or both. 00310 * 00311 * For note, here's a quick little table describing the logic of this 00312 * routine: 00313 * 00314 * @verbatim 00315 source_props target_props event 00316 ------------ ------------ ----- 00317 value = foo value = NULL Deletion occurred. 00318 value = foo value = bar Set occurred (modification) 00319 value = NULL value = baz Set occurred (creation) @endverbatim 00320 */ 00321 svn_error_t * 00322 svn_prop_diffs(apr_array_header_t **propdiffs, 00323 const apr_hash_t *target_props, 00324 const apr_hash_t *source_props, 00325 apr_pool_t *pool); 00326 00327 00328 /** 00329 * Return @c TRUE iff @a prop_name is a valid property name. 00330 * 00331 * For now, "valid" means the ASCII subset of an XML "Name". 00332 * XML "Name" is defined at http://www.w3.org/TR/REC-xml#sec-common-syn 00333 * 00334 * @since New in 1.5. 00335 */ 00336 svn_boolean_t 00337 svn_prop_name_is_valid(const char *prop_name); 00338 00339 00340 00341 /* Defines for reserved ("svn:") property names. */ 00342 00343 /** All Subversion property names start with this. */ 00344 #define SVN_PROP_PREFIX "svn:" 00345 00346 00347 /** Visible properties 00348 * 00349 * These are regular properties that are attached to ordinary files 00350 * and dirs, and are visible (and tweakable) by svn client programs 00351 * and users. Adding these properties causes specific effects. 00352 * 00353 * @note the values of these properties are always UTF8-encoded with 00354 * LF line-endings. It is the burden of svn library users to enforce 00355 * this. Use svn_prop_needs_translation() to discover if a 00356 * certain property needs translation, and you can use 00357 * svn_subst_translate_string()/svn_subst_detranslate_string() 00358 * to do the translation. 00359 * 00360 * @defgroup svn_prop_visible_props Visible properties 00361 * @{ 00362 */ 00363 00364 /** Properties whose values are interpreted as booleans (such as 00365 * svn:executable, svn:needs_lock, and svn:special) always fold their 00366 * value to this. 00367 * 00368 * @since New in 1.5. 00369 */ 00370 #define SVN_PROP_BOOLEAN_TRUE "*" 00371 00372 /** The mime-type of a given file. */ 00373 #define SVN_PROP_MIME_TYPE SVN_PROP_PREFIX "mime-type" 00374 00375 /** The ignore patterns for a given directory. */ 00376 #define SVN_PROP_IGNORE SVN_PROP_PREFIX "ignore" 00377 00378 /** The line ending style for a given file. */ 00379 #define SVN_PROP_EOL_STYLE SVN_PROP_PREFIX "eol-style" 00380 00381 /** The "activated" keywords (for keyword substitution) for a given file. */ 00382 #define SVN_PROP_KEYWORDS SVN_PROP_PREFIX "keywords" 00383 00384 /** Set to either TRUE or FALSE if we want a file to be executable or not. */ 00385 #define SVN_PROP_EXECUTABLE SVN_PROP_PREFIX "executable" 00386 00387 /** The value to force the executable property to when set. 00388 * 00389 * @deprecated Provided for backward compatibility with the 1.4 API. 00390 * Use @c SVN_PROP_BOOLEAN_TRUE instead. 00391 */ 00392 #define SVN_PROP_EXECUTABLE_VALUE SVN_PROP_BOOLEAN_TRUE 00393 00394 /** Set to TRUE ('*') if we want a file to be set to read-only when 00395 * not locked. FALSE is indicated by deleting the property. */ 00396 #define SVN_PROP_NEEDS_LOCK SVN_PROP_PREFIX "needs-lock" 00397 00398 /** The value to force the needs-lock property to when set. 00399 * 00400 * @deprecated Provided for backward compatibility with the 1.4 API. 00401 * Use @c SVN_PROP_BOOLEAN_TRUE instead. 00402 */ 00403 #define SVN_PROP_NEEDS_LOCK_VALUE SVN_PROP_BOOLEAN_TRUE 00404 00405 /** Set if the file should be treated as a special file. */ 00406 #define SVN_PROP_SPECIAL SVN_PROP_PREFIX "special" 00407 00408 /** The value to force the special property to when set. 00409 * 00410 * @deprecated Provided for backward compatibility with the 1.4 API. 00411 * Use @c SVN_PROP_BOOLEAN_TRUE instead. 00412 */ 00413 #define SVN_PROP_SPECIAL_VALUE SVN_PROP_BOOLEAN_TRUE 00414 00415 /** Describes external items to check out into this directory. 00416 * 00417 * The format is a series of lines, each in the following format: 00418 * [-r REV] URL[@PEG] LOCALPATH 00419 * LOCALPATH is relative to the directory having this property. 00420 * REV pins the external to revision REV. 00421 * URL may be a full URL or a relative URL starting with one of: 00422 * ../ to the parent directory of the extracted external 00423 * ^/ to the repository root 00424 * / to the server root 00425 * // to the URL scheme 00426 * The following format is supported for interoperability with 00427 * Subversion 1.4 and earlier clients: 00428 * LOCALPATH [-r PEG] URL 00429 * The ambiguous format 'relative_path relative_path' is taken as 00430 * 'relative_url relative_path' with peg revision support. 00431 * Lines starting with a '#' character are ignored. 00432 */ 00433 #define SVN_PROP_EXTERNALS SVN_PROP_PREFIX "externals" 00434 00435 /** Merge info property used to record a resource's merge history. 00436 * 00437 * The format is a series of lines containing merge paths and revision 00438 * ranges, such as: 00439 * 00440 * @verbatim 00441 /trunk: 1-6,9,37-38 00442 /trunk/foo: 10 @endverbatim 00443 */ 00444 #define SVN_PROP_MERGEINFO SVN_PROP_PREFIX "mergeinfo" 00445 00446 /** Property used to record inheritable configuration auto-props. */ 00447 #define SVN_PROP_INHERITABLE_AUTO_PROPS SVN_PROP_PREFIX "auto-props" 00448 00449 /** Property used to record inheritable configuration ignores. */ 00450 #define SVN_PROP_INHERITABLE_IGNORES SVN_PROP_PREFIX "global-ignores" 00451 00452 /** Meta-data properties. 00453 * 00454 * The following properties are used for storing meta-data about 00455 * individual entries in the meta-data branches of subversion, 00456 * see issue #1256 or browseable at 00457 * http://svn.apache.org/viewvc/subversion/branches/meta-data-versioning/ . 00458 * Furthermore @c svntar (http://svn.borg.ch/svntar/) and @c FSVS 00459 * (http://fsvs.tigris.org/) use these, too. 00460 * 00461 * Please note that these formats are very UNIX-centric currently; 00462 * a bit of discussion about Windows can be read at 00463 * http://article.gmane.org/gmane.comp.version-control.subversion.devel/103991 00464 * 00465 * @defgroup svn_prop_meta_data Meta-data properties 00466 * @{ */ 00467 00468 /** The files' last modification time. 00469 * This is stored as string in the form @c "2008-08-07T07:38:51.008782Z", to 00470 * be converted by the functions @c svn_time_to_cstring() and 00471 * @c svn_time_from_cstring(). */ 00472 #define SVN_PROP_TEXT_TIME SVN_PROP_PREFIX "text-time" 00473 00474 /** The files' owner. 00475 * Stored as numeric ID, optionally followed by whitespace and the string: 00476 * @c "1000 pmarek". Parsers @b should accept any number of whitespace, 00477 * and writers @b should put exactly a single space. */ 00478 #define SVN_PROP_OWNER SVN_PROP_PREFIX "owner" 00479 00480 /** The files' group. 00481 * The same format as for @c SVN_PROP_OWNER, the owner-property. */ 00482 #define SVN_PROP_GROUP SVN_PROP_PREFIX "group" 00483 00484 /** The files' unix-mode. 00485 * Stored in octal, with a leading @c 0; may have 5 digits if any of @c setuid, 00486 * @c setgid or @c sticky are set; an example is @c "0644". */ 00487 #define SVN_PROP_UNIX_MODE SVN_PROP_PREFIX "unix-mode" 00488 00489 /** @} */ /* Meta-data properties */ 00490 00491 /** 00492 * This is a list of all user-visible and -settable versioned node 00493 * properties. 00494 * 00495 * @since New in 1.8. 00496 */ 00497 #define SVN_PROP_NODE_ALL_PROPS SVN_PROP_MIME_TYPE, \ 00498 SVN_PROP_IGNORE, \ 00499 SVN_PROP_EOL_STYLE, \ 00500 SVN_PROP_KEYWORDS, \ 00501 SVN_PROP_EXECUTABLE, \ 00502 SVN_PROP_NEEDS_LOCK, \ 00503 SVN_PROP_SPECIAL, \ 00504 SVN_PROP_EXTERNALS, \ 00505 SVN_PROP_MERGEINFO, \ 00506 SVN_PROP_INHERITABLE_AUTO_PROPS, \ 00507 SVN_PROP_INHERITABLE_IGNORES, \ 00508 \ 00509 SVN_PROP_TEXT_TIME, \ 00510 SVN_PROP_OWNER, \ 00511 SVN_PROP_GROUP, \ 00512 SVN_PROP_UNIX_MODE, 00513 00514 /** @} */ 00515 00516 /** WC props are props that are invisible to users: they're generated 00517 * by an RA layer, and stored in secret parts of .svn/. 00518 * 00519 * @defgroup svn_prop_invisible_props Invisible properties 00520 * @{ 00521 */ 00522 00523 /** The property name *prefix* that makes a property a "WC property". 00524 * 00525 * For example, WebDAV RA implementations might store a versioned-resource 00526 * url as a WC prop like this: 00527 * 00528 * <pre reason="Should use 'verbatim' instead, but Doxygen v1.6.1 & v1.7.1 00529 * then doesn't recognize the #define; presumably a bug."> 00530 name = svn:wc:dav_url 00531 val = http://www.example.com/repos/452348/e.289 </pre> 00532 * 00533 * The client will try to protect WC props by warning users against 00534 * changing them. The client will also send them back to the RA layer 00535 * when committing. 00536 */ 00537 #define SVN_PROP_WC_PREFIX SVN_PROP_PREFIX "wc:" 00538 00539 /** Another type of non-user-visible property. "Entry properties" are 00540 * stored as fields with the administrative 'entries' file. 00541 */ 00542 #define SVN_PROP_ENTRY_PREFIX SVN_PROP_PREFIX "entry:" 00543 00544 /** The revision this entry was last committed to on. */ 00545 #define SVN_PROP_ENTRY_COMMITTED_REV SVN_PROP_ENTRY_PREFIX "committed-rev" 00546 00547 /** The date this entry was last committed to on. */ 00548 #define SVN_PROP_ENTRY_COMMITTED_DATE SVN_PROP_ENTRY_PREFIX "committed-date" 00549 00550 /** The author who last committed to this entry. */ 00551 #define SVN_PROP_ENTRY_LAST_AUTHOR SVN_PROP_ENTRY_PREFIX "last-author" 00552 00553 /** The UUID of this entry's repository. */ 00554 #define SVN_PROP_ENTRY_UUID SVN_PROP_ENTRY_PREFIX "uuid" 00555 00556 /** The lock token for this entry. 00557 * @since New in 1.2. */ 00558 #define SVN_PROP_ENTRY_LOCK_TOKEN SVN_PROP_ENTRY_PREFIX "lock-token" 00559 00560 /** When custom, user-defined properties are passed over the wire, they will 00561 * have this prefix added to their name. 00562 */ 00563 #define SVN_PROP_CUSTOM_PREFIX SVN_PROP_PREFIX "custom:" 00564 00565 /** @} */ 00566 00567 /** 00568 * These are reserved properties attached to a "revision" object in 00569 * the repository filesystem. They can be queried by using 00570 * svn_fs_revision_prop(). 00571 * 00572 * @defgroup svn_props_revision_props Revision properties 00573 * @{ 00574 */ 00575 00576 /** The fs revision property that stores a commit's author. */ 00577 #define SVN_PROP_REVISION_AUTHOR SVN_PROP_PREFIX "author" 00578 00579 /** The fs revision property that stores a commit's log message. */ 00580 #define SVN_PROP_REVISION_LOG SVN_PROP_PREFIX "log" 00581 00582 /** The fs revision property that stores a commit's date. */ 00583 #define SVN_PROP_REVISION_DATE SVN_PROP_PREFIX "date" 00584 00585 /** The fs revision property that stores a commit's "original" date. 00586 * 00587 * The svn:date property must be monotonically increasing, along with 00588 * the revision number. In certain scenarios, this may pose a problem 00589 * when the revision represents a commit that occurred at a time which 00590 * does not fit within the sequencing required for svn:date. This can 00591 * happen, for instance, when the revision represents a commit to a 00592 * foreign version control system, or possibly when two Subversion 00593 * repositories are combined. This property can be used to record the 00594 * TRUE, original date of the commit. 00595 */ 00596 #define SVN_PROP_REVISION_ORIG_DATE SVN_PROP_PREFIX "original-date" 00597 00598 /** The presence of this fs revision property indicates that the 00599 * revision was automatically generated by the mod_dav_svn 00600 * autoversioning feature. The value is irrelevant. 00601 */ 00602 #define SVN_PROP_REVISION_AUTOVERSIONED SVN_PROP_PREFIX "autoversioned" 00603 00604 00605 /* More reserved revision props in the 'svn:' namespace, used by the 00606 svnsync tool: */ 00607 00608 /** Prefix for all svnsync custom properties. 00609 * @since New in 1.4. 00610 */ 00611 #define SVNSYNC_PROP_PREFIX SVN_PROP_PREFIX "sync-" 00612 00613 /* The following revision properties are set on revision 0 of 00614 * destination repositories by svnsync: 00615 */ 00616 00617 /** Used to enforce mutually exclusive destination repository access. 00618 * @since New in 1.4. 00619 */ 00620 #define SVNSYNC_PROP_LOCK SVNSYNC_PROP_PREFIX "lock" 00621 00622 /** Identifies the repository's source URL. 00623 * @since New in 1.4. 00624 */ 00625 #define SVNSYNC_PROP_FROM_URL SVNSYNC_PROP_PREFIX "from-url" 00626 /** Identifies the repository's source UUID. 00627 * @since New in 1.4. 00628 */ 00629 #define SVNSYNC_PROP_FROM_UUID SVNSYNC_PROP_PREFIX "from-uuid" 00630 00631 /** Identifies the last completely mirrored revision. 00632 * @since New in 1.4. 00633 */ 00634 #define SVNSYNC_PROP_LAST_MERGED_REV SVNSYNC_PROP_PREFIX "last-merged-rev" 00635 00636 /** Identifies the revision currently being copied. 00637 * @since New in 1.4. 00638 */ 00639 #define SVNSYNC_PROP_CURRENTLY_COPYING SVNSYNC_PROP_PREFIX "currently-copying" 00640 00641 00642 /** 00643 * This is a list of all revision properties. 00644 */ 00645 #define SVN_PROP_REVISION_ALL_PROPS SVN_PROP_REVISION_AUTHOR, \ 00646 SVN_PROP_REVISION_LOG, \ 00647 SVN_PROP_REVISION_DATE, \ 00648 SVN_PROP_REVISION_AUTOVERSIONED, \ 00649 SVN_PROP_REVISION_ORIG_DATE, \ 00650 SVNSYNC_PROP_LOCK, \ 00651 SVNSYNC_PROP_FROM_URL, \ 00652 SVNSYNC_PROP_FROM_UUID, \ 00653 SVNSYNC_PROP_LAST_MERGED_REV, \ 00654 SVNSYNC_PROP_CURRENTLY_COPYING, 00655 00656 /** @} */ 00657 00658 /** 00659 * These are reserved properties attached to a "transaction" object in 00660 * the repository filesystem in advance of the pre-commit hook script 00661 * running on the server, but then automatically removed from the 00662 * transaction before its promotion to a new revision. 00663 * 00664 * @defgroup svn_props_ephemeral_txnprops Ephemeral transaction properties 00665 * @{ 00666 */ 00667 00668 /** The prefix used for all (ephemeral) transaction properties. 00669 * 00670 * @since New in 1.8. 00671 */ 00672 #define SVN_PROP_TXN_PREFIX SVN_PROP_PREFIX "txn-" 00673 00674 /** Identifies the client version compability level. For clients 00675 * compiled against Subversion libraries, this is @c SVN_VER_NUMBER. 00676 * Third-party implementations are advised to use similar formatting 00677 * for values of this property. 00678 * 00679 * @since New in 1.8. 00680 */ 00681 #define SVN_PROP_TXN_CLIENT_COMPAT_VERSION \ 00682 SVN_PROP_TXN_PREFIX "client-compat-version" 00683 00684 /** Identifies the client's user agent string, if any. 00685 * 00686 * @since New in 1.8. 00687 */ 00688 #define SVN_PROP_TXN_USER_AGENT \ 00689 SVN_PROP_TXN_PREFIX "user-agent" 00690 00691 /** The prefix reserved for copies of (ephemeral) transaction 00692 * properties designed to outlive the transaction. Administrators may 00693 * choose to, in their pre-commit hook scripts, copy the values of one 00694 * or more properties named @c SVN_PROP_TXN_PREFIX + "something" 00695 * to new properties named @c SVN_PROP_REVISION_PREFIX + "something", 00696 * allowing that information to survive the commit-time removal of 00697 * ephemeral transaction properties. 00698 * 00699 * @since New in 1.8. 00700 */ 00701 #define SVN_PROP_REVISION_PREFIX SVN_PROP_PREFIX "revision-" 00702 00703 00704 /** @} */ 00705 00706 /** @} */ 00707 00708 00709 00710 #ifdef __cplusplus 00711 } 00712 #endif /* __cplusplus */ 00713 00714 #endif /* SVN_PROPS_H */