Skip to content

Repo page returns 500 error when repo has multiple branch names that only differ in case #29477

Closed
@cboylan

Description

@cboylan

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/kilo and stable/Kilo. Loading the top level repo page for this repo returns a 500 error. Gitea records this in the logs:

2024/02/28 17:23:30 ...ules/context/repo.go:682:RepoAssignment() [E] SyncRepoBranches: Error 1062 (23000): Duplicate entry '1057-Kilo' for key 'UQE_branch_s'
#011/go/src/code.gitea.io/gitea/modules/context/repo.go:682 (0x1bb6834)
#011/usr/local/go/src/reflect/value.go:596 (0x4f0aa6)
#011/usr/local/go/src/reflect/value.go:380 (0x4efb78)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:166 (0x1a97ddb)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:176 (0x1a97e77)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/pkg/mod/github.com/go-chi/chi/[email protected]/chain.go:31 (0x1a8edc5)
#011/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:444 (0x1a91d13)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:176 (0x1a97e77)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:176 (0x1a97e77)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:176 (0x1a97e77)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/pkg/mod/github.com/go-chi/chi/[email protected]/middleware/get_head.go:37 (0x24c02db)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:145 (0x1a98083)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:176 (0x1a97e77)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/context/context.go:222 (0x1bab94e)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:145 (0x1a98083)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/pkg/mod/gitea.com/go-chi/[email protected]/session.go:257 (0x1b049b5)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:145 (0x1a98083)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:73 (0x1a8f9b5)
#011/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:316 (0x1a9129a)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:444 (0x1a91d13)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:73 (0x1a8f9b5)
#011/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:316 (0x1a9129a)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:444 (0x1a91d13)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/context/access_log.go:73 (0x1ba4421)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:145 (0x1a98083)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/routing/logger_manager.go:122 (0x1a8e5f8)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:145 (0x1a98083)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/pkg/mod/github.com/chi-middleware/[email protected]/middleware.go:37 (0x240b2f3)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:145 (0x1a98083)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/routers/common/middleware.go:45 (0x240c512)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:145 (0x1a98083)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/routers/common/middleware.go:37 (0x240c095)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:145 (0x1a98083)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/routers/common/middleware.go:99 (0x240b655)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/src/code.gitea.io/gitea/modules/web/handler.go:145 (0x1a98083)
#011/usr/local/go/src/net/http/server.go:2136 (0x971ca8)
#011/go/pkg/mod/github.com/go-chi/chi/[email protected]/mux.go:90 (0x1a8f974)
#011/go/src/code.gitea.io/gitea/modules/web/route.go:163 (0x1a994a7)
#011/usr/local/go/src/net/http/server.go:2938 (0x97498d)
#011/usr/local/go/src/net/http/server.go:2009 (0x970873)
#011/usr/local/go/src/runtime/asm_amd64.s:1650 (0x474200)
#011
2024/02/28 17:23:30 ...eb/routing/logger.go:102:func1() [I] router: completed GET /x/fuel-plugin-onos for 127.0.0.1:59198, 500 Internal Server Error in 71.0ms @ context/repo.go:425(context.RepoAssignment)

This Error 1062 is 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 (kilo vs Kilo). 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 6e19484 which is why this was working until semi recently. However, since 87db4a4 this 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions