]> source.dussan.org Git - gitea.git/commitdiff
Ensure that git repository is closed before transfer (#18049)
authorzeripath <art27@cantab.net>
Tue, 21 Dec 2021 02:01:58 +0000 (02:01 +0000)
committerGitHub <noreply@github.com>
Tue, 21 Dec 2021 02:01:58 +0000 (10:01 +0800)
Repository Transfer requires that the repository directory is renamed - which
is not possible on Windows if the git repository is open.

Fix #17885

Signed-off-by: Andrew Thornton <art27@cantab.net>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
routers/api/v1/repo/transfer.go
routers/web/repo/repo.go

index abaed4d5870763166a7287e489ce6606b56a7c3d..dd7730b42c86f9069842d1e31dca98693762f3d8 100644 (file)
@@ -98,6 +98,11 @@ func Transfer(ctx *context.APIContext) {
                }
        }
 
+       if ctx.Repo.GitRepo != nil {
+               ctx.Repo.GitRepo.Close()
+               ctx.Repo.GitRepo = nil
+       }
+
        if err := repo_service.StartRepositoryTransfer(ctx.User, newOwner, ctx.Repo.Repository, teams); err != nil {
                if models.IsErrRepoTransferInProgress(err) {
                        ctx.Error(http.StatusConflict, "CreatePendingRepositoryTransfer", err)
index a1e652f94cc9aac8588525ec0056de00675fcf86..9a36e6ee1db08ae9a6c85c9175e45dea08d954a7 100644 (file)
@@ -323,6 +323,11 @@ func acceptOrRejectRepoTransfer(ctx *context.Context, accept bool) error {
        }
 
        if accept {
+               if ctx.Repo.GitRepo != nil {
+                       ctx.Repo.GitRepo.Close()
+                       ctx.Repo.GitRepo = nil
+               }
+
                if err := repo_service.TransferOwnership(repoTransfer.Doer, repoTransfer.Recipient, ctx.Repo.Repository, repoTransfer.Teams); err != nil {
                        return err
                }