Skip to content

Commit 5f3196f

Browse files
committed
add support to migrate from gogs
1 parent fe7a6d9 commit 5f3196f

38 files changed

+2109
-12
lines changed

go.mod

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ require (
4646
github.com/gobwas/glob v0.2.3
4747
github.com/gogits/chardet v0.0.0-20150115103509-2404f7772561
4848
github.com/gogs/cron v0.0.0-20171120032916-9f6c956d3e14
49+
github.com/gogs/go-gogs-client v0.0.0-20190710002546-4c3c18947c15
4950
github.com/google/go-github/v24 v24.0.1
5051
github.com/gorilla/context v1.1.1
5152
github.com/issue9/assert v1.3.2 // indirect
@@ -69,8 +70,6 @@ require (
6970
github.com/mattn/go-sqlite3 v1.11.0
7071
github.com/mcuadros/go-version v0.0.0-20190308113854-92cdf37c5b75
7172
github.com/microcosm-cc/bluemonday v0.0.0-20161012083705-f77f16ffc87a
72-
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
73-
github.com/modern-go/reflect2 v1.0.1 // indirect
7473
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae // indirect
7574
github.com/msteinert/pam v0.0.0-20151204160544-02ccfbfaf0cc
7675
github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5
@@ -82,7 +81,6 @@ require (
8281
github.com/prometheus/client_golang v1.1.0
8382
github.com/prometheus/procfs v0.0.4 // indirect
8483
github.com/remyoudompheng/bigfft v0.0.0-20190321074620-2f0d2b0e0001 // indirect
85-
github.com/russross/blackfriday v2.0.0+incompatible // indirect
8684
github.com/russross/blackfriday/v2 v2.0.1
8785
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca // indirect
8886
github.com/satori/go.uuid v1.2.0

go.sum

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,13 @@ github.com/gogits/chardet v0.0.0-20150115103509-2404f7772561 h1:deE7ritpK04Pgtpy
243243
github.com/gogits/chardet v0.0.0-20150115103509-2404f7772561/go.mod h1:YgYOrVn3Nj9Tq0EvjmFbphRytDj7JNRoWSStJZWDJTQ=
244244
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
245245
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
246+
github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
247+
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
246248
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
247249
github.com/gogs/cron v0.0.0-20171120032916-9f6c956d3e14 h1:yXtpJr/LV6PFu4nTLgfjQdcMdzjbqqXMEnHfq0Or6p8=
248250
github.com/gogs/cron v0.0.0-20171120032916-9f6c956d3e14/go.mod h1:jPoNZLWDAqA5N3G5amEoiNbhVrmM+ZQEcnQvNQ2KaZk=
251+
github.com/gogs/go-gogs-client v0.0.0-20190710002546-4c3c18947c15 h1:tgEyCCe4+o8A2K/PEi9lF0QMA6XK+Y/j/WN01LnNbbo=
252+
github.com/gogs/go-gogs-client v0.0.0-20190710002546-4c3c18947c15/go.mod h1:fR6z1Ie6rtF7kl/vBYMfgD5/G5B1blui7z426/sj2DU=
249253
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
250254
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
251255
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -254,6 +258,7 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er
254258
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
255259
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
256260
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
261+
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
257262
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
258263
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
259264
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -423,8 +428,6 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW
423428
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
424429
github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5 h1:BvoENQQU+fZ9uukda/RzCAL/191HHwJA5b13R6diVlY=
425430
github.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
426-
github.com/niklasfasching/go-org v0.1.6 h1:F521WcqRNl8OJumlgAnekZgERaTA2HpfOYYfVEKOeI8=
427-
github.com/niklasfasching/go-org v0.1.6/go.mod h1:AsLD6X7djzRIz4/RFZu8vwRL0VGjUvGZCCH1Nz0VdrU=
428431
github.com/niklasfasching/go-org v0.1.7 h1:t3V+3XnS/7BhKv/7SlMUa8FvAiq577/a1T3D7mLIRXE=
429432
github.com/niklasfasching/go-org v0.1.7/go.mod h1:AsLD6X7djzRIz4/RFZu8vwRL0VGjUvGZCCH1Nz0VdrU=
430433
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
@@ -489,8 +492,6 @@ github.com/remyoudompheng/bigfft v0.0.0-20190321074620-2f0d2b0e0001/go.mod h1:qq
489492
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
490493
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
491494
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
492-
github.com/russross/blackfriday v2.0.0+incompatible h1:cBXrhZNUf9C+La9/YpS+UHpUT8YD6Td9ZMSU9APFcsk=
493-
github.com/russross/blackfriday v2.0.0+incompatible/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
494495
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
495496
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
496497
github.com/saintfish/chardet v0.0.0-20120816061221-3af4cd4741ca h1:NugYot0LIVPxTvN8n+Kvkn6TrbMyxQiuvKdEwFdR9vI=
@@ -501,8 +502,6 @@ github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
501502
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
502503
github.com/shurcooL/httpfs v0.0.0-20190527155220-6a4d4a70508b h1:4kg1wyftSKxLtnPAvcRWakIPpokB9w780/KwrNLnfPA=
503504
github.com/shurcooL/httpfs v0.0.0-20190527155220-6a4d4a70508b/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
504-
github.com/shurcooL/sanitized_anchor_name v0.0.0-20160918041101-1dba4b3954bc h1:3wIrJvFb3Pf6B/2mDBnN1G5IfUVev4X5apadQlWOczE=
505-
github.com/shurcooL/sanitized_anchor_name v0.0.0-20160918041101-1dba4b3954bc/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
506505
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
507506
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
508507
github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd h1:ug7PpSOB5RBPK1Kg6qskGBoP3Vnj/aNYFTznWvlkGo0=
@@ -654,8 +653,6 @@ golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLL
654653
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
655654
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM=
656655
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
657-
golang.org/x/net v0.0.0-20190909003024-a7b16738d86b h1:XfVGCX+0T4WOStkaOsJRllbsiImhB2jgVBGc9L0lPGc=
658-
golang.org/x/net v0.0.0-20190909003024-a7b16738d86b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
659656
golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271 h1:N66aaryRB3Ax92gH0v3hp1QYZ3zWWCCUR/j8Ifh45Ss=
660657
golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
661658
golang.org/x/oauth2 v0.0.0-20180620175406-ef147856a6dd/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
@@ -702,6 +699,7 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
702699
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
703700
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
704701
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
702+
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
705703
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
706704
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
707705
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

modules/migrations/base/comment.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ type Comment struct {
1414
PosterName string
1515
PosterEmail string
1616
Created time.Time
17+
Updated time.Time
1718
Content string
1819
Reactions *Reactions
1920
}

modules/migrations/base/milestone.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ type Milestone struct {
1515
Created time.Time
1616
Updated *time.Time
1717
Closed *time.Time
18-
State string
18+
State string // open, closed
1919
}

modules/migrations/gogs.go

Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
// Copyright 2019 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package migrations
6+
7+
import (
8+
"fmt"
9+
"net/http"
10+
"net/url"
11+
"strings"
12+
"time"
13+
14+
"code.gitea.io/gitea/modules/log"
15+
"code.gitea.io/gitea/modules/migrations/base"
16+
"code.gitea.io/gitea/modules/structs"
17+
18+
"github.com/gogs/go-gogs-client"
19+
)
20+
21+
var (
22+
_ base.Downloader = &GogsDownloader{}
23+
_ base.DownloaderFactory = &GogsDownloaderFactory{}
24+
)
25+
26+
func init() {
27+
RegisterDownloaderFactory(&GogsDownloaderFactory{})
28+
}
29+
30+
// GogsDownloaderFactory defines a gogs downloader factory
31+
type GogsDownloaderFactory struct {
32+
}
33+
34+
// Match returns ture if the migration remote URL matched this downloader factory
35+
func (f *GogsDownloaderFactory) Match(opts base.MigrateOptions) (bool, error) {
36+
if opts.GitServiceType == structs.GogsService {
37+
return true, nil
38+
}
39+
return false, nil
40+
}
41+
42+
// New returns a Downloader related to this factory according MigrateOptions
43+
func (f *GogsDownloaderFactory) New(opts base.MigrateOptions) (base.Downloader, error) {
44+
u, err := url.Parse(opts.CloneAddr)
45+
if err != nil {
46+
return nil, err
47+
}
48+
49+
baseURL := u.Scheme + "://" + u.Host
50+
fields := strings.Split(u.Path, "/")
51+
oldOwner := fields[1]
52+
oldName := strings.TrimSuffix(fields[2], ".git")
53+
54+
log.Trace("Create gogs downloader: %s/%s", oldOwner, oldName)
55+
56+
return NewGogsDownloader(baseURL, opts.AuthUsername, opts.AuthPassword, oldOwner, oldName), nil
57+
}
58+
59+
// GitServiceType returns the type of git service
60+
func (f *GogsDownloaderFactory) GitServiceType() structs.GitServiceType {
61+
return structs.GogsService
62+
}
63+
64+
// GogsDownloader implements a Downloader interface to get repository informations
65+
// from gogs via API
66+
type GogsDownloader struct {
67+
client *gogs.Client
68+
baseURL string
69+
repoOwner string
70+
repoName string
71+
userName string
72+
password string
73+
}
74+
75+
// NewGogsDownloader creates a gogs Downloader via gogs API
76+
func NewGogsDownloader(baseURL, userName, password, repoOwner, repoName string) *GogsDownloader {
77+
var downloader = GogsDownloader{
78+
baseURL: baseURL,
79+
userName: userName,
80+
password: password,
81+
repoOwner: repoOwner,
82+
repoName: repoName,
83+
}
84+
85+
var client *gogs.Client
86+
if userName != "" {
87+
if password == "" {
88+
client = gogs.NewClient(baseURL, userName)
89+
} else {
90+
client = gogs.NewClient(baseURL, "")
91+
client.SetHTTPClient(&http.Client{
92+
Transport: &http.Transport{
93+
Proxy: func(req *http.Request) (*url.URL, error) {
94+
req.SetBasicAuth(userName, password)
95+
return nil, nil
96+
},
97+
},
98+
})
99+
}
100+
}
101+
downloader.client = client
102+
return &downloader
103+
}
104+
105+
// GetRepoInfo returns a repository information
106+
func (g *GogsDownloader) GetRepoInfo() (*base.Repository, error) {
107+
gr, err := g.client.GetRepo(g.repoOwner, g.repoName)
108+
if err != nil {
109+
return nil, err
110+
}
111+
112+
// convert github repo to stand Repo
113+
return &base.Repository{
114+
Owner: g.repoOwner,
115+
Name: g.repoName,
116+
IsPrivate: gr.Private,
117+
Description: gr.Description,
118+
CloneURL: gr.CloneURL,
119+
}, nil
120+
}
121+
122+
// GetTopics return github topics
123+
func (g *GogsDownloader) GetTopics() ([]string, error) {
124+
return []string{}, nil
125+
}
126+
127+
// GetMilestones returns milestones
128+
func (g *GogsDownloader) GetMilestones() ([]*base.Milestone, error) {
129+
var perPage = 100
130+
var milestones = make([]*base.Milestone, 0, perPage)
131+
132+
ms, err := g.client.ListRepoMilestones(g.repoOwner, g.repoName)
133+
if err != nil {
134+
return nil, err
135+
}
136+
137+
t := time.Now()
138+
139+
for _, m := range ms {
140+
milestones = append(milestones, &base.Milestone{
141+
Title: m.Title,
142+
Description: m.Description,
143+
Deadline: m.Deadline,
144+
State: string(m.State),
145+
Created: t,
146+
Updated: &t,
147+
Closed: m.Closed,
148+
})
149+
}
150+
151+
return milestones, nil
152+
}
153+
154+
func convertGogsLabel(label *gogs.Label) *base.Label {
155+
return &base.Label{
156+
Name: label.Name,
157+
Color: label.Color,
158+
}
159+
}
160+
161+
// GetLabels returns labels
162+
func (g *GogsDownloader) GetLabels() ([]*base.Label, error) {
163+
var perPage = 100
164+
var labels = make([]*base.Label, 0, perPage)
165+
ls, err := g.client.ListRepoLabels(g.repoOwner, g.repoName)
166+
if err != nil {
167+
return nil, err
168+
}
169+
170+
for _, label := range ls {
171+
labels = append(labels, convertGogsLabel(label))
172+
}
173+
174+
return labels, nil
175+
}
176+
177+
// GetReleases returns releases
178+
// FIXME: gogs API haven't support get releases
179+
func (g *GogsDownloader) GetReleases() ([]*base.Release, error) {
180+
return nil, ErrNotSupported
181+
}
182+
183+
// GetIssues returns issues according start and limit, perPage is not supported
184+
func (g *GogsDownloader) GetIssues(page, perPage int) ([]*base.Issue, bool, error) {
185+
var allIssues = make([]*base.Issue, 0, perPage)
186+
187+
issues, err := g.client.ListRepoIssues(g.repoOwner, g.repoName, gogs.ListIssueOption{
188+
Page: page,
189+
})
190+
if err != nil {
191+
return nil, false, fmt.Errorf("error while listing repos: %v", err)
192+
}
193+
for _, issue := range issues {
194+
if issue.PullRequest != nil {
195+
continue
196+
}
197+
198+
var milestone string
199+
if issue.Milestone != nil {
200+
milestone = issue.Milestone.Title
201+
}
202+
var labels = make([]*base.Label, 0, len(issue.Labels))
203+
for _, l := range issue.Labels {
204+
labels = append(labels, convertGogsLabel(l))
205+
}
206+
207+
var closed *time.Time
208+
if issue.State == gogs.STATE_CLOSED {
209+
// gogs client haven't provide closed, so we use updated instead
210+
closed = &issue.Updated
211+
}
212+
213+
allIssues = append(allIssues, &base.Issue{
214+
Title: issue.Title,
215+
Number: issue.Index,
216+
PosterName: issue.Poster.Login,
217+
PosterEmail: issue.Poster.Email,
218+
Content: issue.Body,
219+
Milestone: milestone,
220+
State: string(issue.State),
221+
Created: issue.Created,
222+
Labels: labels,
223+
Closed: closed,
224+
})
225+
}
226+
227+
return allIssues, len(issues) == 0, nil
228+
}
229+
230+
// GetComments returns comments according issueNumber
231+
func (g *GogsDownloader) GetComments(issueNumber int64) ([]*base.Comment, error) {
232+
var allComments = make([]*base.Comment, 0, 100)
233+
234+
comments, err := g.client.ListIssueComments(g.repoOwner, g.repoName, issueNumber)
235+
if err != nil {
236+
return nil, fmt.Errorf("error while listing repos: %v", err)
237+
}
238+
for _, comment := range comments {
239+
allComments = append(allComments, &base.Comment{
240+
PosterName: comment.Poster.Login,
241+
PosterEmail: comment.Poster.Email,
242+
Content: comment.Body,
243+
Created: comment.Created,
244+
Updated: comment.Updated,
245+
})
246+
}
247+
248+
return allComments, nil
249+
}
250+
251+
// GetPullRequests returns pull requests according page and perPage
252+
func (g *GogsDownloader) GetPullRequests(page, perPage int) ([]*base.PullRequest, error) {
253+
return nil, ErrNotSupported
254+
}

0 commit comments

Comments
 (0)