You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gitea/models
sillyguodong 3dc2724d36
Fix cannot reopen after pushing commits to a closed PR (#23189) (#23322)
Backport: #23189
Close: #22784

1. On GH, we can reopen a PR which was closed before after pushing
commits. After reopening PR, we can see the commits that were pushed
after closing PR in the time line. So the case of
[issue](https://github.com/go-gitea/gitea/issues/22784) is a bug which
needs to be fixed.

2. After closing a PR and pushing commits, `headBranchSha` is not equal
to `sha`(which is the last commit ID string of reference). If the
judgement exists, the button of reopen will not display. So, skip the
judgement if the status of PR is closed.


![image](https://user-images.githubusercontent.com/33891828/222037529-651fccf9-0bba-433e-b2f0-79c17e0cc812.png)

3. Even if PR is already close, we should still insert comment record
into DB when we push commits.
So we should still call  function `CreatePushPullComment()`.


067b0c2664/services/pull/pull.go (L260-L282)
So, I add a switch(`includeClosed`) to the
`GetUnmergedPullRequestsByHeadInfo` func to control whether the status
of PR must be open. In this case, by setting `includeClosed` to `true`,
we can query the closed PR.


![image](https://user-images.githubusercontent.com/33891828/222621045-bb80987c-10c5-4eac-aa0c-1fb9c6aefb51.png)

4. In the loop of comments, I use the`latestCloseCommentID` variable to
record the last occurrence of the close comment.
In the go template, if the status of PR is closed, the comments whose
type is `CommentTypePullRequestPush(29)` after `latestCloseCommentID`
won't be rendered.


![image](https://user-images.githubusercontent.com/33891828/222058913-c91cf3e3-819b-40c5-8015-654b31eeccff.png)
e.g.
1). The initial status of the PR is opened.


![image](https://user-images.githubusercontent.com/33891828/222453617-33c5093e-f712-4cd6-8489-9f87e2075869.png)
2). Then I click the button of `Close`. PR is closed now.


![image](https://user-images.githubusercontent.com/33891828/222453694-25c588a9-c121-4897-9ae5-0b13cf33d20b.png)
3). I try to push a commit to this PR, even though its current status is
closed.


![image](https://user-images.githubusercontent.com/33891828/222453916-361678fb-7321-410d-9e37-5a26e8095638.png)
But in comments list, this commit do not display.This is as expected :)


![image](https://user-images.githubusercontent.com/33891828/222454169-7617a791-78d2-404e-be5e-77d555f93313.png)
4). Click the `Reopen` button, the commit which is pushed after closing
PR display now.


![image](https://user-images.githubusercontent.com/33891828/222454533-897893b6-b96e-4701-b5cb-b1800f382b8f.png)
2 years ago
..
activities Don't return duplicated users who can create org repo (#22560) (#22562) 2 years ago
admin Make every not exist error unwrappable to a fs.ErrNotExist (#20891) 2 years ago
asymkey Fix key signature error page (#22229) (#22230) 2 years ago
auth Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2 years ago
avatars Fix get system setting bug when enabled redis cache (#22298) 2 years ago
db some refactor about code comments(#20821) (#22707) 2 years ago
fixtures Use beforeCommit instead of baseCommit (#22949) (#22996) 2 years ago
foreignreference Make every not exist error unwrappable to a fs.ErrNotExist (#20891) 2 years ago
git Use complete SHA to create and query commit status (#22244) (#22257) 2 years ago
issues Fix cannot reopen after pushing commits to a closed PR (#23189) (#23322) 2 years ago
migrations Init git module before database migration (#21764) (#21765) 2 years ago
organization Don't return duplicated users who can create org repo (#22560) (#22562) 2 years ago
packages Fix container blob mount (#22226) (#22476) 2 years ago
perm Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2 years ago
project Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2 years ago
pull Make every not exist error unwrappable to a fs.ErrNotExist (#20891) 2 years ago
repo Fix error when calculate the repository size (#22392) (#22474) 2 years ago
system Set disable_gravatar/enable_federated_avatar when offline mode is true (#22479) (#22496) 2 years ago
unit Add more linters to improve code readability (#19989) 3 years ago
unittest Add system setting table with cache and also add cache supports for user setting (#18058) 2 years ago
user Provide the ability to set password hash algorithm parameters (#22942) (#22943) 2 years ago
webhook Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2 years ago
error.go Make every not exist error unwrappable to a fs.ErrNotExist (#20891) 2 years ago
fixture_generation.go Move access and repo permission to models/perm/access (#19350) 3 years ago
fixture_test.go Decouple unit test code from business code (#17623) 3 years ago
main_test.go Add system setting table with cache and also add cache supports for user setting (#18058) 2 years ago
migrate.go Add generic set type (#21408) 2 years ago
migrate_test.go Move some files into models' sub packages (#20262) 3 years ago
org.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2 years ago
org_team.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2 years ago
org_team_test.go Move some files into models' sub packages (#20262) 3 years ago
org_test.go Refactor AssertExistsAndLoadBean to use generics (#20797) 3 years ago
repo.go Fix issue/PR numbers (#22037) (#22044) 2 years ago
repo_collaboration.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2 years ago
repo_collaboration_test.go Move some files into models' sub packages (#20262) 3 years ago
repo_test.go Move tests as seperate sub packages to reduce duplicated file names (#19951) 3 years ago
repo_transfer.go Replace all instances of fmt.Errorf(%v) with fmt.Errorf(%w) (#21551) 2 years ago
repo_transfer_test.go Refactor AssertExistsAndLoadBean to use generics (#20797) 3 years ago
user.go Prevent dangling user redirects (#21856) (#21858) 2 years ago