diff options
Diffstat (limited to 'bridge/launchpad/import.go')
-rw-r--r-- | bridge/launchpad/import.go | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/bridge/launchpad/import.go b/bridge/launchpad/import.go new file mode 100644 index 00000000..074b4bf3 --- /dev/null +++ b/bridge/launchpad/import.go @@ -0,0 +1,80 @@ +package launchpad + +import ( + "fmt" + "time" + + "github.com/MichaelMure/git-bug/bridge/core" + "github.com/MichaelMure/git-bug/bug" + "github.com/MichaelMure/git-bug/cache" + "github.com/pkg/errors" +) + +type launchpadImporter struct { + conf core.Configuration +} + +func (li *launchpadImporter) Init(conf core.Configuration) error { + li.conf = conf + return nil +} + +const keyLaunchpadID = "launchpad-id" + +func (li *launchpadImporter) makePerson(owner LPPerson) bug.Person { + return bug.Person{ + Name: owner.Name, + Email: "", + Login: owner.Login, + AvatarUrl: "", + } +} + +func (li *launchpadImporter) ImportAll(repo *cache.RepoCache) error { + lpAPI := new(launchpadAPI) + + err := lpAPI.Init() + if err != nil { + return err + } + + lpBugs, err := lpAPI.SearchTasks(li.conf["project"]) + if err != nil { + return err + } + + for _, lpBug := range lpBugs { + lpBugID := fmt.Sprintf("%d", lpBug.ID) + _, err := repo.ResolveBugCreateMetadata(keyLaunchpadID, lpBugID) + if err != nil && err != bug.ErrBugNotExist { + return err + } + + if err == bug.ErrBugNotExist { + createdAt, _ := time.Parse(time.RFC3339, lpBug.CreatedAt) + _, err := repo.NewBugRaw( + li.makePerson(lpBug.Owner), + createdAt.Unix(), + lpBug.Title, + lpBug.Description, + nil, + map[string]string{ + keyLaunchpadID: lpBugID, + }, + ) + if err != nil { + return errors.Wrapf(err, "failed to add bug id #%s", lpBugID) + } + } else { + /* TODO: Update bug */ + fmt.Println("TODO: Update bug") + } + + } + return nil +} + +func (li *launchpadImporter) Import(repo *cache.RepoCache, id string) error { + fmt.Println("IMPORT") + return nil +} |