From 298dc9e05cd244c127645af39d0308d7ed57fa7b Mon Sep 17 00:00:00 2001 From: JakobDev Date: Tue, 23 Jan 2024 09:29:42 +0100 Subject: [PATCH 1/3] Fix migration if issue title is too long --- modules/util/string.go | 8 ++++++++ modules/util/string_test.go | 5 +++++ services/migrations/gitea_uploader.go | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/modules/util/string.go b/modules/util/string.go index 2cf44d29b1f0a..0111e01209a8d 100644 --- a/modules/util/string.go +++ b/modules/util/string.go @@ -95,3 +95,11 @@ func UnsafeBytesToString(b []byte) string { func UnsafeStringToBytes(s string) []byte { return unsafe.Slice(unsafe.StringData(s), len(s)) } + +// GetFirstCharacters returns the first n characters of a string +func GetFirstCharacters(s string, n int) string { + if len(s) <= n { + return s + } + return s[:n] +} diff --git a/modules/util/string_test.go b/modules/util/string_test.go index 0a4a8bbcfbf9d..0a2928e35679c 100644 --- a/modules/util/string_test.go +++ b/modules/util/string_test.go @@ -45,3 +45,8 @@ func TestToSnakeCase(t *testing.T) { assert.Equal(t, expected, ToSnakeCase(input)) } } + +func TestGetFirstCharacters(t *testing.T) { + assert.Equal(t, "Test123", GetFirstCharacters("Test123", 10)) + assert.Equal(t, "Test", GetFirstCharacters("Test123", 4)) +} diff --git a/services/migrations/gitea_uploader.go b/services/migrations/gitea_uploader.go index 23d855d615d7c..d9474501730a2 100644 --- a/services/migrations/gitea_uploader.go +++ b/services/migrations/gitea_uploader.go @@ -397,7 +397,7 @@ func (g *GiteaLocalUploader) CreateIssues(issues ...*base.Issue) error { RepoID: g.repo.ID, Repo: g.repo, Index: issue.Number, - Title: issue.Title, + Title: util.GetFirstCharacters(issue.Title, 255), Content: issue.Content, Ref: issue.Ref, IsClosed: issue.State == "closed", From 7e964bf6c35b1936629a1854e2771da5caefc260 Mon Sep 17 00:00:00 2001 From: JakobDev Date: Tue, 23 Jan 2024 10:01:10 +0100 Subject: [PATCH 2/3] Fix GetFirstCharacters for Unicode --- modules/util/string.go | 3 ++- modules/util/string_test.go | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/util/string.go b/modules/util/string.go index 0111e01209a8d..e4499b8742803 100644 --- a/modules/util/string.go +++ b/modules/util/string.go @@ -98,8 +98,9 @@ func UnsafeStringToBytes(s string) []byte { // GetFirstCharacters returns the first n characters of a string func GetFirstCharacters(s string, n int) string { + r := []rune(s) if len(s) <= n { - return s + return string(r[:n]) } return s[:n] } diff --git a/modules/util/string_test.go b/modules/util/string_test.go index 0a2928e35679c..218970516bf6e 100644 --- a/modules/util/string_test.go +++ b/modules/util/string_test.go @@ -49,4 +49,5 @@ func TestToSnakeCase(t *testing.T) { func TestGetFirstCharacters(t *testing.T) { assert.Equal(t, "Test123", GetFirstCharacters("Test123", 10)) assert.Equal(t, "Test", GetFirstCharacters("Test123", 4)) + assert.Equal(t, "こん", GetFirstCharacters("こんにちは", 2)) } From 8215e553352204b2ea6d685732208a9f3767a3d9 Mon Sep 17 00:00:00 2001 From: JakobDev Date: Tue, 23 Jan 2024 16:41:03 +0100 Subject: [PATCH 3/3] Use TruncateString --- modules/util/string.go | 9 --------- modules/util/string_test.go | 6 ------ services/migrations/gitea_uploader.go | 3 ++- 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/modules/util/string.go b/modules/util/string.go index e4499b8742803..2cf44d29b1f0a 100644 --- a/modules/util/string.go +++ b/modules/util/string.go @@ -95,12 +95,3 @@ func UnsafeBytesToString(b []byte) string { func UnsafeStringToBytes(s string) []byte { return unsafe.Slice(unsafe.StringData(s), len(s)) } - -// GetFirstCharacters returns the first n characters of a string -func GetFirstCharacters(s string, n int) string { - r := []rune(s) - if len(s) <= n { - return string(r[:n]) - } - return s[:n] -} diff --git a/modules/util/string_test.go b/modules/util/string_test.go index 218970516bf6e..0a4a8bbcfbf9d 100644 --- a/modules/util/string_test.go +++ b/modules/util/string_test.go @@ -45,9 +45,3 @@ func TestToSnakeCase(t *testing.T) { assert.Equal(t, expected, ToSnakeCase(input)) } } - -func TestGetFirstCharacters(t *testing.T) { - assert.Equal(t, "Test123", GetFirstCharacters("Test123", 10)) - assert.Equal(t, "Test", GetFirstCharacters("Test123", 4)) - assert.Equal(t, "こん", GetFirstCharacters("こんにちは", 2)) -} diff --git a/services/migrations/gitea_uploader.go b/services/migrations/gitea_uploader.go index d9474501730a2..5a4392c66775f 100644 --- a/services/migrations/gitea_uploader.go +++ b/services/migrations/gitea_uploader.go @@ -19,6 +19,7 @@ import ( issues_model "code.gitea.io/gitea/models/issues" repo_model "code.gitea.io/gitea/models/repo" user_model "code.gitea.io/gitea/models/user" + base_module "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/label" "code.gitea.io/gitea/modules/log" @@ -397,7 +398,7 @@ func (g *GiteaLocalUploader) CreateIssues(issues ...*base.Issue) error { RepoID: g.repo.ID, Repo: g.repo, Index: issue.Number, - Title: util.GetFirstCharacters(issue.Title, 255), + Title: base_module.TruncateString(issue.Title, 255), Content: issue.Content, Ref: issue.Ref, IsClosed: issue.State == "closed",