From 93795d2f292d9c86389bb5fbd9cf25c69cc133f0 Mon Sep 17 00:00:00 2001 From: kolaente Date: Thu, 7 Sep 2023 10:24:15 +0200 Subject: [PATCH] fix(import): resolve task relations by old task ids --- pkg/modules/migration/create_from_structure.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/pkg/modules/migration/create_from_structure.go b/pkg/modules/migration/create_from_structure.go index f78d7a1003f..9b62a0e2b1e 100644 --- a/pkg/modules/migration/create_from_structure.go +++ b/pkg/modules/migration/create_from_structure.go @@ -178,15 +178,18 @@ func createProjectWithEverything(s *xorm.Session, project *models.ProjectWithTas } } + tasksByOldID := make(map[int64]*models.TaskWithComments, len(tasks)) // Create all tasks for _, t := range tasks { setBucketOrDefault(&t.Task) + oldid := t.ID t.ProjectID = project.ID err = t.Create(s, user) if err != nil { return } + tasksByOldID[oldid] = t log.Debugf("[creating structure] Created task %d", t.ID) if len(t.RelatedTasks) > 0 { @@ -202,13 +205,15 @@ func createProjectWithEverything(s *xorm.Session, project *models.ProjectWithTas for _, rt := range tasks { // First create the related tasks if they do not exist - if rt.ID == 0 { + if _, exists := tasksByOldID[rt.ID]; !exists { + oldid := rt.ID setBucketOrDefault(rt) rt.ProjectID = t.ProjectID err = rt.Create(s, user) if err != nil { return } + tasksByOldID[oldid] = &models.TaskWithComments{Task: *rt} log.Debugf("[creating structure] Created related task %d", rt.ID) } @@ -218,10 +223,14 @@ func createProjectWithEverything(s *xorm.Session, project *models.ProjectWithTas OtherTaskID: rt.ID, RelationKind: kind, } + if ttt, exists := tasksByOldID[rt.ID]; exists { + taskRel.OtherTaskID = ttt.ID + } err = taskRel.Create(s, user) - if err != nil { + if err != nil && !models.IsErrRelationAlreadyExists(err) { return } + err = nil log.Debugf("[creating structure] Created task relation between task %d and %d", t.ID, rt.ID)