Mercurial > hg
view tests/test-inotify.t @ 17758:5863f0e4cd3a
histedit: replace various nodes lists with replacement graph (and issue3582)
This changeset rewrites the change tracking logic of histedit to record every
operation it does. Tracked operations record the full list of "old" node that
will eventually be removed to the list of new nodes that replace it. Operations
on temporary nodes are tracked too. Dropped changesets are also recorded as an
"old" node replacement by nothing. This logic is similar to the obsolescence
marker one and will be used for this purpose in later commit.
This new logic implies a big amount of change in the histedit code base.
histedit action functions now always return a tuple of
(new-ctx, [list of rewriting operations])
The old `created`, `replaced` and `tmpnodes` are no longer returned and stored
during histedit operation. When such information is necessary it is computed
from the replacement graph. This computation is done in the `processreplacement`
function.
The `replacemap` is also dropped. It is computed at the end of the command from the
graph. The `bootstrapcontinue` methods are altered to compute this different kind of
information.
This new mechanism requires much less information to be written on disk.
Note:
This changes allows a more accurate bookmark movement. bookmark on dropped
changeset are now move of their parent (or replacement of their parent)
instead of their children.
This fix issue3582
author | Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
---|---|
date | Thu, 11 Oct 2012 08:36:50 +0200 |
parents | f2719b387380 |
children | 8cbe0fed0c1f |
line wrap: on
line source
$ "$TESTDIR/hghave" inotify || exit 80 $ hg init repo1 $ cd repo1 $ touch a b c d e $ mkdir dir $ mkdir dir/bar $ touch dir/x dir/y dir/bar/foo $ hg ci -Am m adding a adding b adding c adding d adding dir/bar/foo adding dir/x adding dir/y adding e $ cd .. $ hg clone repo1 repo2 updating to branch default 8 files updated, 0 files merged, 0 files removed, 0 files unresolved $ echo "[extensions]" >> $HGRCPATH $ echo "inotify=" >> $HGRCPATH $ cd repo2 $ echo b >> a check that daemon started automatically works correctly and make sure that inotify.pidfile works $ hg --config "inotify.pidfile=../hg2.pid" status M a make sure that pidfile worked. Output should be silent. $ kill `cat ../hg2.pid` $ cd ../repo1 inserve $ hg inserve -d --pid-file=hg.pid $ cat hg.pid >> "$DAEMON_PIDS" let the daemon finish its stuff $ sleep 1 cannot start, already bound $ hg inserve abort: inotify-server: cannot start: socket is already bound [255] issue907 $ hg status ? hg.pid clean $ hg status -c C a C b C c C d C dir/bar/foo C dir/x C dir/y C e all $ hg status -A ? hg.pid C a C b C c C d C dir/bar/foo C dir/x C dir/y C e path patterns $ echo x > dir/x $ hg status . M dir/x ? hg.pid $ hg status dir M dir/x $ cd dir $ hg status . M x $ cd .. issue 1375 testing that we can remove a folder and then add a file with the same name issue 1375 $ mkdir h $ echo h > h/h $ hg ci -Am t adding h/h adding hg.pid $ hg rm h removing h/h $ echo h >h $ hg add h $ hg status A h R h/h $ hg ci -m0 Test for issue1735: inotify watches files in .hg/merge $ hg st $ echo a > a $ hg ci -Am a $ hg st $ echo b >> a $ hg ci -m ab $ hg st $ echo c >> a $ hg st M a $ HGMERGE=internal:local hg up 0 1 files updated, 1 files merged, 2 files removed, 0 files unresolved $ hg st M a $ HGMERGE=internal:local hg up 3 files updated, 1 files merged, 0 files removed, 0 files unresolved $ hg st M a Test for 1844: "hg ci folder" will not commit all changes beneath "folder" $ mkdir 1844 $ echo a > 1844/foo $ hg add 1844 adding 1844/foo $ hg ci -m 'working' $ echo b >> 1844/foo $ hg ci 1844 -m 'broken' Test for issue884: "Build products not ignored until .hgignore is touched" $ echo '^build$' > .hgignore $ hg add .hgignore $ hg ci .hgignore -m 'ignorelist' Now, lets add some build products... $ mkdir build $ touch build/x $ touch build/y build/x & build/y shouldn't appear in "hg st" $ hg st $ kill `cat hg.pid` $ cd ..