Mercurial > hg
view tests/test-commit-unresolved.t @ 37212:f09a2eab11cf
server: add an error feedback mechanism for when the daemon fails to launch
There's a recurring problem on Windows where `hg serve -d` will randomly fail to
spawn a detached process. The reason for the failure is completely hidden, and
it takes hours to get a single failure on my laptop. All this does is redirect
stdout/stderr of the child to a file until the lock file is freed, and then the
parent dumps it out if it fails to spawn.
I chose to put the output into the lock file because that is always cleaned up.
There's no way to report errors after that anyway. On Windows, killdaemons.py
is roughly `kill -9`, so this ensures that junk won't pile up.
This may end up being a case of EADDRINUSE. At least that's what I saw spit out
a few times (among other odd errors and missing output on Windows). But I also
managed to get the same thing on Fedora 26 by running test-hgwebdir.t with
--loop -j10 for several hours. Running `netstat` immediately after killing that
run printed a wall of sockets in the TIME_WAIT state, which were gone a couple
seconds later. I couldn't match up ports that failed, because --loop doesn't
print out the message about the port that was used. So maybe the fix is to
rotate the use of HGPORT[12] in the tests. But, let's collect some more data
first.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 28 Mar 2018 00:11:09 -0400 |
parents | 41ef02ba329b |
children | 3bc400ccbf99 |
line wrap: on
line source
$ addcommit () { > echo $1 > $1 > hg add $1 > hg commit -d "${2} 0" -m $1 > } $ commit () { > hg commit -d "${2} 0" -m $1 > } $ hg init a $ cd a $ addcommit "A" 0 $ addcommit "B" 1 $ echo "C" >> A $ commit "C" 2 $ hg update -C 0 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo "D" >> A $ commit "D" 3 created new head State before the merge $ hg status $ hg id e45016d2b3d3 tip $ hg summary parent: 3:e45016d2b3d3 tip D branch: default commit: (clean) update: 2 new changesets, 2 branch heads (merge) phases: 4 draft Testing the abort functionality first in case of conflicts $ hg merge --abort abort: no merge in progress [255] $ hg merge merging A warning: conflicts while merging A! (edit, then use 'hg resolve --mark') 1 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 [1] $ hg merge --abort e4501 abort: cannot specify a node with --abort [255] $ hg merge --abort --rev e4501 abort: cannot specify both --rev and --abort [255] $ hg merge --abort aborting the merge, updating back to e45016d2b3d3 1 files updated, 0 files merged, 1 files removed, 0 files unresolved Checking that we got back in the same state $ hg status ? A.orig $ hg id e45016d2b3d3 tip $ hg summary parent: 3:e45016d2b3d3 tip D branch: default commit: 1 unknown (clean) update: 2 new changesets, 2 branch heads (merge) phases: 4 draft Merging a conflict araises $ hg merge merging A warning: conflicts while merging A! (edit, then use 'hg resolve --mark') 1 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 [1] Correct the conflict without marking the file as resolved $ echo "ABCD" > A $ hg commit -m "Merged" abort: unresolved merge conflicts (see 'hg help resolve') [255] Mark the conflict as resolved and commit $ hg resolve -m A (no more unresolved files) $ hg commit -m "Merged" Test that if a file is removed but not marked resolved, the commit still fails (issue4972) $ hg up ".^" 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg merge 2 merging A warning: conflicts while merging A! (edit, then use 'hg resolve --mark') 1 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 [1] $ hg rm --force A $ hg commit -m merged abort: unresolved merge conflicts (see 'hg help resolve') [255] $ hg resolve -ma (no more unresolved files) $ hg commit -m merged created new head Testing the abort functionality in case of no conflicts $ hg update -C 0 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ addcommit "E" 4 created new head $ hg id 68352a18a7c4 tip $ hg merge -r 4 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg merge --preview --abort abort: cannot specify --preview with --abort [255] $ hg merge --abort aborting the merge, updating back to 68352a18a7c4 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg id 68352a18a7c4 tip $ cd ..