Mercurial > hg
view tests/test-glog-topological.t @ 51930:bc9ed92d4753
util: make `mmapread()` work on Windows again
522b4d729e89 started referencing `mmap.MAP_PRIVATE`, but that's not available on
Windows, so `hg version` worked, but `make local` did not. That commit also
started calling the constructor with the fine-grained `flags` and `prot` args,
but those aren't available on Windows either[1] (though the backing C code
doesn't seem conditionalized to disallow usage of them).
I assume the change away from from the `access` arg was to provide the same
options, plus `MAP_POPULATE`. Looking at the source code[2], they're not quite
the same- `ACCESS_READ` is equivalent to `flags = MAP_SHARED` and `prot = PROT_READ`.
`MAP_PRIVATE` is only used with `ACCESS_COPY`, which allows read and write.
Therefore, we can't quite get the same baseline flags on Windows, but this was
the status quo ante and `MAP_POPULATE` is a Linux thing, so presumably it works.
I realize that typically the OS differences are abstracted into the platform
modules, but I'm leaving it here so that it is obvious what the differences are
between the platforms.
[1] https://docs.python.org/3/library/mmap.html#mmap.mmap
[2] https://github.com/python/cpython/blob/5e0abb47886bc665eefdcc19fde985f803e49d4c/Modules/mmapmodule.c#L1539
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 01 Oct 2024 15:00:39 -0400 |
parents | ed84a4d48910 |
children |
line wrap: on
line source
This test file aims at test topological iteration and the various configuration it can has. $ cat >> $HGRCPATH << EOF > [command-templates] > log={rev}\n > EOF On this simple example, all topological branch are displayed in turn until we can finally display 0. this implies skipping from 8 to 3 and coming back to 7 later. $ hg init test01 $ cd test01 $ hg unbundle $TESTDIR/bundles/remote.hg adding changesets adding manifests adding file changes added 9 changesets with 7 changes to 4 files (+1 heads) new changesets bfaf4b5cbf01:916f1afdef90 (9 drafts) (run 'hg heads' to see heads, 'hg merge' to merge) $ hg log -G o 8 | | o 7 | | | o 6 | | | o 5 | | | o 4 | | o | 3 | | o | 2 | | o | 1 |/ o 0 (display all nodes) $ hg log -G -r 'sort(all(), topo)' o 8 | o 3 | o 2 | o 1 | | o 7 | | | o 6 | | | o 5 | | | o 4 |/ o 0 (display nodes filtered by log options) $ hg log -G -r 'sort(all(), topo)' -k '.3' o 8 | o 3 | ~ o 7 | o 6 | ~ (revset skipping nodes) $ hg log -G --rev 'sort(not (2+6), topo)' o 8 | o 3 : o 1 | | o 7 | : | o 5 | | | o 4 |/ o 0 (begin) from the other branch $ hg log -G -r 'sort(all(), topo, topo.firstbranch=5)' o 7 | o 6 | o 5 | o 4 | | o 8 | | | o 3 | | | o 2 | | | o 1 |/ o 0 Topological sort can be turned on via config $ cat >> $HGRCPATH << EOF > [experimental] > log.topo=true > EOF $ hg log -G o 8 | o 3 | o 2 | o 1 | | o 7 | | | o 6 | | | o 5 | | | o 4 |/ o 0 Does not affect non-graph log $ hg log -T '{rev}\n' 8 7 6 5 4 3 2 1 0