diff options
| author | Junio C Hamano <gitster@pobox.com> | 2023-06-22 16:29:05 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2023-06-22 16:29:06 -0700 |
| commit | d9f9f6b358c4d8aad492bc4995be0926048a6248 (patch) | |
| tree | 62cf18a137ffecb83675d7d5dda4f2f43d33253d /replace-object.c | |
| parent | f2ffc7418685f75e43e2919426276141fd62c656 (diff) | |
| parent | 9c7d1b057ff36ee4190621d46e9fe3c83377aea7 (diff) | |
| download | git-d9f9f6b358c4d8aad492bc4995be0926048a6248.tar.gz | |
Merge branch 'ds/disable-replace-refs'
Introduce a mechanism to disable replace refs globally and per
repository.
* ds/disable-replace-refs:
repository: create read_replace_refs setting
replace-objects: create wrapper around setting
repository: create disable_replace_refs()
Diffstat (limited to 'replace-object.c')
| -rw-r--r-- | replace-object.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/replace-object.c b/replace-object.c index e98825d585..ae2d55b014 100644 --- a/replace-object.c +++ b/replace-object.c @@ -64,7 +64,7 @@ void prepare_replace_object(struct repository *r) * replacement object's name (replaced recursively, if necessary). * The return value is either oid or a pointer to a * permanently-allocated value. This function always respects replace - * references, regardless of the value of read_replace_refs. + * references, regardless of the value of r->settings.read_replace_refs. */ const struct object_id *do_lookup_replace_object(struct repository *r, const struct object_id *oid) @@ -84,3 +84,29 @@ const struct object_id *do_lookup_replace_object(struct repository *r, } die(_("replace depth too high for object %s"), oid_to_hex(oid)); } + +/* + * This indicator determines whether replace references should be + * respected process-wide, regardless of which repository is being + * using at the time. + */ +static int read_replace_refs = 1; + +void disable_replace_refs(void) +{ + read_replace_refs = 0; +} + +int replace_refs_enabled(struct repository *r) +{ + if (!read_replace_refs) + return 0; + + if (r->gitdir) { + prepare_repo_settings(r); + return r->settings.read_replace_refs; + } + + /* repository has no objects or refs. */ + return 0; +} |
