From 82728a7cecfe4d254890545fea49d6afde4f40db Mon Sep 17 00:00:00 2001
From: Jason Song <i@wolfogre.com>
Date: Fri, 3 Feb 2023 04:48:48 +0800
Subject: [PATCH] Do not overwrite empty DefaultBranch (#22708)

Fix #21994.
And fix #19470.

While generating new repo from a template, it does something like
"commit to git repo, re-fetch repo model from DB, and update default
branch if it's empty".


https://github.com/go-gitea/gitea/blob/19d5b2f922c2defde579a935fbedb680eb8fff18/modules/repository/generate.go#L241-L253

Unfortunately, when load repo from DB, the default branch will be set to
`setting.Repository.DefaultBranch` if it's empty:


https://github.com/go-gitea/gitea/blob/19d5b2f922c2defde579a935fbedb680eb8fff18/models/repo/repo.go#L228-L233

I believe it's a very old temporary patch but has been kept for many
years, see:
[2d2d85bb](https://github.com/go-gitea/gitea/commit/2d2d85bb#diff-1851799b06733db4df3ec74385c1e8850ee5aedee70b8b55366910d22725eea8)

I know it's a risk to delete it, may lead to potential behavioral
changes, but we cannot keep the outdated `FIXME` forever. On the other
hand, an empty `DefaultBranch` does make sense: an empty repo doesn't
have one conceptually (actually, Gitea will still set it to
`setting.Repository.DefaultBranch` to make it safer).
---
 models/fixtures/repository.yml | 26 ++++++++++++++++++++++++++
 models/repo/repo.go            |  5 -----
 2 files changed, 26 insertions(+), 5 deletions(-)

diff --git a/models/fixtures/repository.yml b/models/fixtures/repository.yml
index 5d4781ad44..ef3cfbbbec 100644
--- a/models/fixtures/repository.yml
+++ b/models/fixtures/repository.yml
@@ -4,6 +4,7 @@
   owner_name: user2
   lower_name: repo1
   name: repo1
+  default_branch: master
   num_watches: 4
   num_stars: 0
   num_forks: 0
@@ -34,6 +35,7 @@
   owner_name: user2
   lower_name: repo2
   name: repo2
+  default_branch: master
   num_watches: 0
   num_stars: 1
   num_forks: 0
@@ -64,6 +66,7 @@
   owner_name: user3
   lower_name: repo3
   name: repo3
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -94,6 +97,7 @@
   owner_name: user5
   lower_name: repo4
   name: repo4
+  default_branch: master
   num_watches: 0
   num_stars: 1
   num_forks: 0
@@ -274,6 +278,7 @@
   owner_name: user12
   lower_name: repo10
   name: repo10
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 1
@@ -304,6 +309,7 @@
   owner_name: user13
   lower_name: repo11
   name: repo11
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -425,6 +431,7 @@
   owner_name: user2
   lower_name: repo15
   name: repo15
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -455,6 +462,7 @@
   owner_name: user2
   lower_name: repo16
   name: repo16
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -905,6 +913,7 @@
   owner_name: user2
   lower_name: repo20
   name: repo20
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -965,6 +974,7 @@
   owner_name: user2
   lower_name: utf8
   name: utf8
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1055,6 +1065,7 @@
   owner_name: user2
   lower_name: commits_search_test
   name: commits_search_test
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1085,6 +1096,7 @@
   owner_name: user2
   lower_name: git_hooks_test
   name: git_hooks_test
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1115,6 +1127,7 @@
   owner_name: limited_org
   lower_name: public_repo_on_limited_org
   name: public_repo_on_limited_org
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1145,6 +1158,7 @@
   owner_name: limited_org
   lower_name: private_repo_on_limited_org
   name: private_repo_on_limited_org
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1175,6 +1189,7 @@
   owner_name: privated_org
   lower_name: public_repo_on_private_org
   name: public_repo_on_private_org
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1205,6 +1220,7 @@
   owner_name: privated_org
   lower_name: private_repo_on_private_org
   name: private_repo_on_private_org
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1235,6 +1251,7 @@
   owner_name: user2
   lower_name: glob
   name: glob
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1295,6 +1312,7 @@
   owner_name: user27
   lower_name: template1
   name: template1
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1355,6 +1373,7 @@
   owner_name: org26
   lower_name: repo_external_tracker
   name: repo_external_tracker
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1385,6 +1404,7 @@
   owner_name: org26
   lower_name: repo_external_tracker_numeric
   name: repo_external_tracker_numeric
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1415,6 +1435,7 @@
   owner_name: org26
   lower_name: repo_external_tracker_alpha
   name: repo_external_tracker_alpha
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1445,6 +1466,7 @@
   owner_name: user27
   lower_name: repo49
   name: repo49
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1475,6 +1497,7 @@
   owner_name: user30
   lower_name: repo50
   name: repo50
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1505,6 +1528,7 @@
   owner_name: user30
   lower_name: repo51
   name: repo51
+  default_branch: master
   num_watches: 0
   num_stars: 0
   num_forks: 0
@@ -1565,6 +1589,7 @@
   owner_name: user30
   lower_name: renderer
   name: renderer
+  default_branch: master
   is_archived: false
   is_empty: false
   is_private: false
@@ -1592,6 +1617,7 @@
   owner_name: user2
   lower_name: lfs
   name: lfs
+  default_branch: master
   is_empty: false
   is_archived: false
   is_private: true
diff --git a/models/repo/repo.go b/models/repo/repo.go
index 831eb22dc5..06ec34ed63 100644
--- a/models/repo/repo.go
+++ b/models/repo/repo.go
@@ -227,11 +227,6 @@ func (repo *Repository) IsBroken() bool {
 
 // AfterLoad is invoked from XORM after setting the values of all fields of this object.
 func (repo *Repository) AfterLoad() {
-	// FIXME: use models migration to solve all at once.
-	if len(repo.DefaultBranch) == 0 {
-		repo.DefaultBranch = setting.Repository.DefaultBranch
-	}
-
 	repo.NumOpenIssues = repo.NumIssues - repo.NumClosedIssues
 	repo.NumOpenPulls = repo.NumPulls - repo.NumClosedPulls
 	repo.NumOpenMilestones = repo.NumMilestones - repo.NumClosedMilestones