Mercurial > hg
view tests/test-merge-remove.t @ 51929:93d872a06132 default tip
typing: add type annotations to the dirstate classes
The basic procedure here was to use `merge-pyi` to merge the `git/dirstate.pyi`
file in (after renaming the interface class to match), cleaning up the import
statement mess, and then repeating the procedure for `mercurial/dirstate.pyi`.
Surprisingly, git's dirstate had more hints inferred in its *.pyi file.
After that, it was a manual examination of each method in the interface, and how
they were implemented in the core and git classes to verify what was inferred by
pytype, and fill in the missing gaps. Since this involved jumping around
between three different files, I applied the same type info to all three at the
same time. Complex types I rolled up into type aliases in the interface module,
and used that as needed. That way if it changes, there's one place to edit.
There are some hints still missing, and some documentation that doesn't match
the signatures. They should all be marked with TODOs. There are also a bunch
of methods on the core class that aren't on the Protocol class that seem like
maybe they should be (like `set_tracked()`). There are even more methods
missing from the git class. But that's a project for another time.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Fri, 27 Sep 2024 12:30:37 -0400 |
parents | 55c6ebd11cb9 |
children |
line wrap: on
line source
$ hg init repo $ cd repo $ echo foo > foo $ echo bar > bar $ hg ci -qAm 'add foo bar' $ echo foo2 >> foo $ echo bleh > bar $ hg ci -m 'change foo bar' $ hg up -qC 0 $ hg mv foo foo1 $ echo foo1 > foo1 $ hg cat foo >> foo1 $ hg ci -m 'mv foo foo1' created new head $ hg merge merging foo1 and foo to foo1 1 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg debugstate --no-dates m 0 -2 unset bar m 0 -2 unset foo1 copy: foo -> foo1 $ hg st -q M bar M foo1 Removing foo1 and bar: $ cp foo1 F $ cp bar B $ hg rm -f foo1 bar $ hg debugstate --no-dates r 0 -1 set bar r 0 -1 set foo1 copy: foo -> foo1 $ hg st -qC R bar R foo1 Re-adding foo1 and bar: $ cp F foo1 $ cp B bar $ hg add -v foo1 bar adding bar adding foo1 $ hg debugstate --no-dates m 0 -2 unset bar m 0 -2 unset foo1 copy: foo -> foo1 $ hg st -qC M bar M foo1 foo Reverting foo1 and bar: $ hg revert -vr . foo1 bar saving current version of bar as bar.orig saving current version of foo1 as foo1.orig reverting bar reverting foo1 $ hg debugstate --no-dates m 0 -2 unset bar m 0 -2 unset foo1 copy: foo -> foo1 $ hg st -qC M bar M foo1 foo $ hg diff Merge should not overwrite local file that is untracked after remove $ rm * $ hg up -qC $ hg rm bar $ hg ci -m 'remove bar' $ echo 'memories of buried pirate treasure' > bar $ hg merge bar: untracked file differs abort: untracked files in working directory differ from files in requested revision [20] $ cat bar memories of buried pirate treasure Those who use force will lose $ hg merge -f file 'bar' was deleted in local [working copy] but was modified in other [merge rev]. You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved. What do you want to do? u merging foo1 and foo to foo1 0 files updated, 1 files merged, 0 files removed, 1 files unresolved use 'hg resolve' to retry unresolved file merges or 'hg merge --abort' to abandon [1] $ cat bar bleh $ hg st M bar M foo1