diff options
author | Junio C Hamano <gitster@pobox.com> | 2020-10-04 12:49:07 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-10-04 12:49:07 -0700 |
commit | 230ff3e9970755fe4ba2e69165eab1f61752f1d1 (patch) | |
tree | cc263e9c30b5a2ec7d13f94a7b93704fd13d5324 /t | |
parent | Merge branch 'jk/drop-unaligned-loads' (diff) | |
parent | blame: validate and peel the object names on the ignore list (diff) | |
download | tgif-230ff3e9970755fe4ba2e69165eab1f61752f1d1.tar.xz |
Merge branch 'jc/blame-ignore-fix'
"git blame --ignore-rev/--ignore-revs-file" failed to validate
their input are valid revision, and failed to take into account
that the user may want to give an annotated tag instead of a
commit, which has been corrected.
* jc/blame-ignore-fix:
blame: validate and peel the object names on the ignore list
t8013: minimum preparatory clean-up
Diffstat (limited to 't')
-rwxr-xr-x | t/t8013-blame-ignore-revs.sh | 61 |
1 files changed, 39 insertions, 22 deletions
diff --git a/t/t8013-blame-ignore-revs.sh b/t/t8013-blame-ignore-revs.sh index 36dc31eb39..24ae5018e8 100755 --- a/t/t8013-blame-ignore-revs.sh +++ b/t/t8013-blame-ignore-revs.sh @@ -21,6 +21,7 @@ test_expect_success setup ' test_tick && git commit -m X && git tag X && + git tag -a -m "X (annotated)" XT && git blame --line-porcelain file >blame_raw && @@ -31,20 +32,36 @@ test_expect_success setup ' grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual && git rev-parse X >expect && test_cmp expect actual +' + +# Ensure bogus --ignore-rev requests are caught +test_expect_success 'validate --ignore-rev' ' + test_must_fail git blame --ignore-rev X^{tree} file +' + +# Ensure bogus --ignore-revs-file requests are caught +test_expect_success 'validate --ignore-revs-file' ' + git rev-parse X^{tree} >ignore_x && + test_must_fail git blame --ignore-revs-file ignore_x file +' + +for I in X XT +do + # Ignore X (or XT), make sure A is blamed for line 1 and B for line 2. + # Giving X (i.e. commit) and XT (i.e. annotated tag to commit) should + # produce the same result. + test_expect_success "ignore_rev_changing_lines ($I)" ' + git blame --line-porcelain --ignore-rev $I file >blame_raw && + + grep -E "^[0-9a-f]+ [0-9]+ 1" blame_raw | sed -e "s/ .*//" >actual && + git rev-parse A >expect && + test_cmp expect actual && + + grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual && + git rev-parse B >expect && + test_cmp expect actual ' - -# Ignore X, make sure A is blamed for line 1 and B for line 2. -test_expect_success ignore_rev_changing_lines ' - git blame --line-porcelain --ignore-rev X file >blame_raw && - - grep -E "^[0-9a-f]+ [0-9]+ 1" blame_raw | sed -e "s/ .*//" >actual && - git rev-parse A >expect && - test_cmp expect actual && - - grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual && - git rev-parse B >expect && - test_cmp expect actual - ' +done # For ignored revs that have added 'unblamable' lines, attribute those to the # ignored commit. @@ -67,7 +84,7 @@ test_expect_success ignore_rev_adding_unblamable_lines ' grep -E "^[0-9a-f]+ [0-9]+ 4" blame_raw | sed -e "s/ .*//" >actual && test_cmp expect actual - ' +' # Ignore X and Y, both in separate files. Lines 1 == A, 2 == B. test_expect_success ignore_revs_from_files ' @@ -82,7 +99,7 @@ test_expect_success ignore_revs_from_files ' grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual && git rev-parse B >expect && test_cmp expect actual - ' +' # Ignore X from the config option, Y from a file. test_expect_success ignore_revs_from_configs_and_files ' @@ -96,7 +113,7 @@ test_expect_success ignore_revs_from_configs_and_files ' grep -E "^[0-9a-f]+ [0-9]+ 2" blame_raw | sed -e "s/ .*//" >actual && git rev-parse B >expect && test_cmp expect actual - ' +' # Override blame.ignoreRevsFile (ignore_x) with an empty string. X should be # blamed now for lines 1 and 2, since we are no longer ignoring X. @@ -120,7 +137,7 @@ test_expect_success bad_files_and_revs ' echo NOREV >ignore_norev && test_must_fail git blame file --ignore-revs-file ignore_norev 2>err && test_i18ngrep "invalid object name: NOREV" err - ' +' # For ignored revs that have added 'unblamable' lines, mark those lines with a # '*' @@ -138,7 +155,7 @@ test_expect_success mark_unblamable_lines ' sed -n "4p" blame_raw | cut -c1 >actual && test_cmp expect actual - ' +' # Commit Z will touch the first two lines. Y touched all four. # A--B--X--Y--Z @@ -171,7 +188,7 @@ test_expect_success mark_ignored_lines ' sed -n "4p" blame_raw | cut -c1 >actual && ! test_cmp expect actual - ' +' # For ignored revs that added 'unblamable' lines and more recent commits changed # the blamable lines, mark the unblamable lines with a @@ -190,7 +207,7 @@ test_expect_success mark_unblamable_lines_intermediate ' sed -n "4p" blame_raw | cut -c1 >actual && test_cmp expect actual - ' +' # The heuristic called by guess_line_blames() tries to find the size of a # blame_entry 'e' in the parent's address space. Those calculations need to @@ -227,7 +244,7 @@ test_expect_success ignored_chunk_negative_parent_size ' git tag C && git blame file --ignore-rev B >blame_raw - ' +' # Resetting the repo and creating: # @@ -269,6 +286,6 @@ test_expect_success ignore_merge ' grep -E "^[0-9a-f]+ [0-9]+ 9" blame_raw | sed -e "s/ .*//" >actual && git rev-parse C >expect && test_cmp expect actual - ' +' test_done |