mirror of
https://github.com/go-gitea/gitea.git
synced 2026-03-12 02:24:21 -05:00
Repo page returns 500 error when repo has multiple branch names that only differ in case #12557
Closed
opened 2025-11-02 10:14:01 -06:00 by GiteaMirror
·
6 comments
No Branch/Tag Specified
main
release/v1.25
release/v1.24
release/v1.23
release/v1.22
release/v1.21
release/v1.20
release/v1.19
release/v1.18
release/v1.17
release/v1.16
release/v1.15
release/v1.14
release/v1.13
release/v1.12
release/v1.11
release/v1.10
release/v1.9
release/v1.8
v1.25.3
v1.25.2
v1.25.1
v1.25.0
v1.24.7
v1.25.0-rc0
v1.26.0-dev
v1.24.6
v1.24.5
v1.24.4
v1.24.3
v1.24.2
v1.24.1
v1.24.0
v1.23.8
v1.24.0-rc0
v1.25.0-dev
v1.23.7
v1.23.6
v1.23.5
v1.23.4
v1.23.3
v1.23.2
v1.23.1
v1.23.0
v1.23.0-rc0
v1.24.0-dev
v1.22.6
v1.22.5
v1.22.4
v1.22.3
v1.22.2
v1.22.1
v1.22.0
v1.23.0-dev
v1.22.0-rc1
v1.21.11
v1.22.0-rc0
v1.21.10
v1.21.9
v1.21.8
v1.21.7
v1.21.6
v1.21.5
v1.21.4
v1.21.3
v1.21.2
v1.20.6
v1.21.1
v1.21.0
v1.21.0-rc2
v1.21.0-rc1
v1.20.5
v1.22.0-dev
v1.21.0-rc0
v1.20.4
v1.20.3
v1.20.2
v1.20.1
v1.20.0
v1.19.4
v1.21.0-dev
v1.20.0-rc2
v1.20.0-rc1
v1.20.0-rc0
v1.19.3
v1.19.2
v1.19.1
v1.19.0
v1.19.0-rc1
v1.20.0-dev
v1.19.0-rc0
v1.18.5
v1.18.4
v1.18.3
v1.18.2
v1.18.1
v1.18.0
v1.17.4
v1.18.0-rc1
v1.19.0-dev
v1.18.0-rc0
v1.17.3
v1.17.2
v1.17.1
v1.17.0
v1.17.0-rc2
v1.16.9
v1.17.0-rc1
v1.18.0-dev
v1.16.8
v1.16.7
v1.16.6
v1.16.5
v1.16.4
v1.16.3
v1.16.2
v1.16.1
v1.16.0
v1.15.11
v1.17.0-dev
v1.16.0-rc1
v1.15.10
v1.15.9
v1.15.8
v1.15.7
v1.15.6
v1.15.5
v1.15.4
v1.15.3
v1.15.2
v1.15.1
v1.14.7
v1.15.0
v1.15.0-rc3
v1.14.6
v1.15.0-rc2
v1.14.5
v1.16.0-dev
v1.15.0-rc1
v1.14.4
v1.14.3
v1.14.2
v1.14.1
v1.14.0
v1.13.7
v1.14.0-rc2
v1.13.6
v1.13.5
v1.14.0-rc1
v1.15.0-dev
v1.13.4
v1.13.3
v1.13.2
v1.13.1
v1.13.0
v1.12.6
v1.13.0-rc2
v1.14.0-dev
v1.13.0-rc1
v1.12.5
v1.12.4
v1.12.3
v1.12.2
v1.12.1
v1.11.8
v1.12.0
v1.11.7
v1.12.0-rc2
v1.11.6
v1.12.0-rc1
v1.13.0-dev
v1.11.5
v1.11.4
v1.11.3
v1.10.6
v1.12.0-dev
v1.11.2
v1.10.5
v1.11.1
v1.10.4
v1.11.0
v1.11.0-rc2
v1.10.3
v1.11.0-rc1
v1.10.2
v1.10.1
v1.10.0
v1.9.6
v1.9.5
v1.10.0-rc2
v1.11.0-dev
v1.10.0-rc1
v1.9.4
v1.9.3
v1.9.2
v1.9.1
v1.9.0
v1.9.0-rc2
v1.10.0-dev
v1.9.0-rc1
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.8.0-rc3
v1.7.6
v1.8.0-rc2
v1.7.5
v1.8.0-rc1
v1.9.0-dev
v1.7.4
v1.7.3
v1.7.2
v1.7.1
v1.7.0
v1.7.0-rc3
v1.6.4
v1.7.0-rc2
v1.6.3
v1.7.0-rc1
v1.7.0-dev
v1.6.2
v1.6.1
v1.6.0
v1.6.0-rc2
v1.5.3
v1.6.0-rc1
v1.6.0-dev
v1.5.2
v1.5.1
v1.5.0
v1.5.0-rc2
v1.5.0-rc1
v1.5.0-dev
v1.4.3
v1.4.2
v1.4.1
v1.4.0
v1.4.0-rc3
v1.4.0-rc2
v1.3.3
v1.4.0-rc1
v1.3.2
v1.3.1
v1.3.0
v1.3.0-rc2
v1.3.0-rc1
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.2.0-rc3
v1.2.0-rc2
v1.1.4
v1.2.0-rc1
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.2
v1.0.1
v1.0.0
v0.9.99
Labels
Clear labels
$20
$250
$50
$500
backport/done
💎 Bounty
docs-update-needed
good first issue
hacktoberfest
issue/bounty
issue/confirmed
issue/critical
issue/duplicate
issue/needs-feedback
issue/not-a-bug
issue/regression
issue/stale
issue/workaround
lgtm/need 2
modifies/api
modifies/translation
outdated/backport/v1.18
outdated/theme/markdown
outdated/theme/timetracker
performance/bigrepo
performance/cpu
performance/memory
performance/speed
pr/breaking
proposal/accepted
proposal/rejected
pr/wip
pull-request
reviewed/wontfix
💰 Rewarded
skip-changelog
status/blocked
topic/accessibility
topic/api
topic/authentication
topic/build
topic/code-linting
topic/commit-signing
topic/content-rendering
topic/deployment
topic/distribution
topic/federation
topic/gitea-actions
topic/issues
topic/lfs
topic/mobile
topic/moderation
topic/packages
topic/pr
topic/projects
topic/repo
topic/repo-migration
topic/security
topic/theme
topic/ui
topic/ui-interaction
topic/ux
topic/webhooks
topic/wiki
type/bug
type/deprecation
type/docs
type/enhancement
type/feature
type/miscellaneous
type/proposal
type/question
type/refactoring
type/summary
type/testing
type/upstream
Mirrored from GitHub Pull Request
No Label
type/bug
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/gitea#12557
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @cboylan on GitHub (Feb 28, 2024).
Description
We have at least one repo that we can no longer view in gitea after the upgrade to 1.21 from 1.20. The repo in question has branches
stable/kiloandstable/Kilo. Loading the top level repo page for this repo returns a 500 error. Gitea records this in the logs:This
Error 1062is coming from MariaDB because it is trying to add non unique entries to the database. This appears to arise from case insensitive branch names in the database but case sensitive names in git (kilovsKilo). Gitea even comments that this is an issue here: https://github.com/go-gitea/gitea/blob/v1.21.7/models/git/branch.go#L106.The underlying problem likely started with
6e19484f4dwhich is why this was working until semi recently. However, since87db4a47c8this may also be a problem for new pushes to gitea being rejected in addition to creating problems for existing repos that may already be in this state.It would be nice if this could be corrected since this repo was functional in this state prior to these updates (this is a regression). Additionally gitea shouldn't reject valid git pushes or error when loading content from valid git repos. It should be possible to make this table column case sensitive and match the git behavior.
Note: I am not trying to reproduce this behavior on the gitea demo site as I suspect it will prevent the new branches from being created in the first place.
Gitea Version
1.21.7
Can you reproduce the bug on the Gitea demo site?
No
Log Gist
No response
Screenshots
No response
Git Version
2.39.2-1.1 from Debian Bookworm
Operating System
Debian Bookworm
How are you running Gitea?
We build our own container images based on Debian Bookworm and build gitea from scratch using the v1.21.7 tag. We then run this gitea container using docker-compose.
Database
MySQL/MariaDB
@delvh commented on GitHub (Feb 28, 2024):
Please switch your DB collation to a case-sensitive one.
I think Gitea 1.22+ will automatically do it or inform you that it is necessary, but the case insensitivity is the cause of your problem.
@cboylan commented on GitHub (Feb 28, 2024):
Shouldn't the database schema in gitea enforce this for fields that require case sensitive collation? I guess you are saying that this may be coming in 1.22? I know that we can change it ourselves. The problem would still exist for anyone else though.
@delvh commented on GitHub (Feb 28, 2024):
Ah, the PR I had in mind was https://github.com/go-gitea/gitea/pull/28662.
So yes, it's only a
hey, your instance might breakwarning.The problem is, Gitea is mainly written for case-sensitive DBs, but MySQL is also somehow supported.
The easiest way to support it is by requiring a case-sensitive DB.
@delvh commented on GitHub (Feb 28, 2024):
Regarding how to fix it:
The 1.22+ doctor should be automatically able to convert the schema, so run
gitea doctor convertto fix the problem.@cboylan commented on GitHub (Feb 28, 2024):
Ya reading this PR it seems to only take action on gitea startup if the database tables haven't been created yet. Makes this statement
When Gitea starts, it will try to find a better collation (`utf8mb4_0900_as_cs` or `uca1400_as_cs`) and alter the database if it is possible.ambiguous or misleading.It is possible to make mysql and mariadb case sensitive.
Looking at our database and tables it appears that the database default character set is
latin1and default collation islatin1_swedish_ci; however,SHOW FULL COLUMNSindicates thatvarchar(255)andtextcolumn types areutf8orutf8mb4character sets and collations in tables likecommentandbranch. This implies to me that gitea is enforcingutf8at least somewhere (though maybe only 3 byteutf8in some cases). I think it should be possible to change all (since you indicate gitea expects a fully case sensitive db) of these columns to case sensitive collations automatically? Changing the character set is a potentially error prone/lossy conversion and probably shouldn't be done automatically, but I think collations don't have this problem? I am not positive of this. Side note automatic conversion fromutf8mb3toutf8mb4should not be lossy or error prone asutf8mb4is a strict superset ofutf8mb3. But there may still be problems doing that conversion automatically due to the time it may take if the db contents are large.One thing that makes me hesitate doing this by hand is that #28662 seems to use some heuristic for determining the best collation. Would be best to apply that same process automatically if possible. Additionally, the override of
latin1database defaults implies gitea is doing something to chooseutf8here. Will those overrides properly select case sensitive collations for new tables or columns going forward? If not, then manually modifying the database is going to be a constant battle.#28662 makes no mention of mysql/mariadb being unsupported. In fact the db preparation document says that mysql is one of the most used databases. It would be good to consider communicating database limitations like this more directly.
Finally if we do end up taking manual intervention is this the sort of modification you would expect for
utf8(mb3|mb4)columns:@cboylan commented on GitHub (Feb 28, 2024):
Reading #28662 more closely I think what we will likely end up doing is running the
gitea doctor convertcommand during/after our upgrade. This should set the default on the database and convert existing table columns to the appropriate 4 byte utf8 char set as well as a case sensitive collation.My main concern at this point is if new tables (like the new branch table) or columns will end up getting correctly created because gitea does seem to override database defaults based on what I can see in our current db content.