diff options
author | Cornelius Weig <cornelius.weig@tngtech.com> | 2017-01-27 11:09:47 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-01-31 10:01:24 -0800 |
commit | 341fb28621201c5e6c9d3fee5baf7c532fa8a618 (patch) | |
tree | 1968a421d74a50dcc53304dd0196af5cf76b8d14 /refs | |
parent | d0c93194ecde2886d4e90d7006c998ea9592d0a0 (diff) | |
download | git-341fb28621201c5e6c9d3fee5baf7c532fa8a618.tar.gz git-341fb28621201c5e6c9d3fee5baf7c532fa8a618.tar.xz |
refs: add option core.logAllRefUpdates = always
When core.logallrefupdates is true, we only create a new reflog for refs
that are under certain well-known hierarchies. The reason is that we
know that some hierarchies (like refs/tags) are not meant to change, and
that unknown hierarchies might not want reflogs at all (e.g., a
hypothetical refs/foo might be meant to change often and drop old
history immediately).
However, sometimes it is useful to override this decision and simply log
for all refs, because the safety and audit trail is more important than
the performance implications of keeping the log around.
This patch introduces a new "always" mode for the core.logallrefupdates
option which will log updates to everything under refs/, regardless
where in the hierarchy it is (we still will not log things like
ORIG_HEAD and FETCH_HEAD, which are known to be transient).
Based-on-patch-by: Jeff King <peff@peff.net>
Signed-off-by: Cornelius Weig <cornelius.weig@tngtech.com>
Reviewed-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'refs')
-rw-r--r-- | refs/files-backend.c | 6 | ||||
-rw-r--r-- | refs/refs-internal.h | 2 |
2 files changed, 3 insertions, 5 deletions
diff --git a/refs/files-backend.c b/refs/files-backend.c index f9023939d..14b17a63f 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -2682,7 +2682,7 @@ static int files_rename_ref(struct ref_store *ref_store, } flag = log_all_ref_updates; - log_all_ref_updates = 0; + log_all_ref_updates = LOG_REFS_NONE; if (write_ref_to_lockfile(lock, orig_sha1, &err) || commit_ref_update(refs, lock, orig_sha1, NULL, &err)) { error("unable to write current sha1 into %s: %s", oldrefname, err.buf); @@ -2835,8 +2835,8 @@ static int log_ref_write_1(const char *refname, const unsigned char *old_sha1, { int logfd, result, oflags = O_APPEND | O_WRONLY; - if (log_all_ref_updates < 0) - log_all_ref_updates = !is_bare_repository(); + if (log_all_ref_updates == LOG_REFS_UNSET) + log_all_ref_updates = is_bare_repository() ? LOG_REFS_NONE : LOG_REFS_NORMAL; result = log_ref_setup(refname, logfile, err, flags & REF_FORCE_CREATE_REFLOG); diff --git a/refs/refs-internal.h b/refs/refs-internal.h index 708b26082..25444cf5b 100644 --- a/refs/refs-internal.h +++ b/refs/refs-internal.h @@ -133,8 +133,6 @@ int verify_refname_available(const char *newname, */ int copy_reflog_msg(char *buf, const char *msg); -int should_autocreate_reflog(const char *refname); - /** * Information needed for a single ref update. Set new_sha1 to the new * value or to null_sha1 to delete the ref. To check the old value |