diff options
author | Unknwon <u@gogs.io> | 2015-11-03 17:25:39 -0500 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2015-11-03 17:25:39 -0500 |
commit | 25ec20d5251511ebd0b9e6b963e189b860c39704 (patch) | |
tree | 7c771f0a8403fd62811fdadcbe8d118d89edec20 /models | |
parent | 8e262f3ec4c961487fe56b6b64573a2f9b928c70 (diff) | |
download | gitea-25ec20d5251511ebd0b9e6b963e189b860c39704.tar.gz gitea-25ec20d5251511ebd0b9e6b963e189b860c39704.zip |
#1838 update merge base before generate new patch
Diffstat (limited to 'models')
-rw-r--r-- | models/git_diff.go | 4 | ||||
-rw-r--r-- | models/pull.go | 24 |
2 files changed, 22 insertions, 6 deletions
diff --git a/models/git_diff.go b/models/git_diff.go index 3bf938ae40..c1568a5759 100644 --- a/models/git_diff.go +++ b/models/git_diff.go @@ -97,7 +97,7 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff var i int for scanner.Scan() { line := scanner.Text() - // fmt.Println(i, line) + if strings.HasPrefix(line, "+++ ") || strings.HasPrefix(line, "--- ") { continue } @@ -180,8 +180,6 @@ func ParsePatch(pid int64, maxlines int, cmd *exec.Cmd, reader io.Reader) (*Diff b = b[1 : len(b)-1] } - fmt.Println(a, b) - curFile = &DiffFile{ Name: a, Index: len(diff.Files) + 1, diff --git a/models/pull.go b/models/pull.go index 0300c083d7..56af5f828d 100644 --- a/models/pull.go +++ b/models/pull.go @@ -385,16 +385,18 @@ func (pr *PullRequest) UpdateCols(cols ...string) error { var PullRequestQueue = NewUniqueQueue(setting.Repository.PullRequestQueueLength) // UpdatePatch generates and saves a new patch. -func (pr *PullRequest) UpdatePatch() error { - if err := pr.GetHeadRepo(); err != nil { +func (pr *PullRequest) UpdatePatch() (err error) { + if err = pr.GetHeadRepo(); err != nil { return fmt.Errorf("GetHeadRepo: %v", err) } else if pr.HeadRepo == nil { log.Trace("PullRequest[%d].UpdatePatch: ignored cruppted data", pr.ID) return nil } - if err := pr.GetBaseRepo(); err != nil { + if err = pr.GetBaseRepo(); err != nil { return fmt.Errorf("GetBaseRepo: %v", err) + } else if err = pr.BaseRepo.GetOwner(); err != nil { + return fmt.Errorf("GetOwner: %v", err) } headRepoPath, err := pr.HeadRepo.RepoPath() @@ -407,6 +409,22 @@ func (pr *PullRequest) UpdatePatch() error { return fmt.Errorf("OpenRepository: %v", err) } + // Add a temporary remote. + tmpRemote := com.ToStr(time.Now().UnixNano()) + if err = headGitRepo.AddRemote(tmpRemote, RepoPath(pr.BaseRepo.Owner.Name, pr.BaseRepo.Name)); err != nil { + return fmt.Errorf("AddRemote: %v", err) + } + defer func() { + headGitRepo.RemoveRemote(tmpRemote) + }() + remoteBranch := "remotes/" + tmpRemote + "/" + pr.BaseBranch + pr.MergeBase, err = headGitRepo.GetMergeBase(remoteBranch, pr.HeadBranch) + if err != nil { + return fmt.Errorf("GetMergeBase: %v", err) + } else if err = pr.Update(); err != nil { + return fmt.Errorf("Update: %v", err) + } + patch, err := headGitRepo.GetPatch(pr.MergeBase, pr.HeadBranch) if err != nil { return fmt.Errorf("GetPatch: %v", err) |