@@ -49,7 +49,9 @@ test_expect_success 'run [--auto|--quiet]' '
4949 git maintenance run --auto 2>/dev/null &&
5050 GIT_TRACE2_EVENT="$(pwd)/run-no-quiet.txt" \
5151 git maintenance run --no-quiet 2>/dev/null &&
52+ git maintenance is-needed &&
5253 test_subcommand git gc --quiet --no-detach --skip-foreground-tasks <run-no-auto.txt &&
54+ ! git maintenance is-needed --auto &&
5355 test_subcommand ! git gc --auto --quiet --no-detach --skip-foreground-tasks <run-auto.txt &&
5456 test_subcommand git gc --no-quiet --no-detach --skip-foreground-tasks <run-no-quiet.txt
5557'
@@ -180,6 +182,11 @@ test_expect_success 'commit-graph auto condition' '
180182
181183 test_commit first &&
182184
185+ ! git -c maintenance.commit-graph.auto=0 \
186+ maintenance is-needed --auto --task=commit-graph &&
187+ git -c maintenance.commit-graph.auto=1 \
188+ maintenance is-needed --auto --task=commit-graph &&
189+
183190 GIT_TRACE2_EVENT="$(pwd)/cg-zero-means-no.txt" \
184191 git -c maintenance.commit-graph.auto=0 $COMMAND &&
185192 GIT_TRACE2_EVENT="$(pwd)/cg-one-satisfied.txt" \
@@ -290,16 +297,23 @@ test_expect_success 'maintenance.loose-objects.auto' '
290297 git -c maintenance.loose-objects.auto=1 maintenance \
291298 run --auto --task=loose-objects 2>/dev/null &&
292299 test_subcommand ! git prune-packed --quiet <trace-lo1.txt &&
300+
293301 printf data-A | git hash-object -t blob --stdin -w &&
302+ ! git -c maintenance.loose-objects.auto=2 \
303+ maintenance is-needed --auto --task=loose-objects &&
294304 GIT_TRACE2_EVENT="$(pwd)/trace-loA" \
295305 git -c maintenance.loose-objects.auto=2 \
296306 maintenance run --auto --task=loose-objects 2>/dev/null &&
297307 test_subcommand ! git prune-packed --quiet <trace-loA &&
308+
298309 printf data-B | git hash-object -t blob --stdin -w &&
310+ git -c maintenance.loose-objects.auto=2 \
311+ maintenance is-needed --auto --task=loose-objects &&
299312 GIT_TRACE2_EVENT="$(pwd)/trace-loB" \
300313 git -c maintenance.loose-objects.auto=2 \
301314 maintenance run --auto --task=loose-objects 2>/dev/null &&
302315 test_subcommand git prune-packed --quiet <trace-loB &&
316+
303317 GIT_TRACE2_EVENT="$(pwd)/trace-loC" \
304318 git -c maintenance.loose-objects.auto=2 \
305319 maintenance run --auto --task=loose-objects 2>/dev/null &&
@@ -421,10 +435,13 @@ run_incremental_repack_and_verify () {
421435 test_commit A &&
422436 git repack -adk &&
423437 git multi-pack-index write &&
438+ ! git -c maintenance.incremental-repack.auto=1 \
439+ maintenance is-needed --auto --task=incremental-repack &&
424440 GIT_TRACE2_EVENT=" $( pwd) /midx-init.txt" git \
425441 -c maintenance.incremental-repack.auto=1 \
426442 maintenance run --auto --task=incremental-repack 2> /dev/null &&
427443 test_subcommand ! git multi-pack-index write --no-progress < midx-init.txt &&
444+
428445 test_commit B &&
429446 git pack-objects --revs .git/objects/pack/pack << -\EOF &&
430447 HEAD
@@ -434,11 +451,14 @@ run_incremental_repack_and_verify () {
434451 -c maintenance.incremental-repack.auto=2 \
435452 maintenance run --auto --task=incremental-repack 2> /dev/null &&
436453 test_subcommand ! git multi-pack-index write --no-progress < trace-A &&
454+
437455 test_commit C &&
438456 git pack-objects --revs .git/objects/pack/pack << -\EOF &&
439457 HEAD
440458 ^HEAD~1
441459 EOF
460+ git -c maintenance.incremental-repack.auto=2 \
461+ maintenance is-needed --auto --task=incremental-repack &&
442462 GIT_TRACE2_EVENT=$( pwd) /trace-B git \
443463 -c maintenance.incremental-repack.auto=2 \
444464 maintenance run --auto --task=incremental-repack 2> /dev/null &&
@@ -485,9 +505,15 @@ test_expect_success 'reflog-expire task --auto only packs when exceeding limits'
485505 git reflog expire --all --expire=now &&
486506 test_commit reflog-one &&
487507 test_commit reflog-two &&
508+
509+ ! git -c maintenance.reflog-expire.auto=3 \
510+ maintenance is-needed --auto --task=reflog-expire &&
488511 GIT_TRACE2_EVENT="$(pwd)/reflog-expire-auto.txt" \
489512 git -c maintenance.reflog-expire.auto=3 maintenance run --auto --task=reflog-expire &&
490513 test_subcommand ! git reflog expire --all <reflog-expire-auto.txt &&
514+
515+ git -c maintenance.reflog-expire.auto=2 \
516+ maintenance is-needed --auto --task=reflog-expire &&
491517 GIT_TRACE2_EVENT="$(pwd)/reflog-expire-auto.txt" \
492518 git -c maintenance.reflog-expire.auto=2 maintenance run --auto --task=reflog-expire &&
493519 test_subcommand git reflog expire --all <reflog-expire-auto.txt
@@ -514,6 +540,7 @@ test_expect_success 'worktree-prune task --auto only prunes with prunable worktr
514540 test_expect_worktree_prune ! git maintenance run --auto --task=worktree-prune &&
515541 mkdir .git/worktrees &&
516542 : >.git/worktrees/abc &&
543+ git maintenance is-needed --auto --task=worktree-prune &&
517544 test_expect_worktree_prune git maintenance run --auto --task=worktree-prune
518545'
519546
@@ -530,22 +557,7 @@ test_expect_success 'worktree-prune task with --auto honors maintenance.worktree
530557 test_expect_worktree_prune ! git -c maintenance.worktree-prune.auto=0 maintenance run --auto --task=worktree-prune &&
531558 # A positive value should require at least this many prunable worktrees.
532559 test_expect_worktree_prune ! git -c maintenance.worktree-prune.auto=4 maintenance run --auto --task=worktree-prune &&
533- test_expect_worktree_prune git -c maintenance.worktree-prune.auto=3 maintenance run --auto --task=worktree-prune
534- '
535-
536- test_expect_success ' worktree-prune task with --auto honors maintenance.worktree-prune.auto' '
537- # A negative value should always prune.
538- test_expect_worktree_prune git -c maintenance.worktree-prune.auto=-1 maintenance run --auto --task=worktree-prune &&
539-
540- mkdir .git/worktrees &&
541- : >.git/worktrees/first &&
542- : >.git/worktrees/second &&
543- : >.git/worktrees/third &&
544-
545- # Zero should never prune.
546- test_expect_worktree_prune ! git -c maintenance.worktree-prune.auto=0 maintenance run --auto --task=worktree-prune &&
547- # A positive value should require at least this many prunable worktrees.
548- test_expect_worktree_prune ! git -c maintenance.worktree-prune.auto=4 maintenance run --auto --task=worktree-prune &&
560+ git -c maintenance.worktree-prune.auto=3 maintenance is-needed --auto --task=worktree-prune &&
549561 test_expect_worktree_prune git -c maintenance.worktree-prune.auto=3 maintenance run --auto --task=worktree-prune
550562'
551563
@@ -554,11 +566,13 @@ test_expect_success 'worktree-prune task honors gc.worktreePruneExpire' '
554566 rm -rf worktree &&
555567
556568 rm -f worktree-prune.txt &&
569+ ! git -c gc.worktreePruneExpire=1.week.ago maintenance is-needed --auto --task=worktree-prune &&
557570 GIT_TRACE2_EVENT="$(pwd)/worktree-prune.txt" git -c gc.worktreePruneExpire=1.week.ago maintenance run --auto --task=worktree-prune &&
558571 test_subcommand ! git worktree prune --expire 1.week.ago <worktree-prune.txt &&
559572 test_path_is_dir .git/worktrees/worktree &&
560573
561574 rm -f worktree-prune.txt &&
575+ git -c gc.worktreePruneExpire=now maintenance is-needed --auto --task=worktree-prune &&
562576 GIT_TRACE2_EVENT="$(pwd)/worktree-prune.txt" git -c gc.worktreePruneExpire=now maintenance run --auto --task=worktree-prune &&
563577 test_subcommand git worktree prune --expire now <worktree-prune.txt &&
564578 test_path_is_missing .git/worktrees/worktree
@@ -583,28 +597,36 @@ test_expect_success 'rerere-gc task without --auto always collects garbage' '
583597
584598test_expect_success ' rerere-gc task with --auto only prunes with prunable entries' '
585599 test_when_finished "rm -rf .git/rr-cache" &&
600+ ! git maintenance is-needed --auto --task=rerere-gc &&
586601 test_expect_rerere_gc ! git maintenance run --auto --task=rerere-gc &&
587602 mkdir .git/rr-cache &&
603+ ! git maintenance is-needed --auto --task=rerere-gc &&
588604 test_expect_rerere_gc ! git maintenance run --auto --task=rerere-gc &&
589605 : >.git/rr-cache/entry &&
606+ git maintenance is-needed --auto --task=rerere-gc &&
590607 test_expect_rerere_gc git maintenance run --auto --task=rerere-gc
591608'
592609
593610test_expect_success ' rerere-gc task with --auto honors maintenance.rerere-gc.auto' '
594611 test_when_finished "rm -rf .git/rr-cache" &&
595612
596613 # A negative value should always prune.
614+ git -c maintenance.rerere-gc.auto=-1 maintenance is-needed --auto --task=rerere-gc &&
597615 test_expect_rerere_gc git -c maintenance.rerere-gc.auto=-1 maintenance run --auto --task=rerere-gc &&
598616
599617 # A positive value prunes when there is at least one entry.
618+ ! git -c maintenance.rerere-gc.auto=9000 maintenance is-needed --auto --task=rerere-gc &&
600619 test_expect_rerere_gc ! git -c maintenance.rerere-gc.auto=9000 maintenance run --auto --task=rerere-gc &&
601620 mkdir .git/rr-cache &&
621+ ! git -c maintenance.rerere-gc.auto=9000 maintenance is-needed --auto --task=rerere-gc &&
602622 test_expect_rerere_gc ! git -c maintenance.rerere-gc.auto=9000 maintenance run --auto --task=rerere-gc &&
603623 : >.git/rr-cache/entry-1 &&
624+ git -c maintenance.rerere-gc.auto=9000 maintenance is-needed --auto --task=rerere-gc &&
604625 test_expect_rerere_gc git -c maintenance.rerere-gc.auto=9000 maintenance run --auto --task=rerere-gc &&
605626
606627 # Zero should never prune.
607628 : >.git/rr-cache/entry-1 &&
629+ ! git -c maintenance.rerere-gc.auto=0 maintenance is-needed --auto --task=rerere-gc &&
608630 test_expect_rerere_gc ! git -c maintenance.rerere-gc.auto=0 maintenance run --auto --task=rerere-gc
609631'
610632
0 commit comments