From 28e86b5558717e445fc1534a9bf594dddeb13842 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sun, 15 Aug 2021 12:06:47 +0800 Subject: [PATCH 1/4] Fix dump and restore --- modules/migrations/dump.go | 6 ++++++ modules/private/restore_repo.go | 1 + 2 files changed, 7 insertions(+) diff --git a/modules/migrations/dump.go b/modules/migrations/dump.go index 6c4cf174d4fc6..96e554171b45a 100644 --- a/modules/migrations/dump.go +++ b/modules/migrations/dump.go @@ -11,6 +11,7 @@ import ( "net/http" "net/url" "os" + "path" "path/filepath" "strconv" "strings" @@ -481,6 +482,7 @@ func (g *RepositoryDumper) CreatePullRequests(prs ...*base.PullRequest) error { if err != nil { log.Error("Fetch branch from %s failed: %v", pr.Head.CloneURL, err) } else { + ref := path.Join(pr.Head.OwnerName, pr.Head.Ref) headBranch := filepath.Join(g.gitPath(), "refs", "heads", pr.Head.OwnerName, pr.Head.Ref) if err := os.MkdirAll(filepath.Dir(headBranch), os.ModePerm); err != nil { return err @@ -494,10 +496,14 @@ func (g *RepositoryDumper) CreatePullRequests(prs ...*base.PullRequest) error { if err != nil { return err } + pr.Head.Ref = ref } } } } + // store all information into local git repository + pr.Head.OwnerName = pr.Base.OwnerName + pr.Head.RepoName = pr.Base.RepoName } var err error diff --git a/modules/private/restore_repo.go b/modules/private/restore_repo.go index feb2e1d141a07..b5592278ab47d 100644 --- a/modules/private/restore_repo.go +++ b/modules/private/restore_repo.go @@ -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) From 05e645c922691f82767b5c95876c40e5f3488cc3 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 30 Aug 2021 20:58:50 +0800 Subject: [PATCH 2/4] return different error message for get commit --- modules/migrations/gitea_uploader.go | 2 +- services/pull/check.go | 2 +- services/release/release.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/migrations/gitea_uploader.go b/modules/migrations/gitea_uploader.go index c77ace797bc0b..c5eca35b2e73e 100644 --- a/modules/migrations/gitea_uploader.go +++ b/modules/migrations/gitea_uploader.go @@ -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 { diff --git a/services/pull/check.go b/services/pull/check.go index 9db1654cfbc05..1e757ef28b229 100644 --- a/services/pull/check.go +++ b/services/pull/check.go @@ -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 diff --git a/services/release/release.go b/services/release/release.go index 6f5aa02c85d88..4a55f73a3a5c2 100644 --- a/services/release/release.go +++ b/services/release/release.go @@ -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. From c453f59fee512fc25d7a2b4521c2bed2c97ad5c5 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 30 Aug 2021 21:51:54 +0800 Subject: [PATCH 3/4] Fix missing delete release attachment when deleting repository --- models/repo.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/models/repo.go b/models/repo.go index c3f93f35620d0..4862fff89ff4a 100644 --- a/models/repo.go +++ b/models/repo.go @@ -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 } From f2c42b97701e076d1441d3c62448ce6a03081e4a Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Mon, 30 Aug 2021 23:17:47 +0800 Subject: [PATCH 4/4] Fix ci and add some comments --- models/repo.go | 2 +- modules/migrations/dump.go | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/models/repo.go b/models/repo.go index 4862fff89ff4a..94af3187891d0 100644 --- a/models/repo.go +++ b/models/repo.go @@ -1497,7 +1497,7 @@ 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})). + if _, err = sess.In("release_id", builder.Select("id").From("`release`").Where(builder.Eq{"`release`.repo_id": repoID})). Delete(&Attachment{}); err != nil { return err } diff --git a/modules/migrations/dump.go b/modules/migrations/dump.go index 96e554171b45a..6b995c0dea8cd 100644 --- a/modules/migrations/dump.go +++ b/modules/migrations/dump.go @@ -482,8 +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 { + // a new branch name with will be created to as new head branch ref := path.Join(pr.Head.OwnerName, pr.Head.Ref) - headBranch := filepath.Join(g.gitPath(), "refs", "heads", 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 } @@ -501,7 +502,7 @@ func (g *RepositoryDumper) CreatePullRequests(prs ...*base.PullRequest) error { } } } - // store all information into local git repository + // 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 }