1251881Speter/** 2251881Speter * @copyright 3251881Speter * ==================================================================== 4251881Speter * Licensed to the Apache Software Foundation (ASF) under one 5251881Speter * or more contributor license agreements. See the NOTICE file 6251881Speter * distributed with this work for additional information 7251881Speter * regarding copyright ownership. The ASF licenses this file 8251881Speter * to you under the Apache License, Version 2.0 (the 9251881Speter * "License"); you may not use this file except in compliance 10251881Speter * with the License. You may obtain a copy of the License at 11251881Speter * 12251881Speter * http://www.apache.org/licenses/LICENSE-2.0 13251881Speter * 14251881Speter * Unless required by applicable law or agreed to in writing, 15251881Speter * software distributed under the License is distributed on an 16251881Speter * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17251881Speter * KIND, either express or implied. See the License for the 18251881Speter * specific language governing permissions and limitations 19251881Speter * under the License. 20251881Speter * ==================================================================== 21251881Speter * @endcopyright 22251881Speter * 23251881Speter * @file svn_props.h 24251881Speter * @brief Subversion properties 25251881Speter */ 26251881Speter 27251881Speter/* ==================================================================== */ 28251881Speter 29251881Speter#ifndef SVN_PROPS_H 30251881Speter#define SVN_PROPS_H 31251881Speter 32251881Speter#include <apr_pools.h> /* for apr_pool_t */ 33251881Speter#include <apr_tables.h> /* for apr_array_header_t */ 34251881Speter#include <apr_hash.h> /* for apr_hash_t */ 35251881Speter 36251881Speter#include "svn_types.h" /* for svn_boolean_t, svn_error_t */ 37251881Speter#include "svn_string.h" /* for svn_string_t */ 38251881Speter 39251881Speter#ifdef __cplusplus 40251881Speterextern "C" { 41251881Speter#endif /* __cplusplus */ 42251881Speter 43251881Speter/** 44251881Speter * @defgroup svn_props_support Properties management utilities 45251881Speter * @{ 46251881Speter */ 47251881Speter 48251881Speter 49251881Speter 50251881Speter/** A general in-memory representation of a single property. Most of 51251881Speter * the time, property lists will be stored completely in hashes. But 52251881Speter * sometimes it's useful to have an "ordered" collection of 53251881Speter * properties, in which case we use an array of these structures. 54251881Speter * 55251881Speter * Also: sometimes we want a list that represents a set of property 56251881Speter * *changes*, and in this case, an @c apr_hash_t won't work -- there's no 57251881Speter * way to represent a property deletion, because we can't store a @c NULL 58251881Speter * value in a hash. So instead, we use these structures. 59251881Speter */ 60251881Spetertypedef struct svn_prop_t 61251881Speter{ 62251881Speter const char *name; /**< Property name */ 63251881Speter const svn_string_t *value; /**< Property value */ 64251881Speter} svn_prop_t; 65251881Speter 66251881Speter 67251881Speter/** 68251881Speter * Return a duplicate of @a prop, allocated in @a pool. No part of the new 69251881Speter * structure will be shared with @a prop. 70251881Speter * 71251881Speter * @since New in 1.3. 72251881Speter */ 73251881Spetersvn_prop_t * 74251881Spetersvn_prop_dup(const svn_prop_t *prop, 75251881Speter apr_pool_t *pool); 76251881Speter 77251881Speter 78251881Speter/** 79251881Speter * Duplicate an @a array of svn_prop_t items using @a pool. 80251881Speter * 81251881Speter * @since New in 1.3. 82251881Speter */ 83251881Speterapr_array_header_t * 84251881Spetersvn_prop_array_dup(const apr_array_header_t *array, 85251881Speter apr_pool_t *pool); 86251881Speter 87251881Speter 88251881Speter/** A structure to represent inherited properties. 89251881Speter * 90251881Speter * @since New in 1.8. 91251881Speter */ 92251881Spetertypedef struct svn_prop_inherited_item_t 93251881Speter{ 94251881Speter /** The absolute working copy path, relative filesystem path, or URL 95251881Speter * from which the properties in @a prop_hash are inherited. (For 96251881Speter * details about which path specification format is in use for a 97251881Speter * particular instance of this structure, consult the documentation 98251881Speter * for the API which produced it.) */ 99251881Speter const char *path_or_url; 100251881Speter 101251881Speter /** A hash of (<tt>const char *</tt>) inherited property names, and 102251881Speter * (<tt>svn_string_t *</tt>) property values. */ 103251881Speter apr_hash_t *prop_hash; 104251881Speter 105251881Speter} svn_prop_inherited_item_t; 106251881Speter 107251881Speter 108251881Speter/** 109251881Speter * Given a hash (keys <tt>const char *</tt> and values <tt>const 110251881Speter * svn_string_t</tt>) of properties, returns an array of svn_prop_t 111251881Speter * items using @a pool. 112251881Speter * 113251881Speter * @since New in 1.5. 114251881Speter */ 115251881Speterapr_array_header_t * 116251881Spetersvn_prop_hash_to_array(const apr_hash_t *hash, 117251881Speter apr_pool_t *pool); 118251881Speter 119251881Speter/** 120251881Speter * Given an array of svn_prop_t items, return a hash mapping const char * 121251881Speter * property names to const svn_string_t * values. 122251881Speter * 123251881Speter * @warning The behaviour on #svn_prop_t objects with a @c NULL @c 124251881Speter * svn_prop_t.value member is undefined. 125251881Speter * 126251881Speter * @since New in 1.7. 127251881Speter */ 128251881Speterapr_hash_t * 129251881Spetersvn_prop_array_to_hash(const apr_array_header_t *properties, 130251881Speter apr_pool_t *result); 131251881Speter 132251881Speter/** 133251881Speter * Creates a deep copy of @a hash (keys <tt>const char *</tt> and 134251881Speter * values <tt>const svn_string_t *</tt>) in @a pool. 135251881Speter * 136251881Speter * @since New in 1.6. 137251881Speter */ 138251881Speterapr_hash_t * 139251881Spetersvn_prop_hash_dup(const apr_hash_t *hash, 140251881Speter apr_pool_t *pool); 141251881Speter 142251881Speter/** 143251881Speter * Return the value of property @a prop_name as it is in @a properties, 144251881Speter * with values <tt>const svn_string_t</tt>. If @a prop_name is not 145251881Speter * in @a properties or @a properties is NULL, return NULL. 146251881Speter * 147251881Speter * @since New in 1.7. 148251881Speter */ 149251881Speterconst char * 150251881Spetersvn_prop_get_value(const apr_hash_t *properties, 151251881Speter const char *prop_name); 152251881Speter 153251881Speter/** 154251881Speter * Subversion distinguishes among several kinds of properties, 155251881Speter * particularly on the client-side. There is no "unknown" kind; if 156251881Speter * there's nothing special about a property name, the default category 157251881Speter * is @c svn_prop_regular_kind. 158251881Speter */ 159251881Spetertypedef enum svn_prop_kind 160251881Speter{ 161251881Speter /** In .svn/entries, i.e., author, date, etc. */ 162251881Speter svn_prop_entry_kind, 163251881Speter 164251881Speter /** Client-side only, stored by specific RA layer. */ 165251881Speter svn_prop_wc_kind, 166251881Speter 167251881Speter /** Seen if user does "svn proplist"; note that this includes some "svn:" 168251881Speter * props and all user props, i.e. ones stored in the repository fs. 169251881Speter */ 170251881Speter svn_prop_regular_kind 171251881Speter} svn_prop_kind_t; 172251881Speter 173251881Speter/** Return the property kind of a property named @a prop_name. 174251881Speter * 175251881Speter * @since New in 1.8. 176251881Speter */ 177251881Spetersvn_prop_kind_t 178251881Spetersvn_property_kind2(const char *prop_name); 179251881Speter 180251881Speter/** Return the prop kind of a property named @a prop_name, and 181251881Speter * (if @a prefix_len is non-@c NULL) set @a *prefix_len to the length of 182251881Speter * the prefix of @a prop_name that was sufficient to distinguish its kind. 183251881Speter * 184251881Speter * @deprecated Provided for backward compatibility with the 1.7 API. 185251881Speter */ 186251881SpeterSVN_DEPRECATED 187251881Spetersvn_prop_kind_t 188251881Spetersvn_property_kind(int *prefix_len, 189251881Speter const char *prop_name); 190251881Speter 191251881Speter 192251881Speter/** Return @c TRUE iff @a prop_name represents the name of a Subversion 193251881Speter * property. That is, any property name in Subversion's name space for 194251881Speter * versioned or unversioned properties, regardless whether the particular 195251881Speter * property name is recognized. 196251881Speter */ 197251881Spetersvn_boolean_t 198251881Spetersvn_prop_is_svn_prop(const char *prop_name); 199251881Speter 200251881Speter 201251881Speter/** Return @c TRUE iff @a props has at least one property whose name 202251881Speter * represents the name of a Subversion property, in the sense of 203251881Speter * svn_prop_is_svn_prop(). 204251881Speter * 205251881Speter * @since New in 1.5. 206251881Speter */ 207251881Spetersvn_boolean_t 208251881Spetersvn_prop_has_svn_prop(const apr_hash_t *props, 209251881Speter apr_pool_t *pool); 210251881Speter 211251881Speter/** Return @c TRUE iff @a prop_name is a Subversion property whose 212251881Speter * value is interpreted as a boolean. 213251881Speter * 214251881Speter * @since New in 1.5. 215251881Speter */ 216251881Spetersvn_boolean_t 217251881Spetersvn_prop_is_boolean(const char *prop_name); 218251881Speter 219251881Speter/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is a 220251881Speter * known revision property ("svn:log" or "svn:date", e.g.). 221251881Speter * 222251881Speter * This will return @c FALSE for any property name that is not known by this 223251881Speter * version of the library, even though the name may be known to other (for 224251881Speter * example, later) Subversion software. 225251881Speter * 226251881Speter * @since New in 1.8. 227251881Speter */ 228251881Spetersvn_boolean_t 229251881Spetersvn_prop_is_known_svn_rev_prop(const char *prop_name); 230251881Speter 231251881Speter/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is a 232251881Speter * known versioned property that is allowed on a file and/or on a 233251881Speter * directory ("svn:eol-style", "svn:ignore", or "svn:mergeinfo", e.g.). 234251881Speter * 235251881Speter * This will return @c FALSE for any property name that is not known 236251881Speter * by this version of the library, even though the name may be known 237251881Speter * to other (for example, later) Subversion software. 238251881Speter * 239251881Speter * @since New in 1.8. 240251881Speter */ 241251881Spetersvn_boolean_t 242251881Spetersvn_prop_is_known_svn_node_prop(const char *prop_name); 243251881Speter 244251881Speter/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is 245251881Speter * a known versioned property that is allowed on a file 246251881Speter * ("svn:eol-style" or "svn:mergeinfo", e.g.). 247251881Speter * 248251881Speter * This will return @c FALSE for any property name that is not known 249251881Speter * by this version of the library, even though the name may be known 250251881Speter * to other (for example, later) Subversion software. 251251881Speter * 252251881Speter * @since New in 1.8. 253251881Speter */ 254251881Spetersvn_boolean_t 255251881Spetersvn_prop_is_known_svn_file_prop(const char *prop_name); 256251881Speter 257251881Speter/** Return @c TRUE iff @a prop_name is in the "svn:" name space and is 258251881Speter * a known versioned property that is allowed on a directory 259251881Speter * ("svn:ignore" or "svn:mergeinfo", e.g.). 260251881Speter * 261251881Speter * This will return @c FALSE for any property name that is not known 262251881Speter * by this version of the library, even though the name may be known 263251881Speter * to other (for example, later) Subversion software. 264251881Speter * 265251881Speter * @since New in 1.8. 266251881Speter */ 267251881Spetersvn_boolean_t 268251881Spetersvn_prop_is_known_svn_dir_prop(const char *prop_name); 269251881Speter 270251881Speter/** If @a prop_name requires that its value be stored as UTF8/LF in the 271251881Speter * repository, then return @c TRUE. Else return @c FALSE. This is for 272251881Speter * users of libsvn_client or libsvn_fs, since it their responsibility 273251881Speter * to do this translation in both directions. (See 274251881Speter * svn_subst_translate_string()/svn_subst_detranslate_string() for 275251881Speter * help with this task.) 276251881Speter */ 277251881Spetersvn_boolean_t 278251881Spetersvn_prop_needs_translation(const char *prop_name); 279251881Speter 280251881Speter 281251881Speter/** Given a @a proplist array of @c svn_prop_t structures, allocate 282251881Speter * three new arrays in @a pool. Categorize each property and then 283251881Speter * create new @c svn_prop_t structures in the proper lists. Each new 284251881Speter * @c svn_prop_t structure's fields will point to the same data within 285251881Speter * @a proplist's structures. 286251881Speter * 287251881Speter * Callers may pass NULL for each of the property lists in which they 288251881Speter * are uninterested. If no props exist in a certain category, and the 289251881Speter * property list argument for that category is non-NULL, then that 290251881Speter * array will come back with <tt>->nelts == 0</tt>. 291251881Speter */ 292251881Spetersvn_error_t * 293251881Spetersvn_categorize_props(const apr_array_header_t *proplist, 294251881Speter apr_array_header_t **entry_props, 295251881Speter apr_array_header_t **wc_props, 296251881Speter apr_array_header_t **regular_props, 297251881Speter apr_pool_t *pool); 298251881Speter 299251881Speter 300251881Speter/** Given two property hashes (<tt>const char *name</tt> -> <tt>const 301251881Speter * svn_string_t *value</tt>), deduce the differences between them (from 302251881Speter * @a source_props -> @c target_props). Set @a propdiffs to a new array of 303251881Speter * @c svn_prop_t structures, with one entry for each property that differs, 304251881Speter * including properties that exist in @a source_props or @a target_props but 305251881Speter * not both. The @c value field of each entry is that property's value from 306251881Speter * @a target_props or NULL if that property only exists in @a source_props. 307251881Speter * 308251881Speter * Allocate the array from @a pool. Allocate the contents of the array from 309251881Speter * @a pool or by reference to the storage of the input hashes or both. 310251881Speter * 311251881Speter * For note, here's a quick little table describing the logic of this 312251881Speter * routine: 313251881Speter * 314251881Speter * @verbatim 315251881Speter source_props target_props event 316251881Speter ------------ ------------ ----- 317251881Speter value = foo value = NULL Deletion occurred. 318251881Speter value = foo value = bar Set occurred (modification) 319251881Speter value = NULL value = baz Set occurred (creation) @endverbatim 320251881Speter */ 321251881Spetersvn_error_t * 322251881Spetersvn_prop_diffs(apr_array_header_t **propdiffs, 323251881Speter const apr_hash_t *target_props, 324251881Speter const apr_hash_t *source_props, 325251881Speter apr_pool_t *pool); 326251881Speter 327251881Speter 328251881Speter/** 329251881Speter * Return @c TRUE iff @a prop_name is a valid property name. 330251881Speter * 331251881Speter * For now, "valid" means the ASCII subset of an XML "Name". 332251881Speter * XML "Name" is defined at http://www.w3.org/TR/REC-xml#sec-common-syn 333251881Speter * 334251881Speter * @since New in 1.5. 335251881Speter */ 336251881Spetersvn_boolean_t 337251881Spetersvn_prop_name_is_valid(const char *prop_name); 338251881Speter 339251881Speter 340251881Speter 341251881Speter/* Defines for reserved ("svn:") property names. */ 342251881Speter 343251881Speter/** All Subversion property names start with this. */ 344251881Speter#define SVN_PROP_PREFIX "svn:" 345251881Speter 346251881Speter 347251881Speter/** Visible properties 348251881Speter * 349251881Speter * These are regular properties that are attached to ordinary files 350251881Speter * and dirs, and are visible (and tweakable) by svn client programs 351251881Speter * and users. Adding these properties causes specific effects. 352251881Speter * 353251881Speter * @note the values of these properties are always UTF8-encoded with 354251881Speter * LF line-endings. It is the burden of svn library users to enforce 355251881Speter * this. Use svn_prop_needs_translation() to discover if a 356251881Speter * certain property needs translation, and you can use 357251881Speter * svn_subst_translate_string()/svn_subst_detranslate_string() 358251881Speter * to do the translation. 359251881Speter * 360251881Speter * @defgroup svn_prop_visible_props Visible properties 361251881Speter * @{ 362251881Speter */ 363251881Speter 364251881Speter/** Properties whose values are interpreted as booleans (such as 365251881Speter * svn:executable, svn:needs_lock, and svn:special) always fold their 366251881Speter * value to this. 367251881Speter * 368251881Speter * @since New in 1.5. 369251881Speter */ 370251881Speter#define SVN_PROP_BOOLEAN_TRUE "*" 371251881Speter 372251881Speter/** The mime-type of a given file. */ 373251881Speter#define SVN_PROP_MIME_TYPE SVN_PROP_PREFIX "mime-type" 374251881Speter 375251881Speter/** The ignore patterns for a given directory. */ 376251881Speter#define SVN_PROP_IGNORE SVN_PROP_PREFIX "ignore" 377251881Speter 378251881Speter/** The line ending style for a given file. */ 379251881Speter#define SVN_PROP_EOL_STYLE SVN_PROP_PREFIX "eol-style" 380251881Speter 381251881Speter/** The "activated" keywords (for keyword substitution) for a given file. */ 382251881Speter#define SVN_PROP_KEYWORDS SVN_PROP_PREFIX "keywords" 383251881Speter 384251881Speter/** Set to either TRUE or FALSE if we want a file to be executable or not. */ 385251881Speter#define SVN_PROP_EXECUTABLE SVN_PROP_PREFIX "executable" 386251881Speter 387251881Speter/** The value to force the executable property to when set. 388251881Speter * 389251881Speter * @deprecated Provided for backward compatibility with the 1.4 API. 390251881Speter * Use @c SVN_PROP_BOOLEAN_TRUE instead. 391251881Speter */ 392251881Speter#define SVN_PROP_EXECUTABLE_VALUE SVN_PROP_BOOLEAN_TRUE 393251881Speter 394251881Speter/** Set to TRUE ('*') if we want a file to be set to read-only when 395251881Speter * not locked. FALSE is indicated by deleting the property. */ 396251881Speter#define SVN_PROP_NEEDS_LOCK SVN_PROP_PREFIX "needs-lock" 397251881Speter 398251881Speter/** The value to force the needs-lock property to when set. 399251881Speter * 400251881Speter * @deprecated Provided for backward compatibility with the 1.4 API. 401251881Speter * Use @c SVN_PROP_BOOLEAN_TRUE instead. 402251881Speter */ 403251881Speter#define SVN_PROP_NEEDS_LOCK_VALUE SVN_PROP_BOOLEAN_TRUE 404251881Speter 405251881Speter/** Set if the file should be treated as a special file. */ 406251881Speter#define SVN_PROP_SPECIAL SVN_PROP_PREFIX "special" 407251881Speter 408251881Speter/** The value to force the special property to when set. 409251881Speter * 410251881Speter * @deprecated Provided for backward compatibility with the 1.4 API. 411251881Speter * Use @c SVN_PROP_BOOLEAN_TRUE instead. 412251881Speter */ 413251881Speter#define SVN_PROP_SPECIAL_VALUE SVN_PROP_BOOLEAN_TRUE 414251881Speter 415251881Speter/** Describes external items to check out into this directory. 416251881Speter * 417251881Speter * The format is a series of lines, each in the following format: 418251881Speter * [-r REV] URL[@PEG] LOCALPATH 419251881Speter * LOCALPATH is relative to the directory having this property. 420251881Speter * REV pins the external to revision REV. 421251881Speter * URL may be a full URL or a relative URL starting with one of: 422251881Speter * ../ to the parent directory of the extracted external 423251881Speter * ^/ to the repository root 424251881Speter * / to the server root 425251881Speter * // to the URL scheme 426251881Speter * The following format is supported for interoperability with 427251881Speter * Subversion 1.4 and earlier clients: 428251881Speter * LOCALPATH [-r PEG] URL 429251881Speter * The ambiguous format 'relative_path relative_path' is taken as 430251881Speter * 'relative_url relative_path' with peg revision support. 431251881Speter * Lines starting with a '#' character are ignored. 432251881Speter */ 433251881Speter#define SVN_PROP_EXTERNALS SVN_PROP_PREFIX "externals" 434251881Speter 435251881Speter/** Merge info property used to record a resource's merge history. 436251881Speter * 437251881Speter * The format is a series of lines containing merge paths and revision 438251881Speter * ranges, such as: 439251881Speter * 440251881Speter * @verbatim 441251881Speter /trunk: 1-6,9,37-38 442251881Speter /trunk/foo: 10 @endverbatim 443299742Sdim * @since New in 1.5. 444251881Speter */ 445251881Speter#define SVN_PROP_MERGEINFO SVN_PROP_PREFIX "mergeinfo" 446251881Speter 447299742Sdim/** Property used to record inheritable configuration auto-props. 448299742Sdim * 449299742Sdim * @since New in 1.8. 450299742Sdim */ 451251881Speter#define SVN_PROP_INHERITABLE_AUTO_PROPS SVN_PROP_PREFIX "auto-props" 452251881Speter 453299742Sdim/** Property used to record inheritable configuration ignores. 454299742Sdim * 455299742Sdim * @since New in 1.8. 456299742Sdim */ 457251881Speter#define SVN_PROP_INHERITABLE_IGNORES SVN_PROP_PREFIX "global-ignores" 458251881Speter 459251881Speter/** Meta-data properties. 460251881Speter * 461251881Speter * The following properties are used for storing meta-data about 462251881Speter * individual entries in the meta-data branches of subversion, 463251881Speter * see issue #1256 or browseable at 464251881Speter * http://svn.apache.org/viewvc/subversion/branches/meta-data-versioning/ . 465251881Speter * Furthermore @c svntar (http://svn.borg.ch/svntar/) and @c FSVS 466251881Speter * (http://fsvs.tigris.org/) use these, too. 467251881Speter * 468251881Speter * Please note that these formats are very UNIX-centric currently; 469251881Speter * a bit of discussion about Windows can be read at 470251881Speter * http://article.gmane.org/gmane.comp.version-control.subversion.devel/103991 471251881Speter * 472251881Speter * @defgroup svn_prop_meta_data Meta-data properties 473251881Speter * @{ */ 474251881Speter 475251881Speter/** The files' last modification time. 476251881Speter * This is stored as string in the form @c "2008-08-07T07:38:51.008782Z", to 477251881Speter * be converted by the functions @c svn_time_to_cstring() and 478251881Speter * @c svn_time_from_cstring(). */ 479251881Speter#define SVN_PROP_TEXT_TIME SVN_PROP_PREFIX "text-time" 480251881Speter 481251881Speter/** The files' owner. 482251881Speter * Stored as numeric ID, optionally followed by whitespace and the string: 483251881Speter * @c "1000 pmarek". Parsers @b should accept any number of whitespace, 484251881Speter * and writers @b should put exactly a single space. */ 485251881Speter#define SVN_PROP_OWNER SVN_PROP_PREFIX "owner" 486251881Speter 487251881Speter/** The files' group. 488251881Speter * The same format as for @c SVN_PROP_OWNER, the owner-property. */ 489251881Speter#define SVN_PROP_GROUP SVN_PROP_PREFIX "group" 490251881Speter 491251881Speter/** The files' unix-mode. 492251881Speter * Stored in octal, with a leading @c 0; may have 5 digits if any of @c setuid, 493251881Speter * @c setgid or @c sticky are set; an example is @c "0644". */ 494251881Speter#define SVN_PROP_UNIX_MODE SVN_PROP_PREFIX "unix-mode" 495251881Speter 496251881Speter/** @} */ /* Meta-data properties */ 497251881Speter 498251881Speter/** 499251881Speter * This is a list of all user-visible and -settable versioned node 500251881Speter * properties. 501251881Speter * 502251881Speter * @since New in 1.8. 503251881Speter */ 504251881Speter#define SVN_PROP_NODE_ALL_PROPS SVN_PROP_MIME_TYPE, \ 505251881Speter SVN_PROP_IGNORE, \ 506251881Speter SVN_PROP_EOL_STYLE, \ 507251881Speter SVN_PROP_KEYWORDS, \ 508251881Speter SVN_PROP_EXECUTABLE, \ 509251881Speter SVN_PROP_NEEDS_LOCK, \ 510251881Speter SVN_PROP_SPECIAL, \ 511251881Speter SVN_PROP_EXTERNALS, \ 512251881Speter SVN_PROP_MERGEINFO, \ 513251881Speter SVN_PROP_INHERITABLE_AUTO_PROPS, \ 514251881Speter SVN_PROP_INHERITABLE_IGNORES, \ 515251881Speter \ 516251881Speter SVN_PROP_TEXT_TIME, \ 517251881Speter SVN_PROP_OWNER, \ 518251881Speter SVN_PROP_GROUP, \ 519251881Speter SVN_PROP_UNIX_MODE, 520251881Speter 521251881Speter/** @} */ 522251881Speter 523251881Speter/** WC props are props that are invisible to users: they're generated 524251881Speter * by an RA layer, and stored in secret parts of .svn/. 525251881Speter * 526251881Speter * @defgroup svn_prop_invisible_props Invisible properties 527251881Speter * @{ 528251881Speter */ 529251881Speter 530251881Speter/** The property name *prefix* that makes a property a "WC property". 531251881Speter * 532251881Speter * For example, WebDAV RA implementations might store a versioned-resource 533251881Speter * url as a WC prop like this: 534251881Speter * 535251881Speter * <pre reason="Should use 'verbatim' instead, but Doxygen v1.6.1 & v1.7.1 536251881Speter * then doesn't recognize the #define; presumably a bug."> 537251881Speter name = svn:wc:dav_url 538251881Speter val = http://www.example.com/repos/452348/e.289 </pre> 539251881Speter * 540251881Speter * The client will try to protect WC props by warning users against 541251881Speter * changing them. The client will also send them back to the RA layer 542251881Speter * when committing. 543251881Speter */ 544251881Speter#define SVN_PROP_WC_PREFIX SVN_PROP_PREFIX "wc:" 545251881Speter 546251881Speter/** Another type of non-user-visible property. "Entry properties" are 547251881Speter * stored as fields with the administrative 'entries' file. 548251881Speter */ 549251881Speter#define SVN_PROP_ENTRY_PREFIX SVN_PROP_PREFIX "entry:" 550251881Speter 551251881Speter/** The revision this entry was last committed to on. */ 552251881Speter#define SVN_PROP_ENTRY_COMMITTED_REV SVN_PROP_ENTRY_PREFIX "committed-rev" 553251881Speter 554251881Speter/** The date this entry was last committed to on. */ 555251881Speter#define SVN_PROP_ENTRY_COMMITTED_DATE SVN_PROP_ENTRY_PREFIX "committed-date" 556251881Speter 557251881Speter/** The author who last committed to this entry. */ 558251881Speter#define SVN_PROP_ENTRY_LAST_AUTHOR SVN_PROP_ENTRY_PREFIX "last-author" 559251881Speter 560251881Speter/** The UUID of this entry's repository. */ 561251881Speter#define SVN_PROP_ENTRY_UUID SVN_PROP_ENTRY_PREFIX "uuid" 562251881Speter 563251881Speter/** The lock token for this entry. 564251881Speter * @since New in 1.2. */ 565251881Speter#define SVN_PROP_ENTRY_LOCK_TOKEN SVN_PROP_ENTRY_PREFIX "lock-token" 566251881Speter 567251881Speter/** When custom, user-defined properties are passed over the wire, they will 568251881Speter * have this prefix added to their name. 569251881Speter */ 570251881Speter#define SVN_PROP_CUSTOM_PREFIX SVN_PROP_PREFIX "custom:" 571251881Speter 572251881Speter/** @} */ 573251881Speter 574251881Speter/** 575251881Speter * These are reserved properties attached to a "revision" object in 576251881Speter * the repository filesystem. They can be queried by using 577251881Speter * svn_fs_revision_prop(). 578251881Speter * 579251881Speter * @defgroup svn_props_revision_props Revision properties 580251881Speter * @{ 581251881Speter */ 582251881Speter 583251881Speter/** The fs revision property that stores a commit's author. */ 584251881Speter#define SVN_PROP_REVISION_AUTHOR SVN_PROP_PREFIX "author" 585251881Speter 586251881Speter/** The fs revision property that stores a commit's log message. */ 587251881Speter#define SVN_PROP_REVISION_LOG SVN_PROP_PREFIX "log" 588251881Speter 589251881Speter/** The fs revision property that stores a commit's date. */ 590251881Speter#define SVN_PROP_REVISION_DATE SVN_PROP_PREFIX "date" 591251881Speter 592251881Speter/** The fs revision property that stores a commit's "original" date. 593251881Speter * 594251881Speter * The svn:date property must be monotonically increasing, along with 595251881Speter * the revision number. In certain scenarios, this may pose a problem 596251881Speter * when the revision represents a commit that occurred at a time which 597251881Speter * does not fit within the sequencing required for svn:date. This can 598251881Speter * happen, for instance, when the revision represents a commit to a 599251881Speter * foreign version control system, or possibly when two Subversion 600251881Speter * repositories are combined. This property can be used to record the 601251881Speter * TRUE, original date of the commit. 602251881Speter */ 603251881Speter#define SVN_PROP_REVISION_ORIG_DATE SVN_PROP_PREFIX "original-date" 604251881Speter 605251881Speter/** The presence of this fs revision property indicates that the 606251881Speter * revision was automatically generated by the mod_dav_svn 607251881Speter * autoversioning feature. The value is irrelevant. 608251881Speter */ 609251881Speter#define SVN_PROP_REVISION_AUTOVERSIONED SVN_PROP_PREFIX "autoversioned" 610251881Speter 611251881Speter 612251881Speter/* More reserved revision props in the 'svn:' namespace, used by the 613251881Speter svnsync tool: */ 614251881Speter 615251881Speter/** Prefix for all svnsync custom properties. 616251881Speter * @since New in 1.4. 617251881Speter */ 618251881Speter#define SVNSYNC_PROP_PREFIX SVN_PROP_PREFIX "sync-" 619251881Speter 620251881Speter/* The following revision properties are set on revision 0 of 621251881Speter * destination repositories by svnsync: 622251881Speter */ 623251881Speter 624251881Speter/** Used to enforce mutually exclusive destination repository access. 625251881Speter * @since New in 1.4. 626251881Speter */ 627251881Speter#define SVNSYNC_PROP_LOCK SVNSYNC_PROP_PREFIX "lock" 628251881Speter 629251881Speter/** Identifies the repository's source URL. 630251881Speter * @since New in 1.4. 631251881Speter */ 632251881Speter#define SVNSYNC_PROP_FROM_URL SVNSYNC_PROP_PREFIX "from-url" 633251881Speter/** Identifies the repository's source UUID. 634251881Speter * @since New in 1.4. 635251881Speter */ 636251881Speter#define SVNSYNC_PROP_FROM_UUID SVNSYNC_PROP_PREFIX "from-uuid" 637251881Speter 638251881Speter/** Identifies the last completely mirrored revision. 639251881Speter * @since New in 1.4. 640251881Speter */ 641251881Speter#define SVNSYNC_PROP_LAST_MERGED_REV SVNSYNC_PROP_PREFIX "last-merged-rev" 642251881Speter 643251881Speter/** Identifies the revision currently being copied. 644251881Speter * @since New in 1.4. 645251881Speter */ 646251881Speter#define SVNSYNC_PROP_CURRENTLY_COPYING SVNSYNC_PROP_PREFIX "currently-copying" 647251881Speter 648251881Speter 649251881Speter/** 650251881Speter * This is a list of all revision properties. 651251881Speter */ 652251881Speter#define SVN_PROP_REVISION_ALL_PROPS SVN_PROP_REVISION_AUTHOR, \ 653251881Speter SVN_PROP_REVISION_LOG, \ 654251881Speter SVN_PROP_REVISION_DATE, \ 655251881Speter SVN_PROP_REVISION_AUTOVERSIONED, \ 656251881Speter SVN_PROP_REVISION_ORIG_DATE, \ 657251881Speter SVNSYNC_PROP_LOCK, \ 658251881Speter SVNSYNC_PROP_FROM_URL, \ 659251881Speter SVNSYNC_PROP_FROM_UUID, \ 660251881Speter SVNSYNC_PROP_LAST_MERGED_REV, \ 661251881Speter SVNSYNC_PROP_CURRENTLY_COPYING, 662251881Speter 663251881Speter/** @} */ 664251881Speter 665251881Speter/** 666251881Speter * These are reserved properties attached to a "transaction" object in 667251881Speter * the repository filesystem in advance of the pre-commit hook script 668251881Speter * running on the server, but then automatically removed from the 669251881Speter * transaction before its promotion to a new revision. 670251881Speter * 671251881Speter * @defgroup svn_props_ephemeral_txnprops Ephemeral transaction properties 672251881Speter * @{ 673251881Speter */ 674251881Speter 675251881Speter/** The prefix used for all (ephemeral) transaction properties. 676251881Speter * 677251881Speter * @since New in 1.8. 678251881Speter */ 679251881Speter#define SVN_PROP_TXN_PREFIX SVN_PROP_PREFIX "txn-" 680251881Speter 681299742Sdim/** Identifies the client version compatibility level. For clients 682251881Speter * compiled against Subversion libraries, this is @c SVN_VER_NUMBER. 683251881Speter * Third-party implementations are advised to use similar formatting 684251881Speter * for values of this property. 685251881Speter * 686251881Speter * @since New in 1.8. 687251881Speter */ 688251881Speter#define SVN_PROP_TXN_CLIENT_COMPAT_VERSION \ 689251881Speter SVN_PROP_TXN_PREFIX "client-compat-version" 690251881Speter 691251881Speter/** Identifies the client's user agent string, if any. 692251881Speter * 693251881Speter * @since New in 1.8. 694251881Speter */ 695251881Speter#define SVN_PROP_TXN_USER_AGENT \ 696251881Speter SVN_PROP_TXN_PREFIX "user-agent" 697251881Speter 698251881Speter/** The prefix reserved for copies of (ephemeral) transaction 699251881Speter * properties designed to outlive the transaction. Administrators may 700251881Speter * choose to, in their pre-commit hook scripts, copy the values of one 701251881Speter * or more properties named @c SVN_PROP_TXN_PREFIX + "something" 702251881Speter * to new properties named @c SVN_PROP_REVISION_PREFIX + "something", 703251881Speter * allowing that information to survive the commit-time removal of 704251881Speter * ephemeral transaction properties. 705251881Speter * 706251881Speter * @since New in 1.8. 707251881Speter */ 708251881Speter#define SVN_PROP_REVISION_PREFIX SVN_PROP_PREFIX "revision-" 709251881Speter 710251881Speter 711251881Speter/** @} */ 712251881Speter 713251881Speter/** @} */ 714251881Speter 715251881Speter 716251881Speter 717251881Speter#ifdef __cplusplus 718251881Speter} 719251881Speter#endif /* __cplusplus */ 720251881Speter 721251881Speter#endif /* SVN_PROPS_H */ 722