Commit Graph

174 Commits

Author SHA1 Message Date
Xavier Morel
37cf6accb7 [FIX] forwardport: FP PR getting CI'd after initial FP check
Test is probably more complex than necessary (thinking about it, the
failed staging is probably unnecessary) but that triggers the issue
and matches the original scenario.

The problem was really with new CI events being received on the last
forward-port PR of a sequence: previous PRs would have a child PR so
the check would abort, but for the last PR it would go through, fail
to find an active batch, then blow up as it tries to create a
forwardport.batch without an actual batch.

Change this to use the existence of an inactive batch not linked to a
staging as a flag that the PR has been processed and forward-ported.

Closes #218
2019-10-01 20:51:31 +02:00
Xavier Morel
63bef8b7ab [IMP] forwardport: notify when FP PR gets de-parented
If a PR is explicitly updated, it gets converted to a normal
PR[0]. Before this, users had no indication that this had happened and
might be wondering what they're supposed to do (or try to r+ via the
forwardbot, which doesn't work on a root PR).

[0] to an extent: the PR still has a source and might have children,
    in which case the followups will be created from the source &
    existing followups should be updated to match

Closes #206
2019-09-23 12:54:22 +02:00
Xavier Morel
8de6273498 [IMP] forwardport: unweird singleton conflicting commits
When creating the conflicting commit of a single commit PR, reuse the
original commit's meta-information so the developer / fixer can more
easily update it in-place.

Closes #204
2019-09-21 15:23:42 +02:00
Xavier Morel
446b11a28f [IMP] forwardport: link FP PRs to both root and source
In the case where an FP sequence is interrupted (e.g. there was a
conflict during one of the intermediate steps), followups get linked
to the original source but don't get linked to the "interruption" PR
which is a bit confusing.

Link FP PRs to both source and root if they're different.
2019-09-21 15:23:42 +02:00
Xavier Morel
6d4923928a [IMP] forwardport: improve disable fp UI
* always allow specifying the PR's own branch as a forward-port limit
  / target (even if deactivated or disabled)
* add an "ignore" alias to "up to <pr target>" for clarity
* add dedicated feedback when deactivating forward-port of a PR

Fixes #191
2019-09-21 15:23:42 +02:00
Xavier Morel
66d65ba550 [IMP] runbot_merge, forwardport: variable-user feedback
Having all the feedback be sent by the mergebot user (github_token) is
confusing. Add a way to specify which field of project should be used to
source the token used when sending feedback.

Fixes #190
2019-09-21 15:23:42 +02:00
Xavier Morel
e345d4d0d0 [FIX] forwardport: breakage in previous commit
leftover unnecessary change in
52699d901a broke one of the tests
2019-09-18 11:48:01 +02:00
Xavier Morel
52699d901a [IMP] forwardport: ping on CI failure
It's especially important as users / assignees don't get
pinged *during* the forwardport process.

closes #203
2019-09-18 08:32:38 +02:00
Xavier Morel
ee8f81be2a [CHG] forwardport: automatically delegate original PR author on FP PRs
This way the original author can r+ the forward ports if they succeed
(and probably requires no attention).

Closes #195
2019-09-17 14:43:21 +02:00
Xavier Morel
bf1d6c510d [CHG] forwardport: let PR author set the FP limit
Closes #200
2019-09-16 15:07:40 +02:00
Xavier Morel
a1a7d65ebe [IMP] forwardport: move working copy to the cache dir
Working copies were created in tempdir under the assumption that
they're, well, temporary.

However after thinking about it more there are two issues with this:

* tempdirs might not be in the same FS as the cache dir, meaning
  meaning `git clone` can't hardlink the repo objects and has to
  copy them
* tempdirs are often on RAM-backed tmpfs, which is not great when we're
  filling them with multiple GB worth of git repository...
2019-09-16 15:07:40 +02:00
Xavier Morel
f8da17994a [FIX] forwardport: not being properly notified on last FP of a seq
If the default limit of a forward-port sequence is not a valid
target (either disabled or not actually forward-ported to), the last
effective forward port in a sequence will be commented on as any
intermediate PR rather than get a proper ping and r+ instructions.

Also remove a bunch of leftover prints in the tests.

Fixes #192
2019-09-16 15:07:40 +02:00
Xavier Morel
8976f9e310 [FIX] forwardport: attempt no renamelimit & filter out messages
* a high renamelimit increases the cherrypick runtime and can
  apparently fail for reasons other than actual conflicts (cf
  odoo/odoo#36893) so first attempt to cherrypick with the default
  renamelimit, and fallback to renamelimit=0 if that fails
* in that case, filter out the spam of "progress" messages about
  inexact rename detection as it's not really useful. There seems to
  be no built-in way to suppress these.

Closes #196
2019-09-16 15:05:42 +02:00
Xavier Morel
0a64699070 [FIX] forwardport: cached repo setup
Turns out bare repositories (unlike normal ones) don't have any
refspecs by default. So adding the PR refspec would... replace the
default behaviour (apparently?) and the base branches would never get
fetched at all.

--mirror looks to be an other option as it has a default refspec but
it's a bit of an odd duck: it has pull requests in refs/pull but not
all of them? And open / closed doesn't seem to be a factor.
2019-09-12 15:03:45 +02:00
Xavier Morel
60f4db8687 [FIX] forwardport: forgot token when getting PR commits
So would break any time it needed to fetch the commits of a PR in a
private repo.
2019-09-12 14:35:56 +02:00
Xavier Morel
426bc69ea1 [FIX] forwardport: ask github what the PR's commits are
Attempts to use rev-list seem to work locally but they fail *a lot*
when live. The previous attempt to fix it in
0f4c22490c made things worse rather than
better once deployed.

Give up on that (at least for now?), and just ask github what the PR's
commits are then cherrypick exactly that.
2019-09-12 11:58:10 +02:00
Martin Trigaux
48c8e53df2 [FIX] forwardport: clarify forward port message
The ping message was not clear
- don't know if anything is needed from the author
- don't know if the last step in the chain

Ping the authors only when something needs to be done (error or last
step).

Do not ping non-reviewers as they will not have the rights to r+ or
modify the PR anyway

Closes #192
2019-09-12 09:05:49 +02:00
Xavier Morel
0f4c22490c [IMP] forwardport: refs
There's an issue of too many commits being selected for
cherry-picking. It still isn't quite clear, but the forward ports to
11.0 systematically seem to get everything from
5045b5f4c346e60c9b127403ef1fde453d49396a to the PR head, and that
commit was one of the first to land after the last merge-based forward
port.

So the commits selection seems to behave as if the commits range was
`..origin/pull/36692` rather than the `origin/10.0..origin/pull/36692`
which is passed to rev-list. This might be an issue of concurrent
access / update of the refs (though I can't reproduce it locally,
missing refs generate an error).

This change attempts to "pin" the local branch in the working copy
rather than go and get it from the repo. It's unclear that this will
change / fix anything, but it might just work.

Also stop creating shared clones, that seems like an unnecessary
risk (and might be the actual source of the issue).
2019-09-12 09:05:49 +02:00
Xavier Morel
a69ed7996a [FIX] forwardport: change method for conflicting working copy
The original method was to `git diff | git apply` in order to get a
complete overview of conflicts generated by the forward port (if
any).

However this turns out to have a huge issue in the presence of renamed
or removed files: in that case `git apply` will simply not do
anything, and fail with a completely clean working copy. Which is very
much undesirable.

-> alternative method, squash the PR to a single commit then
cherry-pick that single commit, this should provide us with proper
conflicts & their markers.

Also add tests for conflicts due to deleted files...
2019-09-12 09:05:49 +02:00
Xavier Morel
0e3d873f0f [IMP] forwardport: logging & rename during cherrypick
* add slightly better logging to the cherrypick process (init)
* cherrypick with an infinite renamelimit, seems fine according to
  linus[0] and significantly reduces "unsuccessful" forward ports

[0] http://git.661346.n2.nabble.com/Merging-limitations-after-directory-renames-interesting-test-repo-td6041103.html#a6041833
2019-09-12 09:05:49 +02:00
Xavier Morel
4ce4a3bda7 [FIX] forwardport: disable creation of draft PRs
That was only indicative and it doesn't work on private repos.
2019-09-12 09:05:49 +02:00
Xavier Morel
4fcebed563 [FIX] forwardport: PR message
* avoid losing original PR message
* add PR source to description
2019-09-10 09:54:25 +02:00
Xavier Morel
79777662df [FIX] forwardport: clone op and add logging 2019-09-10 09:28:30 +02:00
Xavier Morel
f671dcc828 [ADD] forwardbot
* Cherrypicking is handrolled because there seems to be no easy way to
  programmatically edit commit messages during the cherrypicking
  sequence: `-n` basically squashes all commits and `-e` invokes a
  subprocess. `-e` with `VISUAL=false` kinda sorta works (in that it
  interrupts the process before each commit), however there doesn't
  seem to be clean status codes so it's difficult to know if the
  cherrypick failed or if it's just waiting for a commit of this step.

  Instead, cherrypick commits individually then edit / rewrite their
  commit messages:

  * add a reference to the original commit
  * convert signed-off-by to something else as the original commit was
    signed off but not necessarily this one

* Can't assign users when creating PRs: only repository collaborators
  or people who commented on the issue / PR (which we're in the
  process of creating) can be assigned.

  PR authors are as likely to be collaborators as not, and we can have
  non-collaborator reviewers. So pinging via a regular comment seems
  less fraught as a way to notify users.
2019-09-05 10:00:07 +02:00