From cf9d4716310638ca047e93e476886b4e4ae0ce39 Mon Sep 17 00:00:00 2001
From: Lunny Xiao <xiaolunwen@gmail.com>
Date: Sun, 27 Dec 2020 07:28:47 +0800
Subject: [PATCH] Change topic name size from 25 to 50 (#14150)

* Change topic name size from 25 to 50

* recreateTable requires full bean definition

Signed-off-by: Andrew Thornton <art27@cantab.net>

Co-authored-by: zeripath <art27@cantab.net>
---
 models/migrations/migrations.go |  2 ++
 models/migrations/v163.go       | 34 +++++++++++++++++++++++++++++++++
 models/topic.go                 |  2 +-
 3 files changed, 37 insertions(+), 1 deletion(-)
 create mode 100644 models/migrations/v163.go

diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index cac36edf50..6570460425 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -269,6 +269,8 @@ var migrations = []Migration{
 	NewMigration("Convert task type from int to string", convertTaskTypeToString),
 	// v162 -> v163
 	NewMigration("Convert webhook task type from int to string", convertWebhookTaskTypeToString),
+	// v163 -> v164
+	NewMigration("Convert topic name from 25 to 50", convertTopicNameFrom25To50),
 }
 
 // GetCurrentDBVersion returns the current db version
diff --git a/models/migrations/v163.go b/models/migrations/v163.go
new file mode 100644
index 0000000000..150cc34f02
--- /dev/null
+++ b/models/migrations/v163.go
@@ -0,0 +1,34 @@
+// Copyright 2020 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package migrations
+
+import (
+	"xorm.io/xorm"
+)
+
+func convertTopicNameFrom25To50(x *xorm.Engine) error {
+	type Topic struct {
+		ID          int64  `xorm:"pk autoincr"`
+		Name        string `xorm:"UNIQUE VARCHAR(50)"`
+		RepoCount   int
+		CreatedUnix int64 `xorm:"INDEX created"`
+		UpdatedUnix int64 `xorm:"INDEX updated"`
+	}
+
+	if err := x.Sync2(new(Topic)); err != nil {
+		return err
+	}
+
+	sess := x.NewSession()
+	defer sess.Close()
+	if err := sess.Begin(); err != nil {
+		return err
+	}
+	if err := recreateTable(sess, new(Topic)); err != nil {
+		return err
+	}
+
+	return sess.Commit()
+}
diff --git a/models/topic.go b/models/topic.go
index 6be4f10295..1969c57db8 100644
--- a/models/topic.go
+++ b/models/topic.go
@@ -26,7 +26,7 @@ var topicPattern = regexp.MustCompile(`^[a-z0-9][a-z0-9-]*$`)
 // Topic represents a topic of repositories
 type Topic struct {
 	ID          int64  `xorm:"pk autoincr"`
-	Name        string `xorm:"UNIQUE VARCHAR(25)"`
+	Name        string `xorm:"UNIQUE VARCHAR(50)"`
 	RepoCount   int
 	CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
 	UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`