]> source.dussan.org Git - gitea.git/commitdiff
Fix dump and restore respository (#16698)
authorLunny Xiao <xiaolunwen@gmail.com>
Tue, 31 Aug 2021 01:18:15 +0000 (09:18 +0800)
committerGitHub <noreply@github.com>
Tue, 31 Aug 2021 01:18:15 +0000 (21:18 -0400)
* Fix dump and restore

* return different error message for get commit

* Fix missing delete release attachment when deleting repository

* Fix ci and add some comments

Co-authored-by: zeripath <art27@cantab.net>
models/repo.go
modules/migrations/dump.go
modules/migrations/gitea_uploader.go
modules/private/restore_repo.go
services/pull/check.go
services/release/release.go

index c3f93f35620d01ade6e0346d35533a1ea6d74ac7..94af3187891d070c73b0b8e135287fbf899d5a5e 100644 (file)
@@ -1497,6 +1497,11 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
                releaseAttachments = append(releaseAttachments, attachments[i].RelativePath())
        }
 
+       if _, err = sess.In("release_id", builder.Select("id").From("`release`").Where(builder.Eq{"`release`.repo_id": repoID})).
+               Delete(&Attachment{}); err != nil {
+               return err
+       }
+
        if _, err := sess.Exec("UPDATE `user` SET num_stars=num_stars-1 WHERE id IN (SELECT `uid` FROM `star` WHERE repo_id = ?)", repo.ID); err != nil {
                return err
        }
index 6c4cf174d4fc671913a88151a855b3110294d81f..6b995c0dea8cde04d97e0f071d8f4dd7d6469d5c 100644 (file)
@@ -11,6 +11,7 @@ import (
        "net/http"
        "net/url"
        "os"
+       "path"
        "path/filepath"
        "strconv"
        "strings"
@@ -481,7 +482,9 @@ func (g *RepositoryDumper) CreatePullRequests(prs ...*base.PullRequest) error {
                                        if err != nil {
                                                log.Error("Fetch branch from %s failed: %v", pr.Head.CloneURL, err)
                                        } else {
-                                               headBranch := filepath.Join(g.gitPath(), "refs", "heads", pr.Head.OwnerName, pr.Head.Ref)
+                                               // a new branch name with <original_owner_name/original_branchname> will be created to as new head branch
+                                               ref := path.Join(pr.Head.OwnerName, pr.Head.Ref)
+                                               headBranch := filepath.Join(g.gitPath(), "refs", "heads", ref)
                                                if err := os.MkdirAll(filepath.Dir(headBranch), os.ModePerm); err != nil {
                                                        return err
                                                }
@@ -494,10 +497,14 @@ func (g *RepositoryDumper) CreatePullRequests(prs ...*base.PullRequest) error {
                                                if err != nil {
                                                        return err
                                                }
+                                               pr.Head.Ref = ref
                                        }
                                }
                        }
                }
+               // whatever it's a forked repo PR, we have to change head info as the same as the base info
+               pr.Head.OwnerName = pr.Base.OwnerName
+               pr.Head.RepoName = pr.Base.RepoName
        }
 
        var err error
index c77ace797bc0bc6bee2c0ba4ebdf6842c2d4be60..c5eca35b2e73ebdb33b288fa20af08e9420ea2fe 100644 (file)
@@ -278,7 +278,7 @@ func (g *GiteaLocalUploader) CreateReleases(releases ...*base.Release) error {
                if !release.Draft {
                        commit, err := g.gitRepo.GetTagCommit(rel.TagName)
                        if err != nil {
-                               return fmt.Errorf("GetCommit: %v", err)
+                               return fmt.Errorf("GetTagCommit[%v]: %v", rel.TagName, err)
                        }
                        rel.NumCommits, err = commit.CommitsCount()
                        if err != nil {
index feb2e1d141a070f3e1412f92fb75ff5c17698708..b5592278ab47dd0aa0698a5627219dea32358a3a 100644 (file)
@@ -54,6 +54,7 @@ func RestoreRepo(ctx context.Context, repoDir, ownerName, repoName string, units
                if err := json.Unmarshal(body, &ret); err != nil {
                        return http.StatusInternalServerError, fmt.Sprintf("Response body Unmarshal error: %v", err.Error())
                }
+               return http.StatusInternalServerError, ret.Err
        }
 
        return http.StatusOK, fmt.Sprintf("Restore repo %s/%s successfully", ownerName, repoName)
index 9db1654cfbc055d18aa4e15c89878bc41fd72f28..1e757ef28b229cb3c3a820e611794d7e0915d65e 100644 (file)
@@ -126,7 +126,7 @@ func getMergeCommit(pr *models.PullRequest) (*git.Commit, error) {
 
        commit, err := gitRepo.GetCommit(mergeCommit[:40])
        if err != nil {
-               return nil, fmt.Errorf("GetCommit: %v", err)
+               return nil, fmt.Errorf("GetMergeCommit[%v]: %v", mergeCommit[:40], err)
        }
 
        return commit, nil
index 6f5aa02c85d88c664ac2e6724168ce9c8e2de96e..4a55f73a3a5c2993d5e3729028916857f3106b00 100644 (file)
@@ -44,7 +44,7 @@ func createTag(gitRepo *git.Repository, rel *models.Release, msg string) (bool,
 
                        commit, err := gitRepo.GetCommit(rel.Target)
                        if err != nil {
-                               return false, fmt.Errorf("GetCommit: %v", err)
+                               return false, fmt.Errorf("createTag::GetCommit[%v]: %v", rel.Target, err)
                        }
 
                        // Trim '--' prefix to prevent command line argument vulnerability.