[IMP] forwardport: mitigate cat-file not finding commit on updates

Fix #457 hopefully: I didn't manage to repro / create a test for.

It looks like in some cases during the update process the PR ref lags
behind the branch itself. This means `forwardport.updates` creates a
new commit, pushes it, then on the next iteration updates the local
cache, tries to find the commit we just pushed... and that fails.

I can only assume this is because when there's enough load on the
github side the update to the `info/refs` pseudo-file can fall
behind (it's now 4MB and holding nearly 65k refs).

So cheat: take the commit we just pushed to the dev remote
and... immediately push it to the local cache under a dummy branch,
which we delete. Since we only gc "1 day ago" this should not vacuum.
This commit is contained in:
Xavier Morel 2021-03-01 12:38:23 +01:00
parent 8a924fb4b7
commit 0b1e33da7c

View File

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
import logging
import uuid
from contextlib import ExitStack
from datetime import datetime
@ -128,6 +129,16 @@ class UpdateQueue(models.Model, Queue):
'squash': commits_count == 1,
})
working_copy.push('-f', 'target', child.refname)
# also push to local cache: looks like in some cases github
# doesn't propagate revisions (?) or at least does so too slowly
# so on the next loop we try to fetch the revision we just
# pushed through PR and... we can't find it
dummy_branch = str(uuid.uuid4())
ref = previous._get_local_directory()
working_copy.push(ref._directory, f'{new_head}:refs/heads/{dummy_branch}')
ref.branch('--delete', '--force', dummy_branch)
# committing here means github could technically trigger its
# webhook before sending a response, but committing before
# would mean we can update the PR in database but fail to