1#ifndef REFS_REFS_INTERNAL_H 2#define REFS_REFS_INTERNAL_H 3 4/* 5 * Data structures and functions for the internal use of the refs 6 * module. Code outside of the refs module should use only the public 7 * functions defined in "refs.h", and should *not* include this file. 8 */ 9 10/* 11 * Flag passed to lock_ref_sha1_basic() telling it to tolerate broken 12 * refs (i.e., because the reference is about to be deleted anyway). 13 */ 14#define REF_DELETING 0x02 15 16/* 17 * Used as a flag in ref_update::flags when a loose ref is being 18 * pruned. This flag must only be used when REF_NODEREF is set. 19 */ 20#define REF_ISPRUNING 0x04 21 22/* 23 * Used as a flag in ref_update::flags when the reference should be 24 * updated to new_sha1. 25 */ 26#define REF_HAVE_NEW 0x08 27 28/* 29 * Used as a flag in ref_update::flags when old_sha1 should be 30 * checked. 31 */ 32#define REF_HAVE_OLD 0x10 33 34/* 35 * Used as a flag in ref_update::flags when the lockfile needs to be 36 * committed. 37 */ 38#define REF_NEEDS_COMMIT 0x20 39 40/* 41 * 0x40 is REF_FORCE_CREATE_REFLOG, so skip it if you're adding a 42 * value to ref_update::flags 43 */ 44 45/* 46 * Used as a flag in ref_update::flags when we want to log a ref 47 * update but not actually perform it. This is used when a symbolic 48 * ref update is split up. 49 */ 50#define REF_LOG_ONLY 0x80 51 52/* 53 * Internal flag, meaning that the containing ref_update was via an 54 * update to HEAD. 55 */ 56#define REF_UPDATE_VIA_HEAD 0x100 57 58/* 59 * Used as a flag in ref_update::flags when the loose reference has 60 * been deleted. 61 */ 62#define REF_DELETED_LOOSE 0x200 63 64/* 65 * Return true iff refname is minimally safe. "Safe" here means that 66 * deleting a loose reference by this name will not do any damage, for 67 * example by causing a file that is not a reference to be deleted. 68 * This function does not check that the reference name is legal; for 69 * that, use check_refname_format(). 70 * 71 * A refname that starts with "refs/" is considered safe iff it 72 * doesn't contain any "." or ".." components or consecutive '/' 73 * characters, end with '/', or (on Windows) contain any '\' 74 * characters. Names that do not start with "refs/" are considered 75 * safe iff they consist entirely of upper case characters and '_' 76 * (like "HEAD" and "MERGE_HEAD" but not "config" or "FOO/BAR"). 77 */ 78intrefname_is_safe(const char*refname); 79 80/* 81 * Helper function: return true if refname, which has the specified 82 * oid and flags, can be resolved to an object in the database. If the 83 * referred-to object does not exist, emit a warning and return false. 84 */ 85intref_resolves_to_object(const char*refname, 86const struct object_id *oid, 87unsigned int flags); 88 89enum peel_status { 90/* object was peeled successfully: */ 91 PEEL_PEELED =0, 92 93/* 94 * object cannot be peeled because the named object (or an 95 * object referred to by a tag in the peel chain), does not 96 * exist. 97 */ 98 PEEL_INVALID = -1, 99 100/* object cannot be peeled because it is not a tag: */ 101 PEEL_NON_TAG = -2, 102 103/* ref_entry contains no peeled value because it is a symref: */ 104 PEEL_IS_SYMREF = -3, 105 106/* 107 * ref_entry cannot be peeled because it is broken (i.e., the 108 * symbolic reference cannot even be resolved to an object 109 * name): 110 */ 111 PEEL_BROKEN = -4 112}; 113 114/* 115 * Peel the named object; i.e., if the object is a tag, resolve the 116 * tag recursively until a non-tag is found. If successful, store the 117 * result to sha1 and return PEEL_PEELED. If the object is not a tag 118 * or is not valid, return PEEL_NON_TAG or PEEL_INVALID, respectively, 119 * and leave sha1 unchanged. 120 */ 121enum peel_status peel_object(const unsigned char*name,unsigned char*sha1); 122 123/* 124 * Copy the reflog message msg to buf, which has been allocated sufficiently 125 * large, while cleaning up the whitespaces. Especially, convert LF to space, 126 * because reflog file is one line per entry. 127 */ 128intcopy_reflog_msg(char*buf,const char*msg); 129 130/** 131 * Information needed for a single ref update. Set new_sha1 to the new 132 * value or to null_sha1 to delete the ref. To check the old value 133 * while the ref is locked, set (flags & REF_HAVE_OLD) and set 134 * old_sha1 to the old value, or to null_sha1 to ensure the ref does 135 * not exist before update. 136 */ 137struct ref_update { 138 139/* 140 * If (flags & REF_HAVE_NEW), set the reference to this value: 141 */ 142struct object_id new_oid; 143 144/* 145 * If (flags & REF_HAVE_OLD), check that the reference 146 * previously had this value: 147 */ 148struct object_id old_oid; 149 150/* 151 * One or more of REF_HAVE_NEW, REF_HAVE_OLD, REF_NODEREF, 152 * REF_DELETING, REF_ISPRUNING, REF_LOG_ONLY, 153 * REF_UPDATE_VIA_HEAD, REF_NEEDS_COMMIT, and 154 * REF_DELETED_LOOSE: 155 */ 156unsigned int flags; 157 158void*backend_data; 159unsigned int type; 160char*msg; 161 162/* 163 * If this ref_update was split off of a symref update via 164 * split_symref_update(), then this member points at that 165 * update. This is used for two purposes: 166 * 1. When reporting errors, we report the refname under which 167 * the update was originally requested. 168 * 2. When we read the old value of this reference, we 169 * propagate it back to its parent update for recording in 170 * the latter's reflog. 171 */ 172struct ref_update *parent_update; 173 174const char refname[FLEX_ARRAY]; 175}; 176 177intrefs_read_raw_ref(struct ref_store *ref_store, 178const char*refname,unsigned char*sha1, 179struct strbuf *referent,unsigned int*type); 180 181/* 182 * Write an error to `err` and return a nonzero value iff the same 183 * refname appears multiple times in `refnames`. `refnames` must be 184 * sorted on entry to this function. 185 */ 186intref_update_reject_duplicates(struct string_list *refnames, 187struct strbuf *err); 188 189/* 190 * Add a ref_update with the specified properties to transaction, and 191 * return a pointer to the new object. This function does not verify 192 * that refname is well-formed. new_sha1 and old_sha1 are only 193 * dereferenced if the REF_HAVE_NEW and REF_HAVE_OLD bits, 194 * respectively, are set in flags. 195 */ 196struct ref_update *ref_transaction_add_update( 197struct ref_transaction *transaction, 198const char*refname,unsigned int flags, 199const unsigned char*new_sha1, 200const unsigned char*old_sha1, 201const char*msg); 202 203/* 204 * Transaction states. 205 * 206 * OPEN: The transaction is initialized and new updates can still be 207 * added to it. An OPEN transaction can be prepared, 208 * committed, freed, or aborted (freeing and aborting an open 209 * transaction are equivalent). 210 * 211 * PREPARED: ref_transaction_prepare(), which locks all of the 212 * references involved in the update and checks that the 213 * update has no errors, has been called successfully for the 214 * transaction. A PREPARED transaction can be committed or 215 * aborted. 216 * 217 * CLOSED: The transaction is no longer active. A transaction becomes 218 * CLOSED if there is a failure while building the transaction 219 * or if a transaction is committed or aborted. A CLOSED 220 * transaction can only be freed. 221 */ 222enum ref_transaction_state { 223 REF_TRANSACTION_OPEN =0, 224 REF_TRANSACTION_PREPARED =1, 225 REF_TRANSACTION_CLOSED =2 226}; 227 228/* 229 * Data structure for holding a reference transaction, which can 230 * consist of checks and updates to multiple references, carried out 231 * as atomically as possible. This structure is opaque to callers. 232 */ 233struct ref_transaction { 234struct ref_store *ref_store; 235struct ref_update **updates; 236size_t alloc; 237size_t nr; 238enum ref_transaction_state state; 239}; 240 241/* 242 * Check for entries in extras that are within the specified 243 * directory, where dirname is a reference directory name including 244 * the trailing slash (e.g., "refs/heads/foo/"). Ignore any 245 * conflicting references that are found in skip. If there is a 246 * conflicting reference, return its name. 247 * 248 * extras and skip must be sorted lists of reference names. Either one 249 * can be NULL, signifying the empty list. 250 */ 251const char*find_descendant_ref(const char*dirname, 252const struct string_list *extras, 253const struct string_list *skip); 254 255/* 256 * Check whether an attempt to rename old_refname to new_refname would 257 * cause a D/F conflict with any existing reference (other than 258 * possibly old_refname). If there would be a conflict, emit an error 259 * message and return false; otherwise, return true. 260 * 261 * Note that this function is not safe against all races with other 262 * processes (though rename_ref() catches some races that might get by 263 * this check). 264 */ 265intrefs_rename_ref_available(struct ref_store *refs, 266const char*old_refname, 267const char*new_refname); 268 269/* We allow "recursive" symbolic refs. Only within reason, though */ 270#define SYMREF_MAXDEPTH 5 271 272/* Include broken references in a do_for_each_ref*() iteration: */ 273#define DO_FOR_EACH_INCLUDE_BROKEN 0x01 274 275/* 276 * Reference iterators 277 * 278 * A reference iterator encapsulates the state of an in-progress 279 * iteration over references. Create an instance of `struct 280 * ref_iterator` via one of the functions in this module. 281 * 282 * A freshly-created ref_iterator doesn't yet point at a reference. To 283 * advance the iterator, call ref_iterator_advance(). If successful, 284 * this sets the iterator's refname, oid, and flags fields to describe 285 * the next reference and returns ITER_OK. The data pointed at by 286 * refname and oid belong to the iterator; if you want to retain them 287 * after calling ref_iterator_advance() again or calling 288 * ref_iterator_abort(), you must make a copy. When the iteration has 289 * been exhausted, ref_iterator_advance() releases any resources 290 * assocated with the iteration, frees the ref_iterator object, and 291 * returns ITER_DONE. If you want to abort the iteration early, call 292 * ref_iterator_abort(), which also frees the ref_iterator object and 293 * any associated resources. If there was an internal error advancing 294 * to the next entry, ref_iterator_advance() aborts the iteration, 295 * frees the ref_iterator, and returns ITER_ERROR. 296 * 297 * The reference currently being looked at can be peeled by calling 298 * ref_iterator_peel(). This function is often faster than peel_ref(), 299 * so it should be preferred when iterating over references. 300 * 301 * Putting it all together, a typical iteration looks like this: 302 * 303 * int ok; 304 * struct ref_iterator *iter = ...; 305 * 306 * while ((ok = ref_iterator_advance(iter)) == ITER_OK) { 307 * if (want_to_stop_iteration()) { 308 * ok = ref_iterator_abort(iter); 309 * break; 310 * } 311 * 312 * // Access information about the current reference: 313 * if (!(iter->flags & REF_ISSYMREF)) 314 * printf("%s is %s\n", iter->refname, oid_to_hex(&iter->oid)); 315 * 316 * // If you need to peel the reference: 317 * ref_iterator_peel(iter, &oid); 318 * } 319 * 320 * if (ok != ITER_DONE) 321 * handle_error(); 322 */ 323struct ref_iterator { 324struct ref_iterator_vtable *vtable; 325const char*refname; 326const struct object_id *oid; 327unsigned int flags; 328}; 329 330/* 331 * Advance the iterator to the first or next item and return ITER_OK. 332 * If the iteration is exhausted, free the resources associated with 333 * the ref_iterator and return ITER_DONE. On errors, free the iterator 334 * resources and return ITER_ERROR. It is a bug to use ref_iterator or 335 * call this function again after it has returned ITER_DONE or 336 * ITER_ERROR. 337 */ 338intref_iterator_advance(struct ref_iterator *ref_iterator); 339 340/* 341 * If possible, peel the reference currently being viewed by the 342 * iterator. Return 0 on success. 343 */ 344intref_iterator_peel(struct ref_iterator *ref_iterator, 345struct object_id *peeled); 346 347/* 348 * End the iteration before it has been exhausted, freeing the 349 * reference iterator and any associated resources and returning 350 * ITER_DONE. If the abort itself failed, return ITER_ERROR. 351 */ 352intref_iterator_abort(struct ref_iterator *ref_iterator); 353 354/* 355 * An iterator over nothing (its first ref_iterator_advance() call 356 * returns ITER_DONE). 357 */ 358struct ref_iterator *empty_ref_iterator_begin(void); 359 360/* 361 * Return true iff ref_iterator is an empty_ref_iterator. 362 */ 363intis_empty_ref_iterator(struct ref_iterator *ref_iterator); 364 365/* 366 * Return an iterator that goes over each reference in `refs` for 367 * which the refname begins with prefix. If trim is non-zero, then 368 * trim that many characters off the beginning of each refname. flags 369 * can be DO_FOR_EACH_INCLUDE_BROKEN to include broken references in 370 * the iteration. 371 */ 372struct ref_iterator *refs_ref_iterator_begin( 373struct ref_store *refs, 374const char*prefix,int trim,int flags); 375 376/* 377 * A callback function used to instruct merge_ref_iterator how to 378 * interleave the entries from iter0 and iter1. The function should 379 * return one of the constants defined in enum iterator_selection. It 380 * must not advance either of the iterators itself. 381 * 382 * The function must be prepared to handle the case that iter0 and/or 383 * iter1 is NULL, which indicates that the corresponding sub-iterator 384 * has been exhausted. Its return value must be consistent with the 385 * current states of the iterators; e.g., it must not return 386 * ITER_SKIP_1 if iter1 has already been exhausted. 387 */ 388typedefenum iterator_selection ref_iterator_select_fn( 389struct ref_iterator *iter0,struct ref_iterator *iter1, 390void*cb_data); 391 392/* 393 * Iterate over the entries from iter0 and iter1, with the values 394 * interleaved as directed by the select function. The iterator takes 395 * ownership of iter0 and iter1 and frees them when the iteration is 396 * over. 397 */ 398struct ref_iterator *merge_ref_iterator_begin( 399struct ref_iterator *iter0,struct ref_iterator *iter1, 400 ref_iterator_select_fn *select,void*cb_data); 401 402/* 403 * An iterator consisting of the union of the entries from front and 404 * back. If there are entries common to the two sub-iterators, use the 405 * one from front. Each iterator must iterate over its entries in 406 * strcmp() order by refname for this to work. 407 * 408 * The new iterator takes ownership of its arguments and frees them 409 * when the iteration is over. As a convenience to callers, if front 410 * or back is an empty_ref_iterator, then abort that one immediately 411 * and return the other iterator directly, without wrapping it. 412 */ 413struct ref_iterator *overlay_ref_iterator_begin( 414struct ref_iterator *front,struct ref_iterator *back); 415 416/* 417 * Wrap iter0, only letting through the references whose names start 418 * with prefix. If trim is set, set iter->refname to the name of the 419 * reference with that many characters trimmed off the front; 420 * otherwise set it to the full refname. The new iterator takes over 421 * ownership of iter0 and frees it when iteration is over. It makes 422 * its own copy of prefix. 423 * 424 * As an convenience to callers, if prefix is the empty string and 425 * trim is zero, this function returns iter0 directly, without 426 * wrapping it. 427 */ 428struct ref_iterator *prefix_ref_iterator_begin(struct ref_iterator *iter0, 429const char*prefix, 430int trim); 431 432/* Internal implementation of reference iteration: */ 433 434/* 435 * Base class constructor for ref_iterators. Initialize the 436 * ref_iterator part of iter, setting its vtable pointer as specified. 437 * This is meant to be called only by the initializers of derived 438 * classes. 439 */ 440voidbase_ref_iterator_init(struct ref_iterator *iter, 441struct ref_iterator_vtable *vtable); 442 443/* 444 * Base class destructor for ref_iterators. Destroy the ref_iterator 445 * part of iter and shallow-free the object. This is meant to be 446 * called only by the destructors of derived classes. 447 */ 448voidbase_ref_iterator_free(struct ref_iterator *iter); 449 450/* Virtual function declarations for ref_iterators: */ 451 452typedefintref_iterator_advance_fn(struct ref_iterator *ref_iterator); 453 454typedefintref_iterator_peel_fn(struct ref_iterator *ref_iterator, 455struct object_id *peeled); 456 457/* 458 * Implementations of this function should free any resources specific 459 * to the derived class, then call base_ref_iterator_free() to clean 460 * up and free the ref_iterator object. 461 */ 462typedefintref_iterator_abort_fn(struct ref_iterator *ref_iterator); 463 464struct ref_iterator_vtable { 465 ref_iterator_advance_fn *advance; 466 ref_iterator_peel_fn *peel; 467 ref_iterator_abort_fn *abort; 468}; 469 470/* 471 * current_ref_iter is a performance hack: when iterating over 472 * references using the for_each_ref*() functions, current_ref_iter is 473 * set to the reference iterator before calling the callback function. 474 * If the callback function calls peel_ref(), then peel_ref() first 475 * checks whether the reference to be peeled is the one referred to by 476 * the iterator (it usually is) and if so, asks the iterator for the 477 * peeled version of the reference if it is available. This avoids a 478 * refname lookup in a common case. current_ref_iter is set to NULL 479 * when the iteration is over. 480 */ 481externstruct ref_iterator *current_ref_iter; 482 483/* 484 * The common backend for the for_each_*ref* functions. Call fn for 485 * each reference in iter. If the iterator itself ever returns 486 * ITER_ERROR, return -1. If fn ever returns a non-zero value, stop 487 * the iteration and return that value. Otherwise, return 0. In any 488 * case, free the iterator when done. This function is basically an 489 * adapter between the callback style of reference iteration and the 490 * iterator style. 491 */ 492intdo_for_each_ref_iterator(struct ref_iterator *iter, 493 each_ref_fn fn,void*cb_data); 494 495/* 496 * Only include per-worktree refs in a do_for_each_ref*() iteration. 497 * Normally this will be used with a files ref_store, since that's 498 * where all reference backends will presumably store their 499 * per-worktree refs. 500 */ 501#define DO_FOR_EACH_PER_WORKTREE_ONLY 0x02 502 503struct ref_store; 504 505/* refs backends */ 506 507/* ref_store_init flags */ 508#define REF_STORE_READ (1 << 0) 509#define REF_STORE_WRITE (1 << 1)/* can perform update operations */ 510#define REF_STORE_ODB (1 << 2)/* has access to object database */ 511#define REF_STORE_MAIN (1 << 3) 512#define REF_STORE_ALL_CAPS (REF_STORE_READ | \ 513 REF_STORE_WRITE | \ 514 REF_STORE_ODB | \ 515 REF_STORE_MAIN) 516 517/* 518 * Initialize the ref_store for the specified gitdir. These functions 519 * should call base_ref_store_init() to initialize the shared part of 520 * the ref_store and to record the ref_store for later lookup. 521 */ 522typedefstruct ref_store *ref_store_init_fn(const char*gitdir, 523unsigned int flags); 524 525typedefintref_init_db_fn(struct ref_store *refs,struct strbuf *err); 526 527typedefintref_transaction_prepare_fn(struct ref_store *refs, 528struct ref_transaction *transaction, 529struct strbuf *err); 530 531typedefintref_transaction_finish_fn(struct ref_store *refs, 532struct ref_transaction *transaction, 533struct strbuf *err); 534 535typedefintref_transaction_abort_fn(struct ref_store *refs, 536struct ref_transaction *transaction, 537struct strbuf *err); 538 539typedefintref_transaction_commit_fn(struct ref_store *refs, 540struct ref_transaction *transaction, 541struct strbuf *err); 542 543typedefintpack_refs_fn(struct ref_store *ref_store,unsigned int flags); 544typedefintpeel_ref_fn(struct ref_store *ref_store, 545const char*refname,unsigned char*sha1); 546typedefintcreate_symref_fn(struct ref_store *ref_store, 547const char*ref_target, 548const char*refs_heads_master, 549const char*logmsg); 550typedefintdelete_refs_fn(struct ref_store *ref_store,const char*msg, 551struct string_list *refnames,unsigned int flags); 552typedefintrename_ref_fn(struct ref_store *ref_store, 553const char*oldref,const char*newref, 554const char*logmsg); 555 556/* 557 * Iterate over the references in `ref_store` whose names start with 558 * `prefix`. `prefix` is matched as a literal string, without regard 559 * for path separators. If prefix is NULL or the empty string, iterate 560 * over all references in `ref_store`. 561 */ 562typedefstruct ref_iterator *ref_iterator_begin_fn( 563struct ref_store *ref_store, 564const char*prefix,unsigned int flags); 565 566/* reflog functions */ 567 568/* 569 * Iterate over the references in the specified ref_store that have a 570 * reflog. The refs are iterated over in arbitrary order. 571 */ 572typedefstruct ref_iterator *reflog_iterator_begin_fn( 573struct ref_store *ref_store); 574 575typedefintfor_each_reflog_ent_fn(struct ref_store *ref_store, 576const char*refname, 577 each_reflog_ent_fn fn, 578void*cb_data); 579typedefintfor_each_reflog_ent_reverse_fn(struct ref_store *ref_store, 580const char*refname, 581 each_reflog_ent_fn fn, 582void*cb_data); 583typedefintreflog_exists_fn(struct ref_store *ref_store,const char*refname); 584typedefintcreate_reflog_fn(struct ref_store *ref_store,const char*refname, 585int force_create,struct strbuf *err); 586typedefintdelete_reflog_fn(struct ref_store *ref_store,const char*refname); 587typedefintreflog_expire_fn(struct ref_store *ref_store, 588const char*refname,const unsigned char*sha1, 589unsigned int flags, 590 reflog_expiry_prepare_fn prepare_fn, 591 reflog_expiry_should_prune_fn should_prune_fn, 592 reflog_expiry_cleanup_fn cleanup_fn, 593void*policy_cb_data); 594 595/* 596 * Read a reference from the specified reference store, non-recursively. 597 * Set type to describe the reference, and: 598 * 599 * - If refname is the name of a normal reference, fill in sha1 600 * (leaving referent unchanged). 601 * 602 * - If refname is the name of a symbolic reference, write the full 603 * name of the reference to which it refers (e.g. 604 * "refs/heads/master") to referent and set the REF_ISSYMREF bit in 605 * type (leaving sha1 unchanged). The caller is responsible for 606 * validating that referent is a valid reference name. 607 * 608 * WARNING: refname might be used as part of a filename, so it is 609 * important from a security standpoint that it be safe in the sense 610 * of refname_is_safe(). Moreover, for symrefs this function sets 611 * referent to whatever the repository says, which might not be a 612 * properly-formatted or even safe reference name. NEITHER INPUT NOR 613 * OUTPUT REFERENCE NAMES ARE VALIDATED WITHIN THIS FUNCTION. 614 * 615 * Return 0 on success. If the ref doesn't exist, set errno to ENOENT 616 * and return -1. If the ref exists but is neither a symbolic ref nor 617 * a sha1, it is broken; set REF_ISBROKEN in type, set errno to 618 * EINVAL, and return -1. If there is another error reading the ref, 619 * set errno appropriately and return -1. 620 * 621 * Backend-specific flags might be set in type as well, regardless of 622 * outcome. 623 * 624 * It is OK for refname to point into referent. If so: 625 * 626 * - if the function succeeds with REF_ISSYMREF, referent will be 627 * overwritten and the memory formerly pointed to by it might be 628 * changed or even freed. 629 * 630 * - in all other cases, referent will be untouched, and therefore 631 * refname will still be valid and unchanged. 632 */ 633typedefintread_raw_ref_fn(struct ref_store *ref_store, 634const char*refname,unsigned char*sha1, 635struct strbuf *referent,unsigned int*type); 636 637struct ref_storage_be { 638struct ref_storage_be *next; 639const char*name; 640 ref_store_init_fn *init; 641 ref_init_db_fn *init_db; 642 643 ref_transaction_prepare_fn *transaction_prepare; 644 ref_transaction_finish_fn *transaction_finish; 645 ref_transaction_abort_fn *transaction_abort; 646 ref_transaction_commit_fn *initial_transaction_commit; 647 648 pack_refs_fn *pack_refs; 649 peel_ref_fn *peel_ref; 650 create_symref_fn *create_symref; 651 delete_refs_fn *delete_refs; 652 rename_ref_fn *rename_ref; 653 654 ref_iterator_begin_fn *iterator_begin; 655 read_raw_ref_fn *read_raw_ref; 656 657 reflog_iterator_begin_fn *reflog_iterator_begin; 658 for_each_reflog_ent_fn *for_each_reflog_ent; 659 for_each_reflog_ent_reverse_fn *for_each_reflog_ent_reverse; 660 reflog_exists_fn *reflog_exists; 661 create_reflog_fn *create_reflog; 662 delete_reflog_fn *delete_reflog; 663 reflog_expire_fn *reflog_expire; 664}; 665 666externstruct ref_storage_be refs_be_files; 667externstruct ref_storage_be refs_be_packed; 668 669/* 670 * A representation of the reference store for the main repository or 671 * a submodule. The ref_store instances for submodules are kept in a 672 * linked list. 673 */ 674struct ref_store { 675/* The backend describing this ref_store's storage scheme: */ 676const struct ref_storage_be *be; 677}; 678 679/* 680 * Fill in the generic part of refs and add it to our collection of 681 * reference stores. 682 */ 683voidbase_ref_store_init(struct ref_store *refs, 684const struct ref_storage_be *be); 685 686#endif/* REFS_REFS_INTERNAL_H */