Mercurial > hg
view tests/test-bookmarks-push-race.t @ 51871:cfd30df0f8e4
bundlerepo: fix mismatches with repository and revlog classes
Both pytype and PyCharm complained that `write()` and `_write()` in the
bundlephasecache class aren't proper overrides- indeed they seem to be missing
an argument that the base class has.
PyCharm and pytype also complained that the `revlog.revlog` class doesn't have a
`_chunk()` method. That looks like it was moved from revlog to `_InnerRevlog`
back in e8ad6d8de8b8, and wasn't caught because this module wasn't type checked.
However, I couldn't figure out a syntax with `revlog.revlog._inner._chunk(self, rev)`,
as it complained about passing too many args. `bundlerevlog._rawtext()` uses
this `super(...)` style to call the super class, so hopefully that works, even
with the wonky dynamic subclassing. The revlog class needed the `_InnerRevlog`
field typed because it isn't set in the constructor.
Finally, the vfs type hints look broken. This initially failed with:
File "/mnt/c/Users/Matt/hg/mercurial/bundlerepo.py", line 65, in __init__: Function readonlyvfs.__init__ was called with the wrong arguments [wrong-arg-types]
Expected: (self, vfs: mercurial.vfs.vfs)
Actually passed: (self, vfs: Callable)
Called from (traceback):
line 232, in dirlog
line 214, in __init__
I don't see a raw Callable, but I tried changing some of the vfs args to be typed
as `vfsmod.abstractvfs`, but that class doesn't have `options`, so it failed
elsewhere. `readonlyvfs` isn't a subclass of `vfs` (it's a subclass of
`abstractvfs`), so I'm not sure how to handle that. It would be a shame to have
to make a union of vfs subclasses (but not all of them have `options` either).
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 03 Aug 2024 01:33:13 -0400 |
parents | 553eb132366f |
children |
line wrap: on
line source
============================================ Testing various race condition while pushing ============================================ $ cat << EOF >> $HGRCPATH > [command-templates] > log={rev}:{node|short} {desc|firstline} {bookmarks} > [ui] > timeout = 20 > [phases] > publish=False > EOF Initial Setup ============= $ hg init dst $ echo a > dst/a-file $ hg --cwd dst add a-file $ hg --cwd dst commit -m root $ hg --cwd dst bookmark my-book $ hg --cwd dst bookmarks * my-book 0:a64e49638499 $ hg --cwd dst log -G @ 0:a64e49638499 root my-book $ hg clone ssh://user@dummy/dst src requesting all changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files new changesets a64e49638499 (1 drafts) updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ hg --cwd src update my-book 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (activating bookmark my-book) $ hg --cwd src log -G @ 0:a64e49638499 root my-book $ echo b > src/a-file $ hg --cwd src commit -m cA0_ $ hg --cwd src log -G @ 1:e89d3a6ed79b cA0_ my-book | o 0:a64e49638499 root Race condition while pushing a forward moving bookmarks ======================================================= This is currently slightly broken as we eventually don't push the bookmark. However at least we do not delete the remote one. $ echo c > src/a-file $ hg --cwd src push -B my-book --config hooks.prelock="hg commit -m cA1_" pushing to ssh://user@dummy/dst searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files $ hg --cwd src log -G @ 2:08d837bbfe8d cA1_ my-book | o 1:e89d3a6ed79b cA0_ | o 0:a64e49638499 root $ hg --cwd dst log -G o 1:e89d3a6ed79b cA0_ | @ 0:a64e49638499 root my-book create a side-moving bookmark Race condition while pushing a side moving bookmarks ======================================================= resynchronize the repo and setup test ------------------------------------- $ hg --cwd src push -B my-book pushing to ssh://user@dummy/dst searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files updating bookmark my-book $ hg --cwd dst log -G o 2:08d837bbfe8d cA1_ my-book | o 1:e89d3a6ed79b cA0_ | @ 0:a64e49638499 root $ hg --cwd src up 'desc("root")' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (leaving bookmark my-book) $ echo d > src/a-file $ hg --cwd src commit -m cB0_ created new head $ hg --cwd src bookmark --force my-book $ echo e > src/a-file $ hg --cwd src log -G @ 3:726401661fe5 cB0_ my-book | | o 2:08d837bbfe8d cA1_ | | | o 1:e89d3a6ed79b cA0_ |/ o 0:a64e49638499 root Push the bookmark while a commit is being made ---------------------------------------------- This is currently slightly broken as we eventually don't push the bookmark. However at least we do not delete the remote one. $ hg --cwd src push -f -r 'desc("cB0_")' -B my-book --config hooks.prelock="hg commit -m cB1_" pushing to ssh://user@dummy/dst searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 1 changes to 1 files (+1 heads) $ hg --cwd src log -G @ 4:a7f9cbf631a0 cB1_ my-book | o 3:726401661fe5 cB0_ | | o 2:08d837bbfe8d cA1_ | | | o 1:e89d3a6ed79b cA0_ |/ o 0:a64e49638499 root $ hg --cwd dst log -G o 3:726401661fe5 cB0_ | | o 2:08d837bbfe8d cA1_ my-book | | | o 1:e89d3a6ed79b cA0_ |/ @ 0:a64e49638499 root