mirror of
https://github.com/goharbor/harbor.git
synced 2025-02-02 04:51:22 +01:00
1. Add IsSpecificRepositoryName util method. (#7444)
2. Add IsSpecificRepositoryName unit test case. 3. Add Copyright header comment. Signed-off-by: 慕薇疯魔 <kfanjian@gmail.com>
This commit is contained in:
parent
1323fbfa14
commit
d022ad4cd4
@ -1,3 +1,17 @@
|
||||
// Copyright Project Harbor Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package native
|
||||
|
||||
import (
|
||||
|
@ -15,8 +15,6 @@
|
||||
package native
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
adp "github.com/goharbor/harbor/src/replication/adapter"
|
||||
"github.com/goharbor/harbor/src/replication/model"
|
||||
"github.com/goharbor/harbor/src/replication/util"
|
||||
@ -65,9 +63,9 @@ func (n native) FetchImages(filters []*model.Filter) ([]*model.Resource, error)
|
||||
}
|
||||
|
||||
func (n native) filterRepositories(pattern string) ([]string, error) {
|
||||
// if the pattern contains no "*" and "?", it is a specific repository name
|
||||
// if is a specific repository name
|
||||
// just to make sure the repository exists
|
||||
if len(pattern) > 0 && !strings.ContainsAny(pattern, "*?") {
|
||||
if len(pattern) > 0 && util.IsSpecificRepositoryName(pattern) {
|
||||
// check is repository exist later at filterTags.
|
||||
return []string{pattern}, nil
|
||||
}
|
||||
|
@ -1,3 +1,17 @@
|
||||
// Copyright Project Harbor Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package native
|
||||
|
||||
import (
|
||||
|
@ -30,6 +30,12 @@ func Match(pattern, str string) (bool, error) {
|
||||
return doublestar.Match(pattern, str)
|
||||
}
|
||||
|
||||
// IsSpecificRepositoryName if the name not contains any char of "*?[{\\]}^,",
|
||||
// it is a specific repository name.
|
||||
func IsSpecificRepositoryName(name string) bool {
|
||||
return !strings.ContainsAny(name, "*?[{\\]}^,")
|
||||
}
|
||||
|
||||
// GetHTTPTransport can be used to share the common HTTP transport
|
||||
func GetHTTPTransport(insecure bool) *http.Transport {
|
||||
return registry.GetHTTPTransport(insecure)
|
||||
|
@ -104,3 +104,70 @@ func TestParseRepository(t *testing.T) {
|
||||
assert.Equal(t, "a/b", namespace)
|
||||
assert.Equal(t, "c", rest)
|
||||
}
|
||||
func TestIsSpecificRepositoryName(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
input string
|
||||
want bool
|
||||
}{
|
||||
{"Is Specific", "a", true},
|
||||
{"Is Specific", "abc", true},
|
||||
{"Is Specific", "a/b", true},
|
||||
{"Is Specific", "a/b/c", true},
|
||||
{"Not Specific", "*", false},
|
||||
{"Not Specific", "?", false},
|
||||
{"Not Specific", "*c", false},
|
||||
{"Not Specific", "a*", false},
|
||||
{"Not Specific", "a*b*c*d*e*", false},
|
||||
{"Not Specific", "a*b?c*x", false},
|
||||
{"Not Specific", "ab[c]", false},
|
||||
{"Not Specific", "ab[b-d]", false},
|
||||
{"Not Specific", "ab[e-g]", false},
|
||||
{"Not Specific", "ab[^c]", false},
|
||||
{"Not Specific", "ab[^b-d]", false},
|
||||
{"Not Specific", "ab[^e-g]", false},
|
||||
{"Not Specific", "a\\*b", false},
|
||||
{"Not Specific", "a?b", false},
|
||||
{"Not Specific", "a[^a]b", false},
|
||||
{"Not Specific", "a???b", false},
|
||||
{"Not Specific", "a[^a][^a][^a]b", false},
|
||||
{"Not Specific", "[a-ζ]*", false},
|
||||
{"Not Specific", "*[a-ζ]", false},
|
||||
{"Not Specific", "a?b", false},
|
||||
{"Not Specific", "a*b", false},
|
||||
{"Not Specific", "[\\-]", false},
|
||||
{"Not Specific", "[x\\-]", false},
|
||||
{"Not Specific", "[x\\-]", false},
|
||||
{"Not Specific", "[x\\-]", false},
|
||||
{"Not Specific", "[\\-x]", false},
|
||||
{"Not Specific", "[\\-x]", false},
|
||||
{"Not Specific", "[\\-x]", false},
|
||||
{"Not Specific", "[a-b-c]", false},
|
||||
{"Not Specific", "*x", false},
|
||||
{"Not Specific", "[abc]", false},
|
||||
{"Not Specific", "**", false},
|
||||
{"Not Specific", "ab{c,d}", false},
|
||||
{"Not Specific", "ab{c,d,*}", false},
|
||||
{"Not Specific", "abc**", false},
|
||||
{"Not Specific", "[]a]", false},
|
||||
{"Not Specific", "[-]", false},
|
||||
{"Not Specific", "[x-]", false},
|
||||
{"Not Specific", "[-x]", false},
|
||||
{"Not Specific", "\\", false},
|
||||
{"Not Specific", "[a-b-c]", false},
|
||||
{"Not Specific", "[]", false},
|
||||
{"Not Specific", "[", false},
|
||||
{"Not Specific", "[^", false},
|
||||
{"Not Specific", "^", false},
|
||||
{"Not Specific", "]", false},
|
||||
{"Not Specific", "[^bc", false},
|
||||
{"Not Specific", "a[", false},
|
||||
{"Not Specific", "ab{c,d}[", false},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run("", func(t *testing.T) {
|
||||
var got = IsSpecificRepositoryName(tt.input)
|
||||
assert.Equal(t, tt.want, got)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user