mirror of
https://github.com/git/git.git
synced 2026-01-09 17:46:37 +00:00
shallow: use struct 'shallow_lock' for additional safety
In previous patches, the functions 'commit_shallow_file' and 'rollback_shallow_file' were introduced to reset the shallowness validity checks on a repository after potentially modifying '.git/shallow'. These functions can be made safer by wrapping the 'struct lockfile *' in a new type, 'shallow_lock', so that they cannot be called with a raw lock (and potentially misused by other code that happens to possess a lockfile, but has nothing to do with shallowness). This patch introduces that type as a thin wrapper around 'struct lockfile', and updates the two aforementioned functions and their callers to use it. Suggested-by: Junio C Hamano <gitster@pobox.com> Helped-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
a410161768
commit
cac4b8e22e
21
shallow.h
21
shallow.h
@@ -10,10 +10,25 @@ void set_alternate_shallow_file(struct repository *r, const char *path, int over
|
||||
int register_shallow(struct repository *r, const struct object_id *oid);
|
||||
int unregister_shallow(const struct object_id *oid);
|
||||
int is_repository_shallow(struct repository *r);
|
||||
|
||||
/*
|
||||
* Lock for updating the $GIT_DIR/shallow file.
|
||||
*
|
||||
* Use `commit_shallow_file()` to commit an update, or
|
||||
* `rollback_shallow_file()` to roll it back. In either case, any
|
||||
* in-memory cached information about which commits are shallow will be
|
||||
* appropriately invalidated so that future operations reflect the new
|
||||
* state.
|
||||
*/
|
||||
struct shallow_lock {
|
||||
struct lock_file lock;
|
||||
};
|
||||
#define SHALLOW_LOCK_INIT { LOCK_INIT }
|
||||
|
||||
/* commit $GIT_DIR/shallow and reset stat-validity checks */
|
||||
int commit_shallow_file(struct repository *r, struct lock_file *lk);
|
||||
int commit_shallow_file(struct repository *r, struct shallow_lock *lk);
|
||||
/* rollback $GIT_DIR/shallow and reset stat-validity checks */
|
||||
void rollback_shallow_file(struct repository *r, struct lock_file *lk);
|
||||
void rollback_shallow_file(struct repository *r, struct shallow_lock *lk);
|
||||
|
||||
struct commit_list *get_shallow_commits(struct object_array *heads,
|
||||
int depth, int shallow_flag, int not_shallow_flag);
|
||||
@@ -22,7 +37,7 @@ struct commit_list *get_shallow_commits_by_rev_list(
|
||||
int write_shallow_commits(struct strbuf *out, int use_pack_protocol,
|
||||
const struct oid_array *extra);
|
||||
|
||||
void setup_alternate_shallow(struct lock_file *shallow_lock,
|
||||
void setup_alternate_shallow(struct shallow_lock *shallow_lock,
|
||||
const char **alternate_shallow_file,
|
||||
const struct oid_array *extra);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user