diff options
author | Derrick Stolee <dstolee@microsoft.com> | 2020-10-15 20:22:02 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-10-16 18:36:42 +0300 |
commit | a4cb1a2339c1aa4ba71ebc6d2b07d537e1071124 (patch) | |
tree | c92f1aff8d66b053d05cadb653a57857f3c3190b /t/t7900-maintenance.sh | |
parent | 2fec604f8df51fcf47551723e68a3447915b9eb9 (diff) |
maintenance: create maintenance.strategy config
To provide an on-ramp for users to use background maintenance without
several 'git config' commands, create a 'maintenance.strategy' config
option. Currently, the only important value is 'incremental' which
assigns the following schedule:
* gc: never
* prefetch: hourly
* commit-graph: hourly
* loose-objects: daily
* incremental-repack: daily
These tasks are chosen to minimize disruptions to foreground Git
commands and use few compute resources.
The 'maintenance.strategy' is intended as a baseline that can be
customzied further by manually assigning 'maintenance.<task>.enabled'
and 'maintenance.<task>.schedule' config options, which will override
any recommendation from 'maintenance.strategy'. This operates similarly
to config options like 'feature.experimental' which operate as "meta"
config options that change default config values.
This presents a way forward for updating the 'incremental' strategy in
the future or adding new strategies. For example, a potential strategy
could be to include a 'full' strategy that runs the 'gc' task weekly
and no other tasks by default.
Helped-by: Martin Ă…gren <martin.agren@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t7900-maintenance.sh')
-rwxr-xr-x | t/t7900-maintenance.sh | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh index 7715e40391..7440a0ea19 100755 --- a/t/t7900-maintenance.sh +++ b/t/t7900-maintenance.sh @@ -300,6 +300,55 @@ test_expect_success '--schedule inheritance weekly -> daily -> hourly' ' test_subcommand git multi-pack-index write --no-progress <weekly.txt ' +test_expect_success 'maintenance.strategy inheritance' ' + for task in commit-graph loose-objects incremental-repack + do + git config --unset maintenance.$task.schedule || return 1 + done && + + test_when_finished git config --unset maintenance.strategy && + git config maintenance.strategy incremental && + + GIT_TRACE2_EVENT="$(pwd)/incremental-hourly.txt" \ + git maintenance run --schedule=hourly --quiet && + GIT_TRACE2_EVENT="$(pwd)/incremental-daily.txt" \ + git maintenance run --schedule=daily --quiet && + + test_subcommand git commit-graph write --split --reachable \ + --no-progress <incremental-hourly.txt && + test_subcommand ! git prune-packed --quiet <incremental-hourly.txt && + test_subcommand ! git multi-pack-index write --no-progress \ + <incremental-hourly.txt && + + test_subcommand git commit-graph write --split --reachable \ + --no-progress <incremental-daily.txt && + test_subcommand git prune-packed --quiet <incremental-daily.txt && + test_subcommand git multi-pack-index write --no-progress \ + <incremental-daily.txt && + + # Modify defaults + git config maintenance.commit-graph.schedule daily && + git config maintenance.loose-objects.schedule hourly && + git config maintenance.incremental-repack.enabled false && + + GIT_TRACE2_EVENT="$(pwd)/modified-hourly.txt" \ + git maintenance run --schedule=hourly --quiet && + GIT_TRACE2_EVENT="$(pwd)/modified-daily.txt" \ + git maintenance run --schedule=daily --quiet && + + test_subcommand ! git commit-graph write --split --reachable \ + --no-progress <modified-hourly.txt && + test_subcommand git prune-packed --quiet <modified-hourly.txt && + test_subcommand ! git multi-pack-index write --no-progress \ + <modified-hourly.txt && + + test_subcommand git commit-graph write --split --reachable \ + --no-progress <modified-daily.txt && + test_subcommand git prune-packed --quiet <modified-daily.txt && + test_subcommand ! git multi-pack-index write --no-progress \ + <modified-daily.txt +' + test_expect_success 'register and unregister' ' test_when_finished git config --global --unset-all maintenance.repo && git config --global --add maintenance.repo /existing1 && |