Change check_refname_format() to reject unnormalized refnames
Since much of the infrastructure does not work correctly with unnormalized refnames, change check_refname_format() to reject them. Similarly, change "git check-ref-format" to reject unnormalized refnames by default. But add an option --normalize, which causes "git check-ref-format" to normalize the refname before checking its format, and print the normalized refname. This is exactly the behavior of the old --print option, which is retained but deprecated. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
a5e4ec063a
commit
a40e6fb67a
@ -28,11 +28,17 @@ invalid_ref() {
|
||||
invalid_ref ''
|
||||
invalid_ref '/'
|
||||
invalid_ref '/' --allow-onelevel
|
||||
invalid_ref '/' --normalize
|
||||
invalid_ref '/' '--allow-onelevel --normalize'
|
||||
valid_ref 'foo/bar/baz'
|
||||
valid_ref 'refs///heads/foo'
|
||||
valid_ref 'foo/bar/baz' --normalize
|
||||
invalid_ref 'refs///heads/foo'
|
||||
valid_ref 'refs///heads/foo' --normalize
|
||||
invalid_ref 'heads/foo/'
|
||||
valid_ref '/heads/foo'
|
||||
valid_ref '///heads/foo'
|
||||
invalid_ref '/heads/foo'
|
||||
valid_ref '/heads/foo' --normalize
|
||||
invalid_ref '///heads/foo'
|
||||
valid_ref '///heads/foo' --normalize
|
||||
invalid_ref './foo'
|
||||
invalid_ref './foo/bar'
|
||||
invalid_ref 'foo/./bar'
|
||||
@ -60,12 +66,15 @@ invalid_ref "$ref"
|
||||
valid_ref "$ref" --allow-onelevel
|
||||
invalid_ref "$ref" --refspec-pattern
|
||||
valid_ref "$ref" '--refspec-pattern --allow-onelevel'
|
||||
invalid_ref "$ref" --normalize
|
||||
valid_ref "$ref" '--allow-onelevel --normalize'
|
||||
|
||||
ref='foo/bar'
|
||||
valid_ref "$ref"
|
||||
valid_ref "$ref" --allow-onelevel
|
||||
valid_ref "$ref" --refspec-pattern
|
||||
valid_ref "$ref" '--refspec-pattern --allow-onelevel'
|
||||
valid_ref "$ref" --normalize
|
||||
|
||||
ref='foo/*'
|
||||
invalid_ref "$ref"
|
||||
@ -78,6 +87,8 @@ invalid_ref "$ref"
|
||||
invalid_ref "$ref" --allow-onelevel
|
||||
valid_ref "$ref" --refspec-pattern
|
||||
valid_ref "$ref" '--refspec-pattern --allow-onelevel'
|
||||
invalid_ref "$ref" --normalize
|
||||
valid_ref "$ref" '--refspec-pattern --normalize'
|
||||
|
||||
ref='foo/*/bar'
|
||||
invalid_ref "$ref"
|
||||
@ -105,9 +116,13 @@ invalid_ref "$ref" '--refspec-pattern --allow-onelevel'
|
||||
|
||||
ref='/foo'
|
||||
invalid_ref "$ref"
|
||||
valid_ref "$ref" --allow-onelevel
|
||||
invalid_ref "$ref" --allow-onelevel
|
||||
invalid_ref "$ref" --refspec-pattern
|
||||
valid_ref "$ref" '--refspec-pattern --allow-onelevel'
|
||||
invalid_ref "$ref" '--refspec-pattern --allow-onelevel'
|
||||
invalid_ref "$ref" --normalize
|
||||
valid_ref "$ref" '--allow-onelevel --normalize'
|
||||
invalid_ref "$ref" '--refspec-pattern --normalize'
|
||||
valid_ref "$ref" '--refspec-pattern --allow-onelevel --normalize'
|
||||
|
||||
test_expect_success "check-ref-format --branch @{-1}" '
|
||||
T=$(git write-tree) &&
|
||||
@ -141,12 +156,12 @@ test_expect_success 'check-ref-format --branch from subdir' '
|
||||
|
||||
valid_ref_normalized() {
|
||||
test_expect_success "ref name '$1' simplifies to '$2'" "
|
||||
refname=\$(git check-ref-format --print '$1') &&
|
||||
refname=\$(git check-ref-format --normalize '$1') &&
|
||||
test \"\$refname\" = '$2'"
|
||||
}
|
||||
invalid_ref_normalized() {
|
||||
test_expect_success "check-ref-format --print rejects '$1'" "
|
||||
test_must_fail git check-ref-format --print '$1'"
|
||||
test_expect_success "check-ref-format --normalize rejects '$1'" "
|
||||
test_must_fail git check-ref-format --normalize '$1'"
|
||||
}
|
||||
|
||||
valid_ref_normalized 'heads/foo' 'heads/foo'
|
||||
|
Reference in New Issue
Block a user