From 12960b9d1861c9e7b0b5c7076dec029de80a1944 Mon Sep 17 00:00:00 2001
From: 6543 <6543@obermui.de>
Date: Fri, 17 Apr 2020 19:42:57 +0200
Subject: [PATCH] [BugFix] remove nil inserts in models (#11096)

* Fix InsertReleases Nil Insert on Attachments

* FIX "No element on slice when insert" & smal refactor

* again

* impruve

* rm useles newline

* Apply suggestions from code review

Co-Authored-By: zeripath <art27@cantab.net>

* process insert as a whole

Co-authored-by: zeripath <art27@cantab.net>
---
 models/migrate.go           | 31 ++++++++++++++++++++-----------
 modules/migrations/gitea.go | 18 ++++++++++++------
 2 files changed, 32 insertions(+), 17 deletions(-)

diff --git a/models/migrate.go b/models/migrate.go
index ea4a8c176..2715c5bd9 100644
--- a/models/migrate.go
+++ b/models/migrate.go
@@ -64,15 +64,20 @@ func insertIssue(sess *xorm.Session, issue *Issue) error {
 		})
 		labelIDs = append(labelIDs, label.ID)
 	}
-	if _, err := sess.Insert(issueLabels); err != nil {
-		return err
+	if len(issueLabels) > 0 {
+		if _, err := sess.Insert(issueLabels); err != nil {
+			return err
+		}
 	}
 
 	for _, reaction := range issue.Reactions {
 		reaction.IssueID = issue.ID
 	}
-	if _, err := sess.Insert(issue.Reactions); err != nil {
-		return err
+
+	if len(issue.Reactions) > 0 {
+		if _, err := sess.Insert(issue.Reactions); err != nil {
+			return err
+		}
 	}
 
 	cols := make([]string, 0)
@@ -151,8 +156,10 @@ func InsertIssueComments(comments []*Comment) error {
 			reaction.IssueID = comment.IssueID
 			reaction.CommentID = comment.ID
 		}
-		if _, err := sess.Insert(comment.Reactions); err != nil {
-			return err
+		if len(comment.Reactions) > 0 {
+			if _, err := sess.Insert(comment.Reactions); err != nil {
+				return err
+			}
 		}
 	}
 
@@ -196,12 +203,14 @@ func InsertReleases(rels ...*Release) error {
 			return err
 		}
 
-		for i := 0; i < len(rel.Attachments); i++ {
-			rel.Attachments[i].ReleaseID = rel.ID
-		}
+		if len(rel.Attachments) > 0 {
+			for i := range rel.Attachments {
+				rel.Attachments[i].ReleaseID = rel.ID
+			}
 
-		if _, err := sess.NoAutoTime().Insert(rel.Attachments); err != nil {
-			return err
+			if _, err := sess.NoAutoTime().Insert(rel.Attachments); err != nil {
+				return err
+			}
 		}
 	}
 
diff --git a/modules/migrations/gitea.go b/modules/migrations/gitea.go
index a087cafe9..8da1bd468 100644
--- a/modules/migrations/gitea.go
+++ b/modules/migrations/gitea.go
@@ -393,13 +393,16 @@ func (g *GiteaLocalUploader) CreateIssues(issues ...*base.Issue) error {
 		iss = append(iss, &is)
 	}
 
-	err := models.InsertIssues(iss...)
-	if err != nil {
-		return err
-	}
-	for _, is := range iss {
-		g.issues.Store(is.Index, is.ID)
+	if len(iss) > 0 {
+		if err := models.InsertIssues(iss...); err != nil {
+			return err
+		}
+
+		for _, is := range iss {
+			g.issues.Store(is.Index, is.ID)
+		}
 	}
+
 	return nil
 }
 
@@ -478,6 +481,9 @@ func (g *GiteaLocalUploader) CreateComments(comments ...*base.Comment) error {
 		cms = append(cms, &cm)
 	}
 
+	if len(cms) == 0 {
+		return nil
+	}
 	return models.InsertIssueComments(cms)
 }