Skip to content

Commit ecdc44a

Browse files
Merge pull request #315 from drone/ks/CODE-2072
Setting azure devops repo visibility based on the project's visibility
2 parents b8beb99 + 8df99c4 commit ecdc44a

File tree

10 files changed

+96
-80
lines changed

10 files changed

+96
-80
lines changed

scm/driver/azure/repo.go

+13-10
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,11 @@ type repository struct {
201201
ID string `json:"id"`
202202
Name string `json:"name"`
203203
Project struct {
204-
ID string `json:"id"`
205-
Name string `json:"name"`
206-
State string `json:"state"`
207-
URL string `json:"url"`
204+
ID string `json:"id"`
205+
Name string `json:"name"`
206+
State string `json:"state"`
207+
URL string `json:"url"`
208+
Visibility string `json:"visibility"`
208209
} `json:"project"`
209210
RemoteURL string `json:"remoteUrl"`
210211
URL string `json:"url"`
@@ -283,12 +284,14 @@ func convertRepositoryList(from *repositories, owner string) []*scm.Repository {
283284
func convertRepository(from *repository, owner string) *scm.Repository {
284285
namespace := []string{owner, from.Project.Name}
285286
return &scm.Repository{
286-
ID: from.ID,
287-
Name: from.Name,
288-
Namespace: strings.Join(namespace, "/"),
289-
Link: from.URL,
290-
Branch: scm.TrimRef(from.DefaultBranch),
291-
Clone: from.RemoteURL,
287+
ID: from.ID,
288+
Name: from.Name,
289+
Namespace: strings.Join(namespace, "/"),
290+
Link: from.URL,
291+
Branch: scm.TrimRef(from.DefaultBranch),
292+
Clone: from.RemoteURL,
293+
Private: scm.ConvertPrivate(from.Project.Visibility),
294+
Visibility: scm.ConvertVisibility(from.Project.Visibility),
292295
}
293296
}
294297

scm/driver/azure/testdata/repo.json.golden

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,7 @@
44
"Namespace": "ORG/test_project",
55
"Branch": "main",
66
"Link": "https://dev.azure.com/tphoney/d350c9c0-7749-4ff8-a78f-f9c1f0e56729/_apis/git/repositories/91f0d4cb-4c36-49a5-b28d-2d72da089c4d",
7-
"Clone": "https://[email protected]/tphoney/test_project/_git/test_project"
7+
"Clone": "https://[email protected]/tphoney/test_project/_git/test_project",
8+
"Private": true,
9+
"Visibility": 3
810
}

scm/driver/azure/testdata/repos.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"url": "https://dev.azure.com/tphoney/_apis/projects/d350c9c0-7749-4ff8-a78f-f9c1f0e56729",
3131
"state": "wellFormed",
3232
"revision": 11,
33-
"visibility": "private",
33+
"visibility": "public",
3434
"lastUpdateTime": "2022-02-24T15:31:27.89Z"
3535
},
3636
"defaultBranch": "refs/heads/main",

scm/driver/azure/testdata/repos.json.golden

+6-2
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,18 @@
55
"Namespace": "ORG/test_project",
66
"Branch": "main",
77
"Link": "https://dev.azure.com/tphoney/d350c9c0-7749-4ff8-a78f-f9c1f0e56729/_apis/git/repositories/91f0d4cb-4c36-49a5-b28d-2d72da089c4d",
8-
"Clone": "https://[email protected]/tphoney/test_project/_git/test_project"
8+
"Clone": "https://[email protected]/tphoney/test_project/_git/test_project",
9+
"Private": true,
10+
"Visibility": 3
911
},
1012
{
1113
"ID": "fde2d21f-13b9-4864-a995-83329045289a",
1214
"Name": "test_repo2",
1315
"Namespace": "ORG/test_project",
1416
"Branch": "main",
1517
"Link": "https://dev.azure.com/tphoney/d350c9c0-7749-4ff8-a78f-f9c1f0e56729/_apis/git/repositories/fde2d21f-13b9-4864-a995-83329045289a",
16-
"Clone": "https://[email protected]/tphoney/test_project/_git/test_repo2"
18+
"Clone": "https://[email protected]/tphoney/test_project/_git/test_repo2",
19+
"Private": false,
20+
"Visibility": 1
1721
}
1822
]

scm/driver/github/repo.go

+1-14
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ func convertRepository(from *repository) *scm.Repository {
261261
Branch: from.DefaultBranch,
262262
Archived: from.Archived,
263263
Private: from.Private,
264-
Visibility: convertVisibility(from.Visibility),
264+
Visibility: scm.ConvertVisibility(from.Visibility),
265265
Clone: from.CloneURL,
266266
CloneSSH: from.SSHURL,
267267
Created: from.CreatedAt,
@@ -314,19 +314,6 @@ func convertFromHookEvents(from scm.HookEvents) []string {
314314
return events
315315
}
316316

317-
func convertVisibility(from string) scm.Visibility {
318-
switch from {
319-
case "public":
320-
return scm.VisibilityPublic
321-
case "private":
322-
return scm.VisibilityPrivate
323-
case "internal":
324-
return scm.VisibilityInternal
325-
default:
326-
return scm.VisibilityUndefined
327-
}
328-
}
329-
330317
type status struct {
331318
CreatedAt time.Time `json:"created_at"`
332319
UpdatedAt time.Time `json:"updated_at"`

scm/driver/github/webhook.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ func convertPushHook(src *pushHook) *scm.PushHook {
408408
Name: src.Repository.Name,
409409
Branch: src.Repository.DefaultBranch,
410410
Private: src.Repository.Private,
411-
Visibility: convertVisibility(src.Repository.Visibility),
411+
Visibility: scm.ConvertVisibility(src.Repository.Visibility),
412412
Clone: src.Repository.CloneURL,
413413
CloneSSH: src.Repository.SSHURL,
414414
Link: src.Repository.HTMLURL,
@@ -435,7 +435,7 @@ func convertBranchHook(src *createDeleteHook) *scm.BranchHook {
435435
Name: src.Repository.Name,
436436
Branch: src.Repository.DefaultBranch,
437437
Private: src.Repository.Private,
438-
Visibility: convertVisibility(src.Repository.Visibility),
438+
Visibility: scm.ConvertVisibility(src.Repository.Visibility),
439439
Clone: src.Repository.CloneURL,
440440
CloneSSH: src.Repository.SSHURL,
441441
Link: src.Repository.HTMLURL,
@@ -455,7 +455,7 @@ func convertTagHook(src *createDeleteHook) *scm.TagHook {
455455
Name: src.Repository.Name,
456456
Branch: src.Repository.DefaultBranch,
457457
Private: src.Repository.Private,
458-
Visibility: convertVisibility(src.Repository.Visibility),
458+
Visibility: scm.ConvertVisibility(src.Repository.Visibility),
459459
Clone: src.Repository.CloneURL,
460460
CloneSSH: src.Repository.SSHURL,
461461
Link: src.Repository.HTMLURL,
@@ -473,7 +473,7 @@ func convertPullRequestHook(src *pullRequestHook) *scm.PullRequestHook {
473473
Name: src.Repository.Name,
474474
Branch: src.Repository.DefaultBranch,
475475
Private: src.Repository.Private,
476-
Visibility: convertVisibility(src.Repository.Visibility),
476+
Visibility: scm.ConvertVisibility(src.Repository.Visibility),
477477
Clone: src.Repository.CloneURL,
478478
CloneSSH: src.Repository.SSHURL,
479479
Link: src.Repository.HTMLURL,
@@ -499,7 +499,7 @@ func convertDeploymentHook(src *deploymentHook) *scm.DeployHook {
499499
Name: src.Repository.Name,
500500
Branch: src.Repository.DefaultBranch,
501501
Private: src.Repository.Private,
502-
Visibility: convertVisibility(src.Repository.Visibility),
502+
Visibility: scm.ConvertVisibility(src.Repository.Visibility),
503503
Clone: src.Repository.CloneURL,
504504
CloneSSH: src.Repository.SSHURL,
505505
Link: src.Repository.HTMLURL,
@@ -533,7 +533,7 @@ func convertIssueCommentHook(src *issueCommentHook) *scm.IssueCommentHook {
533533
Name: src.Repository.Name,
534534
Branch: src.Repository.DefaultBranch,
535535
Private: src.Repository.Private,
536-
Visibility: convertVisibility(src.Repository.Visibility),
536+
Visibility: scm.ConvertVisibility(src.Repository.Visibility),
537537
Clone: src.Repository.CloneURL,
538538
CloneSSH: src.Repository.SSHURL,
539539
Link: src.Repository.HTMLURL,
@@ -571,7 +571,7 @@ func convertReleaseHook(src *releaseHook) *scm.ReleaseHook {
571571
Name: src.Repository.Name,
572572
Branch: src.Repository.DefaultBranch,
573573
Private: src.Repository.Private,
574-
Visibility: convertVisibility(src.Repository.Visibility),
574+
Visibility: scm.ConvertVisibility(src.Repository.Visibility),
575575
Clone: src.Repository.CloneURL,
576576
CloneSSH: src.Repository.SSHURL,
577577
Link: src.Repository.HTMLURL,

scm/driver/gitlab/repo.go

+4-26
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ func (s *repositoryService) DeleteHook(ctx context.Context, repo string, id stri
178178
return s.client.do(ctx, "DELETE", path, nil, nil)
179179
}
180180

181-
// helper function to convert from the gogs repository list to
181+
// helper function to convert from the gitlab repository list to
182182
// the common repository structure.
183183
func convertRepositoryList(from []*repository) []*scm.Repository {
184184
to := []*scm.Repository{}
@@ -188,7 +188,7 @@ func convertRepositoryList(from []*repository) []*scm.Repository {
188188
return to
189189
}
190190

191-
// helper function to convert from the gogs repository structure
191+
// helper function to convert from the gitlab repository structure
192192
// to the common repository structure.
193193
func convertRepository(from *repository) *scm.Repository {
194194
to := &scm.Repository{
@@ -197,8 +197,8 @@ func convertRepository(from *repository) *scm.Repository {
197197
Name: from.Path,
198198
Branch: from.DefaultBranch,
199199
Archived: from.Archived,
200-
Private: convertPrivate(from.Visibility),
201-
Visibility: convertVisibility(from.Visibility),
200+
Private: scm.ConvertPrivate(from.Visibility),
201+
Visibility: scm.ConvertVisibility(from.Visibility),
202202
Clone: from.HTTPURL,
203203
CloneSSH: from.SSHURL,
204204
Link: from.WebURL,
@@ -317,28 +317,6 @@ func convertFromState(from scm.State) string {
317317
}
318318
}
319319

320-
func convertPrivate(from string) bool {
321-
switch from {
322-
case "public", "":
323-
return false
324-
default:
325-
return true
326-
}
327-
}
328-
329-
func convertVisibility(from string) scm.Visibility {
330-
switch from {
331-
case "public":
332-
return scm.VisibilityPublic
333-
case "private":
334-
return scm.VisibilityPrivate
335-
case "internal":
336-
return scm.VisibilityInternal
337-
default:
338-
return scm.VisibilityUndefined
339-
}
340-
}
341-
342320
func canPush(proj *repository) bool {
343321
switch {
344322
case proj.Permissions.ProjectAccess.AccessLevel >= 30:

scm/driver/gitlab/repo_test.go

-19
Original file line numberDiff line numberDiff line change
@@ -521,25 +521,6 @@ func TestConvertFromState(t *testing.T) {
521521
}
522522
}
523523

524-
func TestConvertPrivate(t *testing.T) {
525-
tests := []struct {
526-
in string
527-
out bool
528-
}{
529-
{"public", false},
530-
{"", false},
531-
{"private", true},
532-
{"internal", true},
533-
{"invalid", true},
534-
}
535-
536-
for _, test := range tests {
537-
if got, want := convertPrivate(test.in), test.out; got != want {
538-
t.Errorf("Want private %v, got %v", want, got)
539-
}
540-
}
541-
}
542-
543524
func TestCanPush(t *testing.T) {
544525
tests := []struct {
545526
in *repository

scm/util.go

+22
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,25 @@ func IsPullRequest(ref string) bool {
8989
func IsHash(s string) bool {
9090
return sha1.MatchString(s) || sha256.MatchString(s)
9191
}
92+
93+
func ConvertVisibility(from string) Visibility {
94+
switch from {
95+
case "public":
96+
return VisibilityPublic
97+
case "private":
98+
return VisibilityPrivate
99+
case "internal":
100+
return VisibilityInternal
101+
default:
102+
return VisibilityUndefined
103+
}
104+
}
105+
106+
func ConvertPrivate(from string) bool {
107+
switch from {
108+
case "public", "":
109+
return false
110+
default:
111+
return true
112+
}
113+
}

scm/util_test.go

+39
Original file line numberDiff line numberDiff line change
@@ -239,3 +239,42 @@ func TestIsHash(t *testing.T) {
239239
}
240240
}
241241
}
242+
243+
func TestConvertVisibility(t *testing.T) {
244+
tests := []struct {
245+
in string
246+
out Visibility
247+
}{
248+
{"public", 1},
249+
{"", 0},
250+
{"private", 3},
251+
{"internal", 2},
252+
{"invalid", 0},
253+
{"unknown", 0},
254+
}
255+
256+
for _, test := range tests {
257+
if got, want := ConvertVisibility(test.in), test.out; got != want {
258+
t.Errorf("Want %d for %v type, got %d", want, test.in, got)
259+
}
260+
}
261+
}
262+
263+
func TestConvertPrivate(t *testing.T) {
264+
tests := []struct {
265+
in string
266+
out bool
267+
}{
268+
{"public", false},
269+
{"", false},
270+
{"private", true},
271+
{"internal", true},
272+
{"invalid", true},
273+
}
274+
275+
for _, test := range tests {
276+
if got, want := ConvertPrivate(test.in), test.out; got != want {
277+
t.Errorf("Want private %v, got %v", want, got)
278+
}
279+
}
280+
}

0 commit comments

Comments
 (0)