Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Externally merged commits are not marked as merged #31433

Open
AdamMajer opened this issue Jun 20, 2024 · 6 comments
Open

Externally merged commits are not marked as merged #31433

AdamMajer opened this issue Jun 20, 2024 · 6 comments
Labels

Comments

@AdamMajer
Copy link
Contributor

Description

  1. create repo
  2. create fork
  3. do channge and create PR to repo
  4. merge manually with git merge --ff-only ... as per instructions
  5. PR not marked as merged, just says the commit already there and nothing to do.

Gitea Version

1.22 , or demo site

Can you reproduce the bug on the Gitea demo site?

Yes

Log Gist

No response

Screenshots

from: https://demo.gitea.com/gnuman/test/pulls/1

image

THEN I added another commit, and it got added to the PR (I guess since it wasn't closed) and the instructions are different from above. Maybe above it reverted to default ones? But this could be another issue not related to this one.

image

Git Version

No response

Operating System

No response

How are you running Gitea?

demo site

Database

None

@wxiaoguang
Copy link
Contributor

wxiaoguang commented Jun 20, 2024

Workaround: you could enable "Manually Merge" in the repo settings, and manually merge it.


ps: not sure whether it is a regression, I never used that workflow 🤔 is there any further information to confirm whether it is a regression?

@AdamMajer
Copy link
Contributor Author

Manual merge is a workaround, I think.

If I'm following the command-line instructions, gitea should be smart enough to notice that the commits are there in the branch already, and close it as merged. The logic is simply, on push to target branch, if "all commits exist in the target branch, so it's merged, mark as done".

Is there a common use-case when this is not desired?

@AdamMajer
Copy link
Contributor Author

You are correct, maybe this is not a regression. It just maybe never worked.

@delvh
Copy link
Member

delvh commented Jun 20, 2024

Is there a common use-case when this is not desired?

performance. And no one implemented it so far.
But I do think it is non-trivial to find all PRs that can be closed once you push:
You need to find all PRs that target the branch you push to.
On top of that, you then need to ensure that all commits are contained within your branch - the only way to do this reliably is by asking Git on every matching PR individually if there are diverging commits.
You cannot just do a DB lookup as then the case you merged the branch locally and added a commit on top before pushing is not covered (although that is a rare edge case)

The moment you have a repo with lots of open PRs, I can predict that pushing will take forever, especially if your hardware isn't the strongest.
However, the performance problem could be solved by adding a instance-wide setting that toggles this behavior.

@AdamMajer
Copy link
Contributor Author

Well, you only need to check the if the commit id of PR head is in the target branch, nothing else.. If that is the case, then it's merged. IFF the PR head commit id is in the branch head, then the PR is FF merged.

You cannot just do a DB lookup as then the case you merged the branch locally and added a commit on top before pushing is not covered (although that is a rare edge case)

As long as the commit id from PR head is there, it has to be merged. Other things on-top, well, maybe extra commits? But that is a different discussion, I think.

What has to be done is, for all pushes to target repo, check all open PR if the commit id is in the repo, if yes, mark as merged. Nothing more to do.

If no one does this, I'll try to get to it next week.

@delvh
Copy link
Member

delvh commented Jun 21, 2024

Well, you only need to check the if the commit id of PR head is in the target branch, nothing else.

Yes, but you first need to find all applicable PRs and do this git call for all of them separately, so that point still stands.
But sure, go ahead, I'll review your PR dutifully once it exists.
(If I forget to, ping me. Unfortunately, my TODO list is so long that I frequently forget what I wanted to do)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants