Skip to content

Commit aaa6885

Browse files
committed
Make external issue tracker regexp configurable via API
Signed-off-by: Andrew Imeson <[email protected]>
1 parent f09f73d commit aaa6885

File tree

5 files changed

+32
-11
lines changed

5 files changed

+32
-11
lines changed

modules/convert/repository.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,10 @@ func innerToRepo(repo *repo_model.Repository, mode perm.AccessMode, isParent boo
5656
config := unit.ExternalTrackerConfig()
5757
hasIssues = true
5858
externalTracker = &api.ExternalTracker{
59-
ExternalTrackerURL: config.ExternalTrackerURL,
60-
ExternalTrackerFormat: config.ExternalTrackerFormat,
61-
ExternalTrackerStyle: config.ExternalTrackerStyle,
59+
ExternalTrackerURL: config.ExternalTrackerURL,
60+
ExternalTrackerFormat: config.ExternalTrackerFormat,
61+
ExternalTrackerStyle: config.ExternalTrackerStyle,
62+
ExternalTrackerRegexpPattern: config.ExternalTrackerRegexpPattern,
6263
}
6364
}
6465
hasWiki := false

modules/structs/repo.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ type ExternalTracker struct {
3434
ExternalTrackerURL string `json:"external_tracker_url"`
3535
// External Issue Tracker URL Format. Use the placeholders {user}, {repo} and {index} for the username, repository name and issue index.
3636
ExternalTrackerFormat string `json:"external_tracker_format"`
37-
// External Issue Tracker Number Format, either `numeric` or `alphanumeric`
37+
// External Issue Tracker Number Format, either `numeric`, `alphanumeric`, or `regexp`
3838
ExternalTrackerStyle string `json:"external_tracker_style"`
39+
// External Issue Tracker issue regular expression
40+
ExternalTrackerRegexpPattern string `json:"external_tracker_regexp_pattern"`
3941
}
4042

4143
// ExternalWiki represents setting for external wiki

routers/api/v1/repo/repo.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -755,9 +755,10 @@ func updateRepoUnits(ctx *context.APIContext, opts api.EditRepoOption) error {
755755
RepoID: repo.ID,
756756
Type: unit_model.TypeExternalTracker,
757757
Config: &repo_model.ExternalTrackerConfig{
758-
ExternalTrackerURL: opts.ExternalTracker.ExternalTrackerURL,
759-
ExternalTrackerFormat: opts.ExternalTracker.ExternalTrackerFormat,
760-
ExternalTrackerStyle: opts.ExternalTracker.ExternalTrackerStyle,
758+
ExternalTrackerURL: opts.ExternalTracker.ExternalTrackerURL,
759+
ExternalTrackerFormat: opts.ExternalTracker.ExternalTrackerFormat,
760+
ExternalTrackerStyle: opts.ExternalTracker.ExternalTrackerStyle,
761+
ExternalTrackerRegexpPattern: opts.ExternalTracker.ExternalTrackerRegexpPattern,
761762
},
762763
})
763764
deleteUnitTypes = append(deleteUnitTypes, unit_model.TypeIssues)

templates/swagger/v1_json.tmpl

+6-1
Original file line numberDiff line numberDiff line change
@@ -16015,8 +16015,13 @@
1601516015
"type": "string",
1601616016
"x-go-name": "ExternalTrackerFormat"
1601716017
},
16018+
"external_tracker_regexp_pattern": {
16019+
"description": "External Issue Tracker issue regular expression",
16020+
"type": "string",
16021+
"x-go-name": "ExternalTrackerRegexpPattern"
16022+
},
1601816023
"external_tracker_style": {
16019-
"description": "External Issue Tracker Number Format, either `numeric` or `alphanumeric`",
16024+
"description": "External Issue Tracker Number Format, either `numeric`, `alphanumeric`, or `regexp`",
1602016025
"type": "string",
1602116026
"x-go-name": "ExternalTrackerStyle"
1602216027
},

tests/integration/api_repo_edit_test.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,10 @@ func getRepoEditOptionFromRepo(repo *repo_model.Repository) *api.EditRepoOption
4040
config := unit.ExternalTrackerConfig()
4141
hasIssues = true
4242
externalTracker = &api.ExternalTracker{
43-
ExternalTrackerURL: config.ExternalTrackerURL,
44-
ExternalTrackerFormat: config.ExternalTrackerFormat,
45-
ExternalTrackerStyle: config.ExternalTrackerStyle,
43+
ExternalTrackerURL: config.ExternalTrackerURL,
44+
ExternalTrackerFormat: config.ExternalTrackerFormat,
45+
ExternalTrackerStyle: config.ExternalTrackerStyle,
46+
ExternalTrackerRegexpPattern: config.ExternalTrackerRegexpPattern,
4647
}
4748
}
4849
hasWiki := false
@@ -220,6 +221,17 @@ func TestAPIRepoEdit(t *testing.T) {
220221
assert.Equal(t, *repo1editedOption.HasWiki, true)
221222
assert.Equal(t, *repo1editedOption.ExternalWiki, *repoEditOption.ExternalWiki)
222223

224+
repoEditOption.ExternalTracker.ExternalTrackerStyle = "regexp"
225+
repoEditOption.ExternalTracker.ExternalTrackerRegexpPattern = `(\d+)`
226+
req = NewRequestWithJSON(t, "PATCH", url, &repoEditOption)
227+
resp = session.MakeRequest(t, req, http.StatusOK)
228+
DecodeJSON(t, resp, &repo)
229+
assert.NotNil(t, repo)
230+
repo1edited = unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1})
231+
repo1editedOption = getRepoEditOptionFromRepo(repo1edited)
232+
assert.Equal(t, *repo1editedOption.HasIssues, true)
233+
assert.Equal(t, *repo1editedOption.ExternalTracker, *repoEditOption.ExternalTracker)
234+
223235
// Do some tests with invalid URL for external tracker and wiki
224236
repoEditOption.ExternalTracker.ExternalTrackerURL = "htp://www.somewebsite.com"
225237
req = NewRequestWithJSON(t, "PATCH", url, &repoEditOption)

0 commit comments

Comments
 (0)