gitea

Зеркало из https://github.com/go-gitea/gitea
Форк
0
/
gitbucket.go 
90 строк · 3.0 Кб
1
// Copyright 2021 The Gitea Authors. All rights reserved.
2
// SPDX-License-Identifier: MIT
3

4
package migrations
5

6
import (
7
	"context"
8
	"fmt"
9
	"net/url"
10
	"strings"
11

12
	"code.gitea.io/gitea/modules/log"
13
	base "code.gitea.io/gitea/modules/migration"
14
	"code.gitea.io/gitea/modules/structs"
15
)
16

17
var (
18
	_ base.Downloader        = &GitBucketDownloader{}
19
	_ base.DownloaderFactory = &GitBucketDownloaderFactory{}
20
)
21

22
func init() {
23
	RegisterDownloaderFactory(&GitBucketDownloaderFactory{})
24
}
25

26
// GitBucketDownloaderFactory defines a GitBucket downloader factory
27
type GitBucketDownloaderFactory struct{}
28

29
// New returns a Downloader related to this factory according MigrateOptions
30
func (f *GitBucketDownloaderFactory) New(ctx context.Context, opts base.MigrateOptions) (base.Downloader, error) {
31
	u, err := url.Parse(opts.CloneAddr)
32
	if err != nil {
33
		return nil, err
34
	}
35

36
	fields := strings.Split(u.Path, "/")
37
	if len(fields) < 2 {
38
		return nil, fmt.Errorf("invalid path: %s", u.Path)
39
	}
40
	baseURL := u.Scheme + "://" + u.Host + strings.TrimSuffix(strings.Join(fields[:len(fields)-2], "/"), "/git")
41

42
	oldOwner := fields[len(fields)-2]
43
	oldName := strings.TrimSuffix(fields[len(fields)-1], ".git")
44

45
	log.Trace("Create GitBucket downloader. BaseURL: %s RepoOwner: %s RepoName: %s", baseURL, oldOwner, oldName)
46
	return NewGitBucketDownloader(ctx, baseURL, opts.AuthUsername, opts.AuthPassword, opts.AuthToken, oldOwner, oldName), nil
47
}
48

49
// GitServiceType returns the type of git service
50
func (f *GitBucketDownloaderFactory) GitServiceType() structs.GitServiceType {
51
	return structs.GitBucketService
52
}
53

54
// GitBucketDownloader implements a Downloader interface to get repository information
55
// from GitBucket via GithubDownloader
56
type GitBucketDownloader struct {
57
	*GithubDownloaderV3
58
}
59

60
// String implements Stringer
61
func (g *GitBucketDownloader) String() string {
62
	return fmt.Sprintf("migration from gitbucket server %s %s/%s", g.baseURL, g.repoOwner, g.repoName)
63
}
64

65
func (g *GitBucketDownloader) LogString() string {
66
	if g == nil {
67
		return "<GitBucketDownloader nil>"
68
	}
69
	return fmt.Sprintf("<GitBucketDownloader %s %s/%s>", g.baseURL, g.repoOwner, g.repoName)
70
}
71

72
// NewGitBucketDownloader creates a GitBucket downloader
73
func NewGitBucketDownloader(ctx context.Context, baseURL, userName, password, token, repoOwner, repoName string) *GitBucketDownloader {
74
	githubDownloader := NewGithubDownloaderV3(ctx, baseURL, userName, password, token, repoOwner, repoName)
75
	// Gitbucket 4.40 uses different internal hard-coded perPage values.
76
	// Issues, PRs, and other major parts use 25.  Release page uses 10.
77
	// Some API doesn't support paging yet.  Sounds difficult, but using
78
	// minimum number among them worked out very well.
79
	githubDownloader.maxPerPage = 10
80
	githubDownloader.SkipReactions = true
81
	githubDownloader.SkipReviews = true
82
	return &GitBucketDownloader{
83
		githubDownloader,
84
	}
85
}
86

87
// SupportGetRepoComments return true if it supports get repo comments
88
func (g *GitBucketDownloader) SupportGetRepoComments() bool {
89
	return false
90
}
91

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.