Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,11 @@ If you want to forget particular old test results without retesting, run `git te

If you want to permanently forget *all* stored results for a particular test (e.g., if something in your environment has changed), run

git test forget-results [--test=<name>]
git test forget-results --all [--test=<name>]

If you want to permanently forget *all* stored results for *all test*, run

git test forget-results --all-tests

### Continue on test failures

Expand Down
32 changes: 31 additions & 1 deletion bin/git-test
Original file line number Diff line number Diff line change
Expand Up @@ -826,7 +826,25 @@ def cmd_results(parser, options):


def cmd_forget_results(parser, options):
test = Test(options.test)
NO_ARGUMENTS_WARNING = """\
WARNING: Which test results to forget was not specified. Assuming --all for
backwards compability. This backwards compability might be removed in the
future, please update to explicit specify what should be removed.
"""

if not (options.all or options.all_tests):
sys.stderr.write(colored(NO_ARGUMENTS_WARNING, AnsiColor.CYAN))
options.all = True

if options.all_tests:
for test in iter_tests():
forget_results_for_test(test.name)
else:
forget_results_for_test(options.test)


def forget_results_for_test(name):
test = Test(name)

cmd = ['git', 'config', 'test.%s.command' % (test.name,)]
try:
Expand All @@ -838,6 +856,9 @@ def cmd_forget_results(parser, options):
test.initialize_status(
'Test results reinitialized by \'git test forget-results\''
)
sys.stdout.write(colored('All test results for test ', AnsiColor.GREEN))
sys.stdout.write(colored(test.name, AnsiColor.CYAN))
sys.stdout.write(colored(' were forgotten.\n', AnsiColor.GREEN))


test_re = re.compile(r'^test\.(?P<name>.*)\.command$')
Expand Down Expand Up @@ -1058,6 +1079,15 @@ def main(args):
action='store', default='default',
help='name of test whose results should be forgotten (default is \'default\')',
)
subparser.add_argument(
'--all', action='store_true',
help='forget all existing test results for the current test',
)
subparser.add_argument(
'--all-tests',
action='store_true',
help='forget all existing test results for all tests',
)
add_verbosity_options(subparser)

subparser = subparsers.add_parser(
Expand Down
164 changes: 164 additions & 0 deletions test/forget-results.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
#! /bin/sh

test_description="Test forgetting test results"

. ./sharness.sh

test_expect_success 'Set up test repository' '
git init . &&
git config user.name "Test User" &&
git config user.email "user@example.com" &&
for i in $(seq 0 3)
do
echo $i >number &&
git add number &&
git commit -m "Number $i"
done &&
true
'

test_expect_success 'Add tests' '
git-test add true &&
git-test add -t t1 true &&
git-test add -t t2 true &&
git-test add -t t3 true &&
true
'

test_expect_success 'Add some simulated test results' '
git notes --ref=tests/default add -m "good" HEAD~0^{tree} &&
git notes --ref=tests/default add -m "good" HEAD~1^{tree} &&
git notes --ref=tests/default add -m "good" HEAD~2^{tree} &&
git notes --ref=tests/default add -m "good" HEAD~3^{tree} &&
true &&
git notes --ref=tests/t1 add -m "good" HEAD~0^{tree} &&
git notes --ref=tests/t1 add -m "good" HEAD~1^{tree} &&
git notes --ref=tests/t1 add -m "good" HEAD~2^{tree} &&
git notes --ref=tests/t1 add -m "bad" HEAD~3^{tree} &&
true &&
git notes --ref=tests/t2 add -m "good" HEAD~1^{tree} &&
git notes --ref=tests/t2 add -m "bad" HEAD~2^{tree} &&
true
'

test_expect_success 'Verify number of notes' '
echo 4 > expected &&
git notes --ref=tests/default list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 4 > expected &&
git notes --ref=tests/t1 list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 2 > expected &&
git notes --ref=tests/t2 list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 0 > expected &&
git notes --ref=tests/t3 list | wc -l >actual &&
test_cmp expected actual &&
true
'

test_expect_success 'Forgetting default and not affecting other tests' '
echo "All test results for test default were forgotten." >expected &&
git-test forget-results --all >actual &&
test_must_fail grep -q WARNING actual
test_cmp expected actual &&
echo 0 > expected &&
git notes --ref=tests/default list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 4 > expected &&
git notes --ref=tests/t1 list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 2 > expected &&
git notes --ref=tests/t2 list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 0 > expected &&
git notes --ref=tests/t3 list | wc -l >actual &&
test_cmp expected actual &&
true
'


test_expect_success 'Add default test results again' '
git notes --ref=tests/default add -m "good" HEAD~0^{tree} &&
git notes --ref=tests/default add -m "good" HEAD~1^{tree} &&
git notes --ref=tests/default add -m "good" HEAD~2^{tree} &&
git notes --ref=tests/default add -m "good" HEAD~3^{tree} &&
true
'


test_expect_success 'Forgetting t1 and not affecting other tests' '
echo "All test results for test t1 were forgotten." >expected &&
git-test forget-results --all --test t1 >actual &&
test_must_fail grep -q WARNING actual
test_cmp expected actual &&
echo 4 > expected &&
git notes --ref=tests/default list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 0 > expected &&
git notes --ref=tests/t1 list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 2 > expected &&
git notes --ref=tests/t2 list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 0 > expected &&
git notes --ref=tests/t3 list | wc -l >actual &&
test_cmp expected actual &&
true
'

test_expect_success 'Forgetting all test results' '
echo "All test results for test default were forgotten." >expected &&
echo "All test results for test t1 were forgotten." >>expected &&
echo "All test results for test t2 were forgotten." >>expected &&
echo "All test results for test t3 were forgotten." >>expected &&
git-test forget-results --all-tests >actual &&
test_must_fail grep -q WARNING actual
test_cmp expected actual &&
echo 0 > expected &&
git notes --ref=tests/default list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 0 > expected &&
git notes --ref=tests/t1 list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 0 > expected &&
git notes --ref=tests/t2 list | wc -l >actual &&
test_cmp expected actual &&
true &&
echo 0 > expected &&
git notes --ref=tests/t3 list | wc -l >actual &&
test_cmp expected actual &&
true
'


# sed command: On line 1 remove from the first space and the rest, and delete
# lines 2 and till the last line, e.g. only keep first word on first line.
test_expect_success 'Missing --all or --all-tests argument produces warning' '
echo "WARNING:" >expected
git-test forget-results 2>actual &&
sed -i "1s/ .*//; 2,\$d" actual &&
test_cmp expected actual
'


test_expect_success 'Should not give output on non-existent test' '
rm -f expected &&
touch expected &&
git-test forget-results --all -t this-test-does-not-exist >actual &&
test_cmp expected actual &&
true
'

test_done