Mercurial > hg-stable
view tests/test-narrow-merge.t @ 51928:ad83e4f9b40e
typing: correct pytype mistakes in `mercurial/vfs.py`
With the previous changes in this series (prior to merging the *.pyi file), this
wasn't too bad- the only definitively wrong things were the `data` argument to
`writelines()`, and the return type on `backgroundclosing()` (both of these
errors were dropped in the previous commit; for some reason pytype doesn't like
`contextlib._GeneratorContextManager`, even though that's what it determined it
is):
File "/mnt/c/Users/Matt/hg/mercurial/vfs.py", line 411, in abstractvfs:
Bad return type 'contextlib._GeneratorContextManager' for generator function abstractvfs.backgroundclosing [bad-yield-annotation]
Expected Generator, Iterable or Iterator
PyCharm thinks this is `Generator[backgroundfilecloser], Any, None]`, which can
be reduced to `Iterator[backgroundfilecloser]`, but pytype flagged the line that
calls `yield` without an argument unless it's also `Optional`. PyCharm is happy
either way. For some reason, `Iterable` didn't work for pytype:
File "/mnt/c/Users/Matt/hg/mercurial/vfs.py", line 390, in abstractvfs:
Function contextlib.contextmanager was called with the wrong arguments [wrong-arg-types]
Expected: (func: Callable[[Any], Iterator])
Actually passed: (func: Callable[[Any, Any, Any], Iterable[Optional[Any]]])
Attributes of protocol Iterator[_T_co] are not implemented on Iterable[Optional[Any]]: __next__
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 20 Sep 2024 16:36:28 -0400 |
parents | 7e5be4a7cda7 |
children |
line wrap: on
line source
#testcases flat tree $ . "$TESTDIR/narrow-library.sh" #if tree $ cat << EOF >> $HGRCPATH > [experimental] > treemanifest = 1 > EOF #endif create full repo $ hg init master $ cd master $ cat >> .hg/hgrc <<EOF > [narrow] > serveellipses=True > EOF $ mkdir inside $ echo inside1 > inside/f1 $ echo inside2 > inside/f2 $ mkdir outside $ echo outside1 > outside/f1 $ echo outside2 > outside/f2 $ hg ci -Aqm 'initial' $ echo modified > inside/f1 $ hg ci -qm 'modify inside/f1' $ hg update -q 0 $ echo modified > inside/f2 $ hg ci -qm 'modify inside/f2' $ hg update -q 0 $ echo modified2 > inside/f1 $ hg ci -qm 'conflicting inside/f1' $ hg update -q 0 $ echo modified > outside/f1 $ hg ci -qm 'modify outside/f1' $ hg update -q 0 $ echo modified2 > outside/f1 $ hg ci -qm 'conflicting outside/f1' $ cd .. $ hg clone --narrow ssh://user@dummy/master narrow --include inside requesting all changes adding changesets adding manifests adding file changes added 6 changesets with 5 changes to 2 files (+4 heads) new changesets *:* (glob) updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd narrow $ hg update -q 0 Can merge in when no files outside narrow spec are involved $ hg update -q 'desc("modify inside/f1")' $ hg merge 'desc("modify inside/f2")' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg commit -m 'merge inside changes' Can merge conflicting changes inside narrow spec $ hg update -q 'desc("modify inside/f1")' $ hg merge 'desc("conflicting inside/f1")' 2>&1 | grep -E -v '(warning:|incomplete!)' merging inside/f1 0 files updated, 0 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon $ echo modified3 > inside/f1 $ hg resolve -m (no more unresolved files) $ hg commit -m 'merge inside/f1' TODO: Can merge non-conflicting changes outside narrow spec $ hg update -q 'desc("modify inside/f1")' #if flat $ hg merge 'desc("modify outside/f1")' 0 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) status should be clean $ hg status ? inside/f1.orig file out of the spec should still not be in the dirstate at all $ hg debugdirstate | grep outside/f1 [1] Commit that merge $ hg ci -m 'merge from outside to inside' status should be clean $ hg status ? inside/f1.orig file out of the spec should not be in the mergestate anymore $ hg debugmergestate | grep outside/f1 [1] file out of the spec should still not be in the dirstate at all $ hg debugdirstate | grep outside/f1 [1] The filenode used should come from p2 $ hg manifest --debug --rev . | grep outside/f1 83cd11431a3b2aff8a3995e5f27bcf33cdb5be98 644 outside/f1 $ hg manifest --debug --rev 'p1(.)' | grep outside/f1 c6b956c48be2cd4fa94be16002aba311143806fa 644 outside/f1 $ hg manifest --debug --rev 'p2(.)' | grep outside/f1 83cd11431a3b2aff8a3995e5f27bcf33cdb5be98 644 outside/f1 remove the commit to get in the previous situation again $ hg debugstrip -r . 0 files updated, 0 files merged, 0 files removed, 0 files unresolved saved backup bundle to $TESTTMP/narrow/.hg/strip-backup/48eb25338b19-a1bb8350-backup.hg #else $ hg merge 'desc("modify outside/f1")' abort: merge affects file 'outside/' outside narrow, which is not yet supported (tree !) (merging in the other direction may work) [255] #endif $ hg update -q 'desc("modify outside/f1")' $ hg merge 'desc("modify inside/f1")' 1 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg ci -m 'merge from inside to outside' Refuses merge of conflicting outside changes $ hg update -q 'desc("modify outside/f1")' $ hg merge 'desc("conflicting outside/f1")' abort: conflict in file 'outside/f1' is outside narrow clone (flat !) abort: conflict in file 'outside/' is outside narrow clone (tree !) [20]