aboutsummaryrefslogtreecommitdiffstats
path: root/bridge/gitlab/export.go
diff options
context:
space:
mode:
Diffstat (limited to 'bridge/gitlab/export.go')
-rw-r--r--bridge/gitlab/export.go57
1 files changed, 41 insertions, 16 deletions
diff --git a/bridge/gitlab/export.go b/bridge/gitlab/export.go
index 2f70e01a..bf48e31a 100644
--- a/bridge/gitlab/export.go
+++ b/bridge/gitlab/export.go
@@ -18,12 +18,6 @@ var (
ErrMissingIdentityToken = errors.New("missing identity token")
)
-const (
- keyGitlabId = "gitlab-id"
- keyGitlabUrl = "gitlab-url"
- keyOrigin = "origin"
-)
-
// gitlabExporter implement the Exporter interface
type gitlabExporter struct {
conf core.Configuration
@@ -288,7 +282,7 @@ func (ge *gitlabExporter) exportBug(b *cache.BugCache, since time.Time, out chan
if targetHash == bugCreationHash {
// case bug creation operation: we need to edit the Gitlab issue
- if err := updateGitlabIssueBody(client, bugGitlabID, opr.Message); err != nil {
+ if err := updateGitlabIssueBody(client, 0, opr.Message); err != nil {
err := errors.Wrap(err, "editing issue")
out <- core.NewExportError(err, b.Id())
return
@@ -323,7 +317,7 @@ func (ge *gitlabExporter) exportBug(b *cache.BugCache, since time.Time, out chan
case *bug.SetStatusOperation:
opr := op.(*bug.SetStatusOperation)
- if err := updateGitlabIssueStatus(client, bugGitlabID, opr.Status); err != nil {
+ if err := updateGitlabIssueStatus(client, 0, opr.Status); err != nil {
err := errors.Wrap(err, "editing status")
out <- core.NewExportError(err, b.Id())
return
@@ -336,7 +330,7 @@ func (ge *gitlabExporter) exportBug(b *cache.BugCache, since time.Time, out chan
case *bug.SetTitleOperation:
opr := op.(*bug.SetTitleOperation)
- if err := updateGitlabIssueTitle(client, bugGitlabID, opr.Title); err != nil {
+ if err := updateGitlabIssueTitle(client, 0, opr.Title); err != nil {
err := errors.Wrap(err, "editing title")
out <- core.NewExportError(err, b.Id())
return
@@ -466,8 +460,16 @@ func (ge *gitlabExporter) getLabelsIDs(gc *gitlab.Client, repositoryID string, l
// create a gitlab. issue and return it ID
func createGitlabIssue(gc *gitlab.Client, repositoryID, title, body string) (string, string, error) {
- return "", "", nil
+ issue, _, err := gc.Issues.CreateIssue(repositoryID, &gitlab.CreateIssueOptions{
+ Title: &title,
+ Description: &body,
+ })
+ if err != nil {
+ return "", "", err
+ }
+
+ return strconv.Itoa(issue.IID), issue.WebURL, nil
}
// add a comment to an issue and return it ID
@@ -479,16 +481,39 @@ func editCommentGitlabIssue(gc *gitlab.Client, commentID, body string) (string,
return "", "", nil
}
-func updateGitlabIssueStatus(gc *gitlab.Client, id string, status bug.Status) error {
- return nil
+func updateGitlabIssueStatus(gc *gitlab.Client, id int, status bug.Status) error {
+ var state string
+
+ switch status {
+ case bug.OpenStatus:
+ state = "reopen"
+ case bug.ClosedStatus:
+ state = "close"
+ default:
+ panic("unknown bug state")
+ }
+
+ _, _, err := gc.Issues.UpdateIssue("", id, &gitlab.UpdateIssueOptions{
+ StateEvent: &state,
+ })
+
+ return err
}
-func updateGitlabIssueBody(gc *gitlab.Client, id string, body string) error {
- return nil
+func updateGitlabIssueBody(gc *gitlab.Client, id int, body string) error {
+ _, _, err := gc.Issues.UpdateIssue("", id, &gitlab.UpdateIssueOptions{
+ Description: &body,
+ })
+
+ return err
}
-func updateGitlabIssueTitle(gc *gitlab.Client, id, title string) error {
- return nil
+func updateGitlabIssueTitle(gc *gitlab.Client, id int, title string) error {
+ _, _, err := gc.Issues.UpdateIssue("", id, &gitlab.UpdateIssueOptions{
+ Title: &title,
+ })
+
+ return err
}
// update gitlab. issue labels