Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit a20ccec

Browse files
authoredOct 14, 2021
Ensure that git daemon export ok is created for mirrors (#17243) (#17306)
Backport #17243 There is an issue with #16508 where it appears that create repo requires that the repo does not exist. This causes #17241 where an error is reported because of this. This PR fixes this and also runs update-server-info for mirrors and generated repos. Fix #17241 Signed-off-by: Andrew Thornton <art27@cantab.net>
1 parent 9c2b7a1 commit a20ccec

File tree

6 files changed

+79
-28
lines changed

6 files changed

+79
-28
lines changed
 

‎models/repo.go

+41-26
Original file line numberDiff line numberDiff line change
@@ -1152,16 +1152,6 @@ func CreateRepository(ctx DBContext, doer, u *User, repo *Repository, overwriteO
11521152
return fmt.Errorf("recalculateAccesses: %v", err)
11531153
}
11541154

1155-
if u.Visibility == api.VisibleTypePublic && !repo.IsPrivate {
1156-
// Create/Remove git-daemon-export-ok for git-daemon...
1157-
daemonExportFile := path.Join(repo.RepoPath(), `git-daemon-export-ok`)
1158-
if f, err := os.Create(daemonExportFile); err != nil {
1159-
log.Error("Failed to create %s: %v", daemonExportFile, err)
1160-
} else {
1161-
f.Close()
1162-
}
1163-
}
1164-
11651155
if setting.Service.AutoWatchNewRepos {
11661156
if err = watchRepo(ctx.e, doer.ID, repo.ID, true); err != nil {
11671157
return fmt.Errorf("watchRepo: %v", err)
@@ -1175,6 +1165,46 @@ func CreateRepository(ctx DBContext, doer, u *User, repo *Repository, overwriteO
11751165
return nil
11761166
}
11771167

1168+
// CheckDaemonExportOK creates/removes git-daemon-export-ok for git-daemon...
1169+
func (repo *Repository) CheckDaemonExportOK() error {
1170+
return repo.checkDaemonExportOK(x)
1171+
}
1172+
1173+
// CheckDaemonExportOKCtx creates/removes git-daemon-export-ok for git-daemon...
1174+
func (repo *Repository) CheckDaemonExportOKCtx(ctx DBContext) error {
1175+
return repo.checkDaemonExportOK(ctx.e)
1176+
}
1177+
1178+
func (repo *Repository) checkDaemonExportOK(e Engine) error {
1179+
if err := repo.getOwner(e); err != nil {
1180+
return err
1181+
}
1182+
1183+
// Create/Remove git-daemon-export-ok for git-daemon...
1184+
daemonExportFile := path.Join(repo.RepoPath(), `git-daemon-export-ok`)
1185+
1186+
isExist, err := util.IsExist(daemonExportFile)
1187+
if err != nil {
1188+
log.Error("Unable to check if %s exists. Error: %v", daemonExportFile, err)
1189+
return err
1190+
}
1191+
1192+
isPublic := !repo.IsPrivate && repo.Owner.Visibility == api.VisibleTypePublic
1193+
if !isPublic && isExist {
1194+
if err = util.Remove(daemonExportFile); err != nil {
1195+
log.Error("Failed to remove %s: %v", daemonExportFile, err)
1196+
}
1197+
} else if isPublic && !isExist {
1198+
if f, err := os.Create(daemonExportFile); err != nil {
1199+
log.Error("Failed to create %s: %v", daemonExportFile, err)
1200+
} else {
1201+
f.Close()
1202+
}
1203+
}
1204+
1205+
return nil
1206+
}
1207+
11781208
func countRepositories(userID int64, private bool) int64 {
11791209
sess := x.Where("id > 0")
11801210

@@ -1324,24 +1354,9 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e
13241354
}
13251355

13261356
// Create/Remove git-daemon-export-ok for git-daemon...
1327-
daemonExportFile := path.Join(repo.RepoPath(), `git-daemon-export-ok`)
1328-
isExist, err := util.IsExist(daemonExportFile)
1329-
isPublic := !repo.IsPrivate && repo.Owner.Visibility == api.VisibleTypePublic
1330-
if err != nil {
1331-
log.Error("Unable to check if %s exists. Error: %v", daemonExportFile, err)
1357+
if err := repo.checkDaemonExportOK(e); err != nil {
13321358
return err
13331359
}
1334-
if !isPublic && isExist {
1335-
if err = util.Remove(daemonExportFile); err != nil {
1336-
log.Error("Failed to remove %s: %v", daemonExportFile, err)
1337-
}
1338-
} else if isPublic && !isExist {
1339-
if f, err := os.Create(daemonExportFile); err != nil {
1340-
log.Error("Failed to create %s: %v", daemonExportFile, err)
1341-
} else {
1342-
f.Close()
1343-
}
1344-
}
13451360

13461361
forkRepos, err := getRepositoriesByForkID(e, repo.ID)
13471362
if err != nil {

‎modules/repository/adopt.go

+3
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ func AdoptRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mode
6666
if err := adoptRepository(ctx, repoPath, doer, repo, opts); err != nil {
6767
return fmt.Errorf("createDelegateHooks: %v", err)
6868
}
69+
if err := repo.CheckDaemonExportOKCtx(ctx); err != nil {
70+
return fmt.Errorf("checkDaemonExportOK: %v", err)
71+
}
6972

7073
// Initialize Issue Labels if selected
7174
if len(opts.IssueLabels) > 0 {

‎modules/repository/create.go

+4
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ func CreateRepository(doer, u *models.User, opts models.CreateRepoOptions) (*mod
103103
}
104104
}
105105

106+
if err := repo.CheckDaemonExportOKCtx(ctx); err != nil {
107+
return fmt.Errorf("checkDaemonExportOK: %v", err)
108+
}
109+
106110
if stdout, err := git.NewCommand("update-server-info").
107111
SetDescription(fmt.Sprintf("CreateRepository(git update-server-info): %s", repoPath)).
108112
RunInDir(repoPath); err != nil {

‎modules/repository/fork.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,17 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
9595
needsRollback = true
9696

9797
repoPath := models.RepoPath(owner.Name, repo.Name)
98-
if stdout, err := git.NewCommand(
99-
"clone", "--bare", oldRepoPath, repoPath).
98+
if stdout, err := git.NewCommand("clone", "--bare", oldRepoPath, repoPath).
10099
SetDescription(fmt.Sprintf("ForkRepository(git clone): %s to %s", oldRepo.FullName(), repo.FullName())).
101100
RunInDirTimeout(10*time.Minute, ""); err != nil {
102101
log.Error("Fork Repository (git clone) Failed for %v (from %v):\nStdout: %s\nError: %v", repo, oldRepo, stdout, err)
103102
return fmt.Errorf("git clone: %v", err)
104103
}
105104

105+
if err := repo.CheckDaemonExportOKCtx(ctx); err != nil {
106+
return fmt.Errorf("checkDaemonExportOK: %v", err)
107+
}
108+
106109
if stdout, err := git.NewCommand("update-server-info").
107110
SetDescription(fmt.Sprintf("ForkRepository(git update-server-info): %s", repo.FullName())).
108111
RunInDir(repoPath); err != nil {

‎modules/repository/generate.go

+11
Original file line numberDiff line numberDiff line change
@@ -275,5 +275,16 @@ func GenerateRepository(ctx models.DBContext, doer, owner *models.User, template
275275
return generateRepo, err
276276
}
277277

278+
if err = generateRepo.CheckDaemonExportOKCtx(ctx); err != nil {
279+
return generateRepo, fmt.Errorf("checkDaemonExportOK: %v", err)
280+
}
281+
282+
if stdout, err := git.NewCommand("update-server-info").
283+
SetDescription(fmt.Sprintf("GenerateRepository(git update-server-info): %s", repoPath)).
284+
RunInDir(repoPath); err != nil {
285+
log.Error("GenerateRepository(git update-server-info) in %v: Stdout: %s\nError: %v", generateRepo, stdout, err)
286+
return generateRepo, fmt.Errorf("error in GenerateRepository(git update-server-info): %v", err)
287+
}
288+
278289
return generateRepo, nil
279290
}

‎modules/repository/repo.go

+15
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,21 @@ func MigrateRepositoryGitData(ctx context.Context, u *models.User, repo *models.
9595
}
9696
}
9797

98+
if repo.OwnerID == u.ID {
99+
repo.Owner = u
100+
}
101+
102+
if err = repo.CheckDaemonExportOK(); err != nil {
103+
return repo, fmt.Errorf("checkDaemonExportOK: %v", err)
104+
}
105+
106+
if stdout, err := git.NewCommandContext(ctx, "update-server-info").
107+
SetDescription(fmt.Sprintf("MigrateRepositoryGitData(git update-server-info): %s", repoPath)).
108+
RunInDir(repoPath); err != nil {
109+
log.Error("MigrateRepositoryGitData(git update-server-info) in %v: Stdout: %s\nError: %v", repo, stdout, err)
110+
return repo, fmt.Errorf("error in MigrateRepositoryGitData(git update-server-info): %v", err)
111+
}
112+
98113
gitRepo, err := git.OpenRepository(repoPath)
99114
if err != nil {
100115
return repo, fmt.Errorf("OpenRepository: %v", err)

0 commit comments

Comments
 (0)
Please sign in to comment.