refs: implement simple transactions for the packed-refs file
Handle simple transactions for the packed-refs file at the packed_ref_cache level via new functions lock_packed_refs(), commit_packed_refs(), and rollback_packed_refs(). Only allow the packed ref cache to be modified (via add_packed_ref()) while the packed refs file is locked. Change clone to add the new references within a transaction. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
2fff781290
commit
9f69d29770
26
refs.h
26
refs.h
@ -77,11 +77,33 @@ extern int for_each_rawref(each_ref_fn, void *);
|
||||
extern void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname);
|
||||
|
||||
/*
|
||||
* Add a reference to the in-memory packed reference cache. To actually
|
||||
* write the reference to the packed-refs file, call pack_refs().
|
||||
* Lock the packed-refs file for writing. Flags is passed to
|
||||
* hold_lock_file_for_update(). Return 0 on success.
|
||||
*/
|
||||
extern int lock_packed_refs(int flags);
|
||||
|
||||
/*
|
||||
* Add a reference to the in-memory packed reference cache. This may
|
||||
* only be called while the packed-refs file is locked (see
|
||||
* lock_packed_refs()). To actually write the packed-refs file, call
|
||||
* commit_packed_refs().
|
||||
*/
|
||||
extern void add_packed_ref(const char *refname, const unsigned char *sha1);
|
||||
|
||||
/*
|
||||
* Write the current version of the packed refs cache from memory to
|
||||
* disk. The packed-refs file must already be locked for writing (see
|
||||
* lock_packed_refs()). Return zero on success.
|
||||
*/
|
||||
extern int commit_packed_refs(void);
|
||||
|
||||
/*
|
||||
* Rollback the lockfile for the packed-refs file, and discard the
|
||||
* in-memory packed reference cache. (The packed-refs file will be
|
||||
* read anew if it is needed again after this function is called.)
|
||||
*/
|
||||
extern void rollback_packed_refs(void);
|
||||
|
||||
/*
|
||||
* Flags for controlling behaviour of pack_refs()
|
||||
* PACK_REFS_PRUNE: Prune loose refs after packing
|
||||
|
Reference in New Issue
Block a user