evolve: prevent a crash in httpclient_pushobsmarkers() when pushing
I've been running into a crash when pushing from my hg repo in a Fedora 16 VM to
Win7 running 'hg serve', even with extensions disabled on both sides:
../hg push -r . pc
pushing to http://192.168.1.4:8000/
searching for changes
no changes found
pushing 2 obsolescence markers (263 bytes)
** unknown exception encountered, please report by visiting
...
File "hg-evolve/hgext/evolve.py", line 2482, in _pushobsolete
remote.evoext_pushobsmarkers_0(obsdata)
File "hg-evolve/hgext/evolve.py", line 2522, in httpclient_pushobsmarkers
ret, output = self._call('evoext_pushobsmarkers_0', data=obsfile)
ValueError: too many values to unpack
I'm not sure how this repo differs from the one in the test suite, so I'm not
sure how to craft a test for this. The failure occurs even when there _are_
csets to push. There was no crash if no obsolete markers needed to be pushed.
At any rate, this code was stolen from httppeer._callpush(), where it calls
self._call(). The socket exception handling wasn't necessary to fix the crash,
but the calling code might as well be duplicated in its entirety.
A successful push with this patch looks like this. Note the final line is _not_
in the output of the http push in test-simple4server.t:
../hg push -r . pc
pushing to http://192.168.1.4:8000/
searching for changes
remote has heads on branch 'default' that are not known locally: 3af110194a0c
56000e3ae44d 57ac6e51d290 7da4355c21b8 and 8 others
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 0 changes to 1 files (+1 heads)
pushing 4 obsolescence markers (525 bytes)
remote: 2 obsolescence markers added
$ cat >> $HGRCPATH <<EOF
> [extensions]
> hgext.graphlog=
> EOF
$ echo "evolve=$(echo $(dirname $TESTDIR))/hgext/evolve.py" >> $HGRCPATH
$ glog() {
> hg glog --template '{rev}@{branch}({phase}) {desc|firstline}\n' "$@"
> }
$ hg init repo --traceback
$ cd repo
$ echo a > a
$ hg ci -Am adda
adding a
Test that amend captures branches
$ hg branch foo
marked working directory as branch foo
(branches are permanent and global, did you want a bookmark?)
$ hg amend -d '0 0'
$ hg debugobsolete
07f4944404050f47db2e5c5071e0e84e7a27bba9 6a022cbb61d5ba0f03f98ff2d36319dfea1034ae 0 (*) {'user': 'test'} (glob)
b2e32ffb533cbe1d5759638c0cd4e8abc43b2738 0 {07f4944404050f47db2e5c5071e0e84e7a27bba9} (*) {'user': 'test'} (glob)
$ hg branch
foo
$ hg branches
foo 2:6a022cbb61d5
$ glog
@ 2@foo(draft) adda
Test no-op
$ hg amend -d '0 0'
nothing changed
[1]
$ glog
@ 2@foo(draft) adda
Test forcing the message to the same value, no intermediate revision.
$ hg amend -d '0 0' -m 'adda'
nothing changed
[1]
$ glog
@ 2@foo(draft) adda
Test collapsing into an existing revision, no intermediate revision.
$ echo a >> a
$ hg ci -m changea
$ echo a > a
$ hg status
M a
$ hg pstatus
$ hg diff
diff -r f7a50201fe3a a
--- a/a Thu Jan 01 00:00:00 1970 +0000
+++ b/a * +0000 (glob)
@@ -1,2 +1,1 @@
a
-a
$ hg pdiff
$ hg ci -m reseta
$ hg debugobsolete
07f4944404050f47db2e5c5071e0e84e7a27bba9 6a022cbb61d5ba0f03f98ff2d36319dfea1034ae 0 (*) {'user': 'test'} (glob)
b2e32ffb533cbe1d5759638c0cd4e8abc43b2738 0 {07f4944404050f47db2e5c5071e0e84e7a27bba9} (*) {'user': 'test'} (glob)
$ hg phase 2
2: draft
$ glog
@ 4@foo(draft) reseta
|
o 3@foo(draft) changea
|
o 2@foo(draft) adda
Specify precise commit date with -d
$ hg amend -d '2001-02-03 04:05:06 +0700'
$ hg parents --template '{rev} {date|date}\n'
5 Sat Feb 03 04:05:06 2001 +0700
Specify "now" as commit date with -D
$ before=`date +%s`
$ hg amend -D
$ commit=`hg parents --template '{date|hgdate} rev{rev}\n'`
$ after=`date +%s`
$ (echo $before ; echo $commit; echo $after) | sort -k1 -n -s
\d+ (re)
\d+ 0 rev6 (re)
\d+ (re)
Specify current user as committer with -U
$ HGUSER=newbie hg amend -U
$ hg parents --template '{rev} {author}\n'
7 newbie
Check that --logfile works
$ echo "logfile message" > logfile.txt
$ hg amend -l logfile.txt
$ hg log -r . -T "{desc}\n"
logfile message
# Make sure we don't get reparented to -1 with no username (issue4211)
$ HGUSER=
$ hg amend -e --config ui.username= -m "empty user"
abort: no username supplied
(use "hg config --edit" to set your username)
[255]
$ hg sum
parent: 8:* tip (glob)
logfile message
branch: foo
commit: 1 unknown (clean)
update: (current)