summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2023-04-24 13:42:05 +1000
committerGitHub <noreply@github.com>2023-04-24 13:42:05 +1000
commit79dc1d9052ec798544a1032b01ca3684136a82d7 (patch)
tree615b950c68cbffda28cf87cf9bbf91567261bf02
parent28d2b1432b3930c5866b9015ccdef691e309d2f5 (diff)
parentbf3dd79b7a91a195b74df8388d721c559bb08b57 (diff)
Merge pull request #2557 from noahziheng/feature/add-gitea-pr
-rw-r--r--docs/Config.md2
-rw-r--r--pkg/commands/hosting_service/definitions.go15
-rw-r--r--pkg/commands/hosting_service/hosting_service.go2
-rw-r--r--pkg/commands/hosting_service/hosting_service_test.go56
4 files changed, 72 insertions, 3 deletions
diff --git a/docs/Config.md b/docs/Config.md
index df9003d23..92cc9ebd7 100644
--- a/docs/Config.md
+++ b/docs/Config.md
@@ -474,7 +474,7 @@ services:
Where:
- `gitDomain` stands for the domain used by git itself (i.e. the one present on clone URLs), e.g. `git.work.com`
-- `provider` is one of `github`, `bitbucket`, `bitbucketServer`, `azuredevops` or `gitlab`
+- `provider` is one of `github`, `bitbucket`, `bitbucketServer`, `azuredevops`, `gitlab` or `gitea`
- `webDomain` is the URL where your git service exposes a web interface and APIs, e.g. `gitservice.work.com`
## Predefined commit message prefix
diff --git a/pkg/commands/hosting_service/definitions.go b/pkg/commands/hosting_service/definitions.go
index 8dab166aa..bfe374640 100644
--- a/pkg/commands/hosting_service/definitions.go
+++ b/pkg/commands/hosting_service/definitions.go
@@ -64,12 +64,22 @@ var bitbucketServerServiceDef = ServiceDefinition{
repoURLTemplate: "https://{{.webDomain}}/projects/{{.project}}/repos/{{.repo}}",
}
+var giteaServiceDef = ServiceDefinition{
+ provider: "gitea",
+ pullRequestURLIntoDefaultBranch: "/compare/{{.From}}",
+ pullRequestURLIntoTargetBranch: "/compare/{{.To}}...{{.From}}",
+ commitURL: "/commit/{{.CommitSha}}",
+ regexStrings: defaultUrlRegexStrings,
+ repoURLTemplate: defaultRepoURLTemplate,
+}
+
var serviceDefinitions = []ServiceDefinition{
githubServiceDef,
bitbucketServiceDef,
gitLabServiceDef,
azdoServiceDef,
bitbucketServerServiceDef,
+ giteaServiceDef,
}
var defaultServiceDomains = []ServiceDomain{
@@ -93,4 +103,9 @@ var defaultServiceDomains = []ServiceDomain{
gitDomain: "dev.azure.com",
webDomain: "dev.azure.com",
},
+ {
+ serviceDefinition: giteaServiceDef,
+ gitDomain: "try.gitea.io",
+ webDomain: "try.gitea.io",
+ },
}
diff --git a/pkg/commands/hosting_service/hosting_service.go b/pkg/commands/hosting_service/hosting_service.go
index 091da3ebb..dd06e1cb7 100644
--- a/pkg/commands/hosting_service/hosting_service.go
+++ b/pkg/commands/hosting_service/hosting_service.go
@@ -13,7 +13,7 @@ import (
"github.com/jesseduffield/generics/slices"
)
-// This package is for handling logic specific to a git hosting service like github, gitlab, bitbucket, etc.
+// This package is for handling logic specific to a git hosting service like github, gitlab, bitbucket, gitea, etc.
// Different git hosting services have different URL formats for when you want to open a PR or view a commit,
// and this package's responsibility is to determine which service you're using based on the remote URL,
// and then which URL you need for whatever use case you have.
diff --git a/pkg/commands/hosting_service/hosting_service_test.go b/pkg/commands/hosting_service/hosting_service_test.go
index a3b128b01..4a58a3975 100644
--- a/pkg/commands/hosting_service/hosting_service_test.go
+++ b/pkg/commands/hosting_service/hosting_service_test.go
@@ -265,6 +265,60 @@ func TestGetPullRequestURL(t *testing.T) {
},
},
{
+ testName: "Opens a link to new pull request on Gitea Server (SSH)",
+ from: "feature/new",
+ remoteUrl: "ssh://git@mycompany.gitea.io/myproject/myrepo.git",
+ configServiceDomains: map[string]string{
+ // valid configuration for a gitea server URL
+ "mycompany.gitea.io": "gitea:mycompany.gitea.io",
+ },
+ test: func(url string, err error) {
+ assert.NoError(t, err)
+ assert.Equal(t, "https://mycompany.gitea.io/myproject/myrepo/compare/feature%2Fnew", url)
+ },
+ },
+ {
+ testName: "Opens a link to new pull request on Gitea Server (SSH) with specific target",
+ from: "feature/new",
+ to: "dev",
+ remoteUrl: "ssh://git@mycompany.gitea.io/myproject/myrepo.git",
+ configServiceDomains: map[string]string{
+ // valid configuration for a gitea server URL
+ "mycompany.gitea.io": "gitea:mycompany.gitea.io",
+ },
+ test: func(url string, err error) {
+ assert.NoError(t, err)
+ assert.Equal(t, "https://mycompany.gitea.io/myproject/myrepo/compare/dev...feature%2Fnew", url)
+ },
+ },
+ {
+ testName: "Opens a link to new pull request on Gitea Server (HTTP)",
+ from: "feature/new",
+ remoteUrl: "https://mycompany.gitea.io/myproject/myrepo.git",
+ configServiceDomains: map[string]string{
+ // valid configuration for a gitea server URL
+ "mycompany.gitea.io": "gitea:mycompany.gitea.io",
+ },
+ test: func(url string, err error) {
+ assert.NoError(t, err)
+ assert.Equal(t, "https://mycompany.gitea.io/myproject/myrepo/compare/feature%2Fnew", url)
+ },
+ },
+ {
+ testName: "Opens a link to new pull request on Gitea Server (HTTP) with specific target",
+ from: "feature/new",
+ to: "dev",
+ remoteUrl: "https://mycompany.gitea.io/myproject/myrepo.git",
+ configServiceDomains: map[string]string{
+ // valid configuration for a gitea server URL
+ "mycompany.gitea.io": "gitea:mycompany.gitea.io",
+ },
+ test: func(url string, err error) {
+ assert.NoError(t, err)
+ assert.Equal(t, "https://mycompany.gitea.io/myproject/myrepo/compare/dev...feature%2Fnew", url)
+ },
+ },
+ {
testName: "Throws an error if git service is unsupported",
from: "feature/divide-operation",
remoteUrl: "git@something.com:peter/calculator.git",
@@ -310,7 +364,7 @@ func TestGetPullRequestURL(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, "https://bitbucket.org/johndoe/social_network/pull-requests/new?source=feature%2Fprofile-page&t=1", url)
},
- expectedLoggedErrors: []string{"Unknown git service type: 'noservice'. Expected one of github, bitbucket, gitlab, azuredevops, bitbucketServer"},
+ expectedLoggedErrors: []string{"Unknown git service type: 'noservice'. Expected one of github, bitbucket, gitlab, azuredevops, bitbucketServer, gitea"},
},
{
testName: "Escapes reserved URL characters in from branch name",