Skip to content

Commit 2281a55

Browse files
committed
refactor: refactor repository migration and error handling
- Increase the timeout for the context from `10` to `30` seconds - Add error handling for an empty `projectKey` and `repoSlug` - Add a loop to append `repoList` with `repo.Slug` values - Add a loop to handle multiple repositories in `repoList` - Add error handling for `repoResp` and set `repoName` based on `targetRepo` value - Add a loop to find the `cloneAddr` for the repository - Change the `Name` and `CloneAddr` values in the `migrateCmd` struct - Add error handling and logging for migration repository error - Change the logging function from `slog.Info` to `g.logger.Info` in the `GreateOrGetUser` function Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
1 parent 5f0c27f commit 2281a55

2 files changed

Lines changed: 50 additions & 23 deletions

File tree

cmd/migrate.go

Lines changed: 49 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ var migrateCmd = &cobra.Command{
2828
Use: "migrate",
2929
Short: "migrate organization repository",
3030
RunE: func(cmd *cobra.Command, args []string) error {
31-
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
31+
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
3232
defer cancel()
3333
m, err := migration.NewMigration(
3434
ctx,
@@ -39,30 +39,36 @@ var migrateCmd = &cobra.Command{
3939
return err
4040
}
4141

42-
if projectKey == "" || repoSlug == "" {
43-
return errors.New("project-key or repo-slug is empty")
42+
repoList := []string{}
43+
44+
if projectKey == "" {
45+
return errors.New("project-key can't be empty")
4446
}
4547

4648
orgResp, err := m.GetProjectData(projectKey)
4749
if err != nil {
4850
return err
4951
}
5052

51-
repoResp, err := m.GetRepositoryData(projectKey, repoSlug)
52-
if err != nil {
53-
return err
53+
if repoSlug != "" {
54+
repoList = append(repoList, repoSlug)
55+
} else {
56+
// get all repository list
57+
repos, err := m.Bitbucket.GetRepositories(projectKey)
58+
if err != nil {
59+
return err
60+
}
61+
62+
for _, repo := range repos {
63+
repoList = append(repoList, repo.Slug)
64+
}
5465
}
5566

5667
// check gitea owner exist
5768
if targetOwner == "" {
5869
targetOwner = orgResp.Project.Name
5970
}
6071

61-
// check gitea repository exist
62-
if targetRepo == "" {
63-
targetRepo = repoResp.Repository.Name
64-
}
65-
6672
// create new gitea organization
6773
err = m.CreateNewOrg(migration.CreateNewOrgOption{
6874
Name: targetOwner,
@@ -74,17 +80,38 @@ var migrateCmd = &cobra.Command{
7480
return err
7581
}
7682

77-
// create new gitea repository
78-
err = m.MigrateNewRepo(migration.MigrateNewRepoOption{
79-
Owner: targetOwner,
80-
Name: targetRepo,
81-
CloneAddr: repoResp.Repository.Links.Clone[1].Href,
82-
Description: repoResp.Repository.Description,
83-
Private: !repoResp.Repository.Public,
84-
Permission: repoResp.Permission,
85-
})
86-
if err != nil {
87-
return err
83+
for _, repoSlug := range repoList {
84+
repoResp, err := m.GetRepositoryData(projectKey, repoSlug)
85+
if err != nil {
86+
return err
87+
}
88+
89+
repoName := repoResp.Repository.Name
90+
// check gitea repository exist
91+
if targetRepo != "" && len(repoList) == 1 {
92+
repoName = targetRepo
93+
}
94+
95+
cloneAddr := ""
96+
for _, link := range repoResp.Repository.Links.Clone {
97+
if link.Name == "http" {
98+
cloneAddr = link.Href
99+
break
100+
}
101+
}
102+
103+
// create new gitea repository
104+
err = m.MigrateNewRepo(migration.MigrateNewRepoOption{
105+
Owner: targetOwner,
106+
Name: repoName,
107+
CloneAddr: cloneAddr,
108+
Description: repoResp.Repository.Description,
109+
Private: !repoResp.Repository.Public,
110+
Permission: repoResp.Permission,
111+
})
112+
if err != nil {
113+
m.Logger.Error("migration repository error", "error", err)
114+
}
88115
}
89116

90117
return nil

migration/gitea.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ func (g *gitea) GreateOrGetUser(opts CreateUserOption) (*gsdk.User, error) {
159159
if err != nil {
160160
return nil, err
161161
}
162-
slog.Info(
162+
g.logger.Info(
163163
"create a new user",
164164
"username", opts.Username,
165165
"fullname", opts.FullName,

0 commit comments

Comments
 (0)