There is not much to say about the actual change in this patch, which is straightforward. There is something to say about the lack of change though. The definition of "interesting" changes to keep in backup log previously is "file modification, except file removal". It is further refined: only changes coming from worktree (for from the user to be more accurate) are interesting. Changes in the index from object database (e.g. merging, switching branches, resetting...) are not interesting because the actual content is already in the object database and can be recovered (provided that you still have the history of commands you used, of course) Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin/add.c | 5 +++++ t/t2080-backup-log.sh | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/builtin/add.c b/builtin/add.c index f65c172299..f21d9efdd9 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -393,6 +393,7 @@ int cmd_add(int argc, const char **argv, const char *prefix) int require_pathspec; char *seen = NULL; struct lock_file lock_file = LOCK_INIT; + int core_backup_log = 0; git_config(add_config, NULL); @@ -439,6 +440,10 @@ int cmd_add(int argc, const char **argv, const char *prefix) (!(addremove || take_worktree_changes) ? ADD_CACHE_IGNORE_REMOVAL : 0)); + repo_config_get_bool(the_repository, "core.backuplog", &core_backup_log); + if (core_backup_log) + flags |= ADD_CACHE_LOG_UPDATES; + if (require_pathspec && argc == 0) { fprintf(stderr, _("Nothing specified, nothing added.\n")); fprintf(stderr, _("Maybe you wanted to say 'git add .'?\n")); diff --git a/t/t2080-backup-log.sh b/t/t2080-backup-log.sh index 267c34bb25..f7bdaaa3f6 100755 --- a/t/t2080-backup-log.sh +++ b/t/t2080-backup-log.sh @@ -17,4 +17,15 @@ test_expect_success 'backup-log add new item' ' test_cmp expected .git/index.bkl ' +test_expect_success 'add writes backup log' ' + test_tick && + echo update >>initial.t && + OLD=$(git rev-parse :./initial.t) && + NEW=$(git hash-object initial.t) && + git -c core.backupLog=true add initial.t && + echo "$OLD $NEW $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $test_tick -0700 initial.t" >expected && + tail -n1 .git/index.bkl >actual && + test_cmp expected actual +' + test_done -- 2.20.0.rc2.486.g9832c05c3d