aboutsummaryrefslogtreecommitdiffstats
path: root/bridge/launchpad
diff options
context:
space:
mode:
authorMichael Muré <batolettre@gmail.com>2019-03-01 23:17:57 +0100
committerGitHub <noreply@github.com>2019-03-01 23:17:57 +0100
commit7260ca05bc3588c0572887a7d8f1b897c7fc13da (patch)
tree66854358df3cb9de651f7688556ec5a4b8ab1868 /bridge/launchpad
parent0aefae6fcca5786f2c898029c3d6282f760f2c63 (diff)
parentb6bed784e5664819250aac20b2b9690879ee6ab1 (diff)
downloadgit-bug-7260ca05bc3588c0572887a7d8f1b897c7fc13da.tar.gz
Merge pull request #89 from MichaelMure/identity
WIP identity in git
Diffstat (limited to 'bridge/launchpad')
-rw-r--r--bridge/launchpad/import.go44
-rw-r--r--bridge/launchpad/launchpad.go2
2 files changed, 35 insertions, 11 deletions
diff --git a/bridge/launchpad/import.go b/bridge/launchpad/import.go
index 10d25e6c..30ec5c3f 100644
--- a/bridge/launchpad/import.go
+++ b/bridge/launchpad/import.go
@@ -7,6 +7,7 @@ import (
"github.com/MichaelMure/git-bug/bridge/core"
"github.com/MichaelMure/git-bug/bug"
"github.com/MichaelMure/git-bug/cache"
+ "github.com/MichaelMure/git-bug/identity"
"github.com/pkg/errors"
)
@@ -20,14 +21,27 @@ func (li *launchpadImporter) Init(conf core.Configuration) error {
}
const keyLaunchpadID = "launchpad-id"
+const keyLaunchpadLogin = "launchpad-login"
-func (li *launchpadImporter) makePerson(owner LPPerson) bug.Person {
- return bug.Person{
- Name: owner.Name,
- Email: "",
- Login: owner.Login,
- AvatarUrl: "",
+func (li *launchpadImporter) ensurePerson(repo *cache.RepoCache, owner LPPerson) (*cache.IdentityCache, error) {
+ // Look first in the cache
+ i, err := repo.ResolveIdentityImmutableMetadata(keyLaunchpadLogin, owner.Login)
+ if err == nil {
+ return i, nil
}
+ if _, ok := err.(identity.ErrMultipleMatch); ok {
+ return nil, err
+ }
+
+ return repo.NewIdentityRaw(
+ owner.Name,
+ "",
+ owner.Login,
+ "",
+ map[string]string{
+ keyLaunchpadLogin: owner.Login,
+ },
+ )
}
func (li *launchpadImporter) ImportAll(repo *cache.RepoCache) error {
@@ -53,10 +67,15 @@ func (li *launchpadImporter) ImportAll(repo *cache.RepoCache) error {
return err
}
+ owner, err := li.ensurePerson(repo, lpBug.Owner)
+ if err != nil {
+ return err
+ }
+
if err == bug.ErrBugNotExist {
createdAt, _ := time.Parse(time.RFC3339, lpBug.CreatedAt)
b, err = repo.NewBugRaw(
- li.makePerson(lpBug.Owner),
+ owner,
createdAt.Unix(),
lpBug.Title,
lpBug.Description,
@@ -81,7 +100,7 @@ func (li *launchpadImporter) ImportAll(repo *cache.RepoCache) error {
// The Launchpad API returns the bug description as the first
// comment, so skip it.
for _, lpMessage := range lpBug.Messages[1:] {
- _, err := b.ResolveTargetWithMetadata(keyLaunchpadID, lpMessage.ID)
+ _, err := b.ResolveOperationWithMetadata(keyLaunchpadID, lpMessage.ID)
if err != nil && err != cache.ErrNoMatchingOp {
return errors.Wrapf(err, "failed to fetch comments for bug #%s", lpBugID)
}
@@ -94,10 +113,15 @@ func (li *launchpadImporter) ImportAll(repo *cache.RepoCache) error {
continue
}
+ owner, err := li.ensurePerson(repo, lpMessage.Owner)
+ if err != nil {
+ return err
+ }
+
// This is a new comment, we can add it.
createdAt, _ := time.Parse(time.RFC3339, lpMessage.CreatedAt)
- err = b.AddCommentRaw(
- li.makePerson(lpMessage.Owner),
+ _, err = b.AddCommentRaw(
+ owner,
createdAt.Unix(),
lpMessage.Content,
nil,
diff --git a/bridge/launchpad/launchpad.go b/bridge/launchpad/launchpad.go
index f862f24e..1fd9edc2 100644
--- a/bridge/launchpad/launchpad.go
+++ b/bridge/launchpad/launchpad.go
@@ -1,4 +1,4 @@
-// Package launchad contains the Launchpad bridge implementation
+// Package launchpad contains the Launchpad bridge implementation
package launchpad
import (