mirror of
https://github.com/Graylog2/graylog-project-cli.git
synced 2026-03-13 08:02:57 +08:00
Rewrite rewrite of NameFromRepository
Instead of questionable use of / slash index search or reliance on implicit behaviour in path.Base() shave of URI parts by matching regular expressions on them. Afterwards apply path.Base() and do some sanity checks. Note that net/url.Parse unfortunately can't be used in this context because it has a stricter behaviour than needed here.
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"github.com/Graylog2/graylog-project-cli/logger"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
@@ -76,25 +77,33 @@ func GetAbsolutePath(path string) string {
|
||||
}
|
||||
|
||||
func NameFromRepository(repository string) string {
|
||||
length := len(repository)
|
||||
if length < 2 {
|
||||
logger.Fatal("Unable to get name from repository: %s", repository)
|
||||
name := repository
|
||||
|
||||
scheme := regexp.MustCompile("^[a-zA-Z]+://")
|
||||
needle := scheme.FindStringIndex(name)
|
||||
if needle != nil {
|
||||
name = name[needle[1]:]
|
||||
}
|
||||
user := regexp.MustCompile("^[a-zA-Z0-9_.-]+@")
|
||||
needle = user.FindStringIndex(name)
|
||||
if needle != nil {
|
||||
name = name[needle[1]:]
|
||||
}
|
||||
|
||||
index := strings.LastIndex(repository[:length-1], "/")
|
||||
if index == -1 {
|
||||
logger.Fatal("Unable to get name from repository: %s", repository)
|
||||
host := regexp.MustCompile("^[a-zA-Z0-9_.-]+[:/]")
|
||||
needle = host.FindStringIndex(name)
|
||||
if needle != nil {
|
||||
name = name[needle[1]:]
|
||||
}
|
||||
|
||||
if repository[length-1] == '/' {
|
||||
length -= 1
|
||||
name = strings.Replace(path.Base(name), ".git", "", 1)
|
||||
|
||||
if name == "." || name == "/" || name == "" {
|
||||
logger.Fatal("Unable to get name from repository: %s", repository)
|
||||
}
|
||||
|
||||
if index == length {
|
||||
logger.Fatal("Unable to get name from repository: %s", repository)
|
||||
}
|
||||
return name
|
||||
|
||||
return strings.Replace(repository[index+1:length], ".git", "", 1)
|
||||
}
|
||||
|
||||
func ConvertGithubGitToHTTPS(repository string) string {
|
||||
|
||||
@@ -15,6 +15,9 @@ var repos = [...]string {
|
||||
"https://example.org/External/Graylog2/graylog2-server.git",
|
||||
"file:///home/user/Graylog2/graylog2-server",
|
||||
"git@github.com:Graylog2/graylog2-server/",
|
||||
"user@example.org:graylog2-server",
|
||||
"user@example.org:graylog2-server/",
|
||||
"../../graylog2-server",
|
||||
}
|
||||
|
||||
func TestNameFromRepository(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user