mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Add support for migrating from Gitlab (#9084)
* First stab at a Gitlab migrations interface. * Modify JS to show migration for Gitlab * Properly strip out #gitlab tag from repo name * Working Gitlab migrations! Still need to figure out how to hide tokens/etc from showing up in opts.CloneAddr * Try #2 at trying to hide credentials. CloneAddr was being used as OriginalURL. Now passing OriginalURL through from the form and saving it. * Add go-gitlab dependency * Vendor go-gitlab * Use gitlab.BasicAuthClient Correct CloneURL. This should be functioning! Previous commits fixed "Migrated from" from including the migration credentials. * Replaced repoPath with repoID globally. RepoID is grabbed in NewGitlabDownloader * Logging touchup * Properly set private repo status. Properly set milestone deadline time. Consistently use Gitlab username for 'Name'. * Add go-gitlab vendor cache * Fix PR migrations: - Count of issues is kept to set a non-conflicting PR.ID - Bool is used to tell whether to fetch Issue or PR comments * Ensure merged PRs are closed and set with the proper time * Remove copyright and some commented code * Rip out '#gitlab' based self-hosted Gitlab support * Hide given credentials for migrated repos. CloneAddr was being saved as OriginalURL. Now passing OriginalURL through from the form and saving it in it's place * Use asset.URL directly, no point in parsing. Opened PRs should fall through to false. * Fix importing Milestones. Allow importing using Personal Tokens or anonymous access. * Fix Gitlab Milestone migration if DueDate isn't set * Empty Milestone due dates properly return nil, not zero time * Add GITLAB_READ_TOKEN to drone unit-test step * Add working gitlab_test.go. A Personal Access Token, given in env variable GITLAB_READ_TOKEN is required to run the test. * Fix linting issues * Add modified JS files * Remove pre-build JS files * Only merged PRs are marged as merged/closed * Test topics * Skip test if gitlab is inaccessible * Grab personal token from username, not password. Matches Github migration implementation * Add SetContext() to GitlabDownloader. * Checking Updated field in Issues. * Actually fetch Issue Updated time from Gitlab * Add Gitlab migration GetReviews() stub * Fix Patch and Clone URLs * check Updated too * fix mod * make vendor with go1.14 Co-authored-by: techknowlogick <techknowlogick@gitea.io> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: Lauris BH <lauris@nix.lv> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
This commit is contained in:
		
							
								
								
									
										176
									
								
								vendor/github.com/xanzy/go-gitlab/todos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								vendor/github.com/xanzy/go-gitlab/todos.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,176 @@ | ||||
| package gitlab | ||||
|  | ||||
| import "time" | ||||
| import "fmt" | ||||
|  | ||||
| // TodosService handles communication with the todos related methods of | ||||
| // the Gitlab API. | ||||
| // | ||||
| // GitLab API docs: https://docs.gitlab.com/ce/api/todos.html | ||||
| type TodosService struct { | ||||
| 	client *Client | ||||
| } | ||||
|  | ||||
| // TodoAction represents the available actions that can be performed on a todo. | ||||
| // | ||||
| // GitLab API docs: https://docs.gitlab.com/ce/api/todos.html | ||||
| type TodoAction string | ||||
|  | ||||
| // The available todo actions. | ||||
| const ( | ||||
| 	TodoAssigned          TodoAction = "assigned" | ||||
| 	TodoMentioned         TodoAction = "mentioned" | ||||
| 	TodoBuildFailed       TodoAction = "build_failed" | ||||
| 	TodoMarked            TodoAction = "marked" | ||||
| 	TodoApprovalRequired  TodoAction = "approval_required" | ||||
| 	TodoDirectlyAddressed TodoAction = "directly_addressed" | ||||
| ) | ||||
|  | ||||
| // TodoTarget represents a todo target of type Issue or MergeRequest | ||||
| type TodoTarget struct { | ||||
| 	// TODO: replace both Assignee and Author structs with v4 User struct | ||||
| 	Assignee struct { | ||||
| 		Name      string `json:"name"` | ||||
| 		Username  string `json:"username"` | ||||
| 		ID        int    `json:"id"` | ||||
| 		State     string `json:"state"` | ||||
| 		AvatarURL string `json:"avatar_url"` | ||||
| 		WebURL    string `json:"web_url"` | ||||
| 	} `json:"assignee"` | ||||
| 	Author struct { | ||||
| 		Name      string `json:"name"` | ||||
| 		Username  string `json:"username"` | ||||
| 		ID        int    `json:"id"` | ||||
| 		State     string `json:"state"` | ||||
| 		AvatarURL string `json:"avatar_url"` | ||||
| 		WebURL    string `json:"web_url"` | ||||
| 	} `json:"author"` | ||||
| 	CreatedAt      *time.Time `json:"created_at"` | ||||
| 	Description    string     `json:"description"` | ||||
| 	Downvotes      int        `json:"downvotes"` | ||||
| 	ID             int        `json:"id"` | ||||
| 	IID            int        `json:"iid"` | ||||
| 	Labels         []string   `json:"labels"` | ||||
| 	Milestone      Milestone  `json:"milestone"` | ||||
| 	ProjectID      int        `json:"project_id"` | ||||
| 	State          string     `json:"state"` | ||||
| 	Subscribed     bool       `json:"subscribed"` | ||||
| 	Title          string     `json:"title"` | ||||
| 	UpdatedAt      *time.Time `json:"updated_at"` | ||||
| 	Upvotes        int        `json:"upvotes"` | ||||
| 	UserNotesCount int        `json:"user_notes_count"` | ||||
| 	WebURL         string     `json:"web_url"` | ||||
|  | ||||
| 	// Only available for type Issue | ||||
| 	Confidential bool   `json:"confidential"` | ||||
| 	DueDate      string `json:"due_date"` | ||||
| 	Weight       int    `json:"weight"` | ||||
|  | ||||
| 	// Only available for type MergeRequest | ||||
| 	ApprovalsBeforeMerge      int    `json:"approvals_before_merge"` | ||||
| 	ForceRemoveSourceBranch   bool   `json:"force_remove_source_branch"` | ||||
| 	MergeCommitSHA            string `json:"merge_commit_sha"` | ||||
| 	MergeWhenPipelineSucceeds bool   `json:"merge_when_pipeline_succeeds"` | ||||
| 	MergeStatus               string `json:"merge_status"` | ||||
| 	SHA                       string `json:"sha"` | ||||
| 	ShouldRemoveSourceBranch  bool   `json:"should_remove_source_branch"` | ||||
| 	SourceBranch              string `json:"source_branch"` | ||||
| 	SourceProjectID           int    `json:"source_project_id"` | ||||
| 	Squash                    bool   `json:"squash"` | ||||
| 	TargetBranch              string `json:"target_branch"` | ||||
| 	TargetProjectID           int    `json:"target_project_id"` | ||||
| 	WorkInProgress            bool   `json:"work_in_progress"` | ||||
| } | ||||
|  | ||||
| // Todo represents a GitLab todo. | ||||
| // | ||||
| // GitLab API docs: https://docs.gitlab.com/ce/api/todos.html | ||||
| type Todo struct { | ||||
| 	ID      int `json:"id"` | ||||
| 	Project struct { | ||||
| 		ID                int    `json:"id"` | ||||
| 		HTTPURLToRepo     string `json:"http_url_to_repo"` | ||||
| 		WebURL            string `json:"web_url"` | ||||
| 		Name              string `json:"name"` | ||||
| 		NameWithNamespace string `json:"name_with_namespace"` | ||||
| 		Path              string `json:"path"` | ||||
| 		PathWithNamespace string `json:"path_with_namespace"` | ||||
| 	} `json:"project"` | ||||
| 	Author struct { | ||||
| 		ID        int    `json:"id"` | ||||
| 		Name      string `json:"name"` | ||||
| 		Username  string `json:"username"` | ||||
| 		State     string `json:"state"` | ||||
| 		AvatarURL string `json:"avatar_url"` | ||||
| 		WebURL    string `json:"web_url"` | ||||
| 	} `json:"author"` | ||||
| 	ActionName TodoAction `json:"action_name"` | ||||
| 	TargetType string     `json:"target_type"` | ||||
| 	Target     TodoTarget `json:"target"` | ||||
| 	TargetURL  string     `json:"target_url"` | ||||
| 	Body       string     `json:"body"` | ||||
| 	State      string     `json:"state"` | ||||
| 	CreatedAt  *time.Time `json:"created_at"` | ||||
| } | ||||
|  | ||||
| func (t Todo) String() string { | ||||
| 	return Stringify(t) | ||||
| } | ||||
|  | ||||
| // ListTodosOptions represents the available ListTodos() options. | ||||
| // | ||||
| // GitLab API docs: https://docs.gitlab.com/ce/api/todos.html#get-a-list-of-todos | ||||
| type ListTodosOptions struct { | ||||
| 	ListOptions | ||||
| 	Action    *TodoAction `url:"action,omitempty" json:"action,omitempty"` | ||||
| 	AuthorID  *int        `url:"author_id,omitempty" json:"author_id,omitempty"` | ||||
| 	ProjectID *int        `url:"project_id,omitempty" json:"project_id,omitempty"` | ||||
| 	State     *string     `url:"state,omitempty" json:"state,omitempty"` | ||||
| 	Type      *string     `url:"type,omitempty" json:"type,omitempty"` | ||||
| } | ||||
|  | ||||
| // ListTodos lists all todos created by authenticated user. | ||||
| // When no filter is applied, it returns all pending todos for the current user. | ||||
| // | ||||
| // GitLab API docs: | ||||
| // https://docs.gitlab.com/ce/api/todos.html#get-a-list-of-todos | ||||
| func (s *TodosService) ListTodos(opt *ListTodosOptions, options ...OptionFunc) ([]*Todo, *Response, error) { | ||||
| 	req, err := s.client.NewRequest("GET", "todos", opt, options) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
|  | ||||
| 	var t []*Todo | ||||
| 	resp, err := s.client.Do(req, &t) | ||||
| 	if err != nil { | ||||
| 		return nil, resp, err | ||||
| 	} | ||||
|  | ||||
| 	return t, resp, err | ||||
| } | ||||
|  | ||||
| // MarkTodoAsDone marks a single pending todo given by its ID for the current user as done. | ||||
| // | ||||
| // GitLab API docs: https://docs.gitlab.com/ce/api/todos.html#mark-a-todo-as-done | ||||
| func (s *TodosService) MarkTodoAsDone(id int, options ...OptionFunc) (*Response, error) { | ||||
| 	u := fmt.Sprintf("todos/%d/mark_as_done", id) | ||||
|  | ||||
| 	req, err := s.client.NewRequest("POST", u, nil, options) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	return s.client.Do(req, nil) | ||||
| } | ||||
|  | ||||
| // MarkAllTodosAsDone marks all pending todos for the current user as done. | ||||
| // | ||||
| // GitLab API docs: https://docs.gitlab.com/ce/api/todos.html#mark-all-todos-as-done | ||||
| func (s *TodosService) MarkAllTodosAsDone(options ...OptionFunc) (*Response, error) { | ||||
| 	req, err := s.client.NewRequest("POST", "todos/mark_as_done", nil, options) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	return s.client.Do(req, nil) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user