--- a/doc/hg.1.txt Thu Aug 04 05:14:59 2005 -0800
+++ b/doc/hg.1.txt Thu Aug 04 13:31:25 2005 -0800
@@ -330,6 +330,7 @@
-p, --port <n> port to use (default: 8000)
-n, --name <name> name to show in web pages (default: working dir)
-t, --templatedir <path> web templates to use
+ -6, --ipv6 use IPv6 in addition to IPv4
status [options] [files]::
Show changed files in the working directory. If no names are
--- a/hgeditor Thu Aug 04 05:14:59 2005 -0800
+++ b/hgeditor Thu Aug 04 13:31:25 2005 -0800
@@ -24,11 +24,11 @@
HGTMP=""
cleanup_exit() {
rm -rf "$HGTMP"
- exit $1
}
# Remove temporary files even if we get interrupted
-trap "cleanup_exit 255" TERM KILL INT QUIT ABRT
+trap "cleanup_exit" 0 # normal exit
+trap "exit 255" 1 2 3 6 15 # HUP INT QUIT ABRT TERM
HGTMP="${TMPDIR-/tmp}/hgeditor.$RANDOM.$RANDOM.$RANDOM.$$"
(umask 077 && mkdir "$HGTMP") || {
@@ -51,8 +51,8 @@
grep -vE '^(HG: manifest hash .*)?$' "$1" >> "$HGTMP/msg"
CHECKSUM=`md5sum "$HGTMP/msg"`
-$EDITOR "$HGTMP/msg" "$HGTMP/diff" || cleanup_exit $?
-echo "$CHECKSUM" | md5sum -c >/dev/null 2>&1 && cleanup_exit 13
+$EDITOR "$HGTMP/msg" "$HGTMP/diff" || exit $?
+echo "$CHECKSUM" | md5sum -c >/dev/null 2>&1 && exit 13
if [ "$SIGN" == "1" ]; then
{
@@ -64,4 +64,4 @@
mv "$HGTMP/msg" "$1"
fi
-cleanup_exit $?
+exit $?
--- a/hgmerge Thu Aug 04 05:14:59 2005 -0800
+++ b/hgmerge Thu Aug 04 13:31:25 2005 -0800
@@ -19,48 +19,36 @@
cp "$LOCAL" "$LOCAL.orig"
# Attempt to do a non-interactive merge
-if type merge > /dev/null ; then
- if merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null; then
- # success!
- exit 0
- fi
+if type merge > /dev/null 2>&1; then
+ merge "$LOCAL" "$BASE" "$OTHER" 2> /dev/null && exit 0
cp "$LOCAL.orig" "$LOCAL"
-elif type diff3 > /dev/null ; then
- if diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" ; then
- # success
- exit 0
- fi
+elif type diff3 > /dev/null 2>&1; then
+ diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" && exit 0
cp "$LOCAL.orig" "$LOCAL"
fi
if [ -n "$DISPLAY" ]; then
# try using kdiff3, which is fairly nice
- if type kdiff3 > /dev/null ; then
- if kdiff3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" ; then
- exit 0
- else
- exit 1
- fi
+ if type kdiff3 > /dev/null 2>&1; then
+ kdiff3 --auto "$BASE" "$LOCAL" "$OTHER" -o "$LOCAL" || exit 1
+ exit 0
fi
# try using tkdiff, which is a bit less sophisticated
- if type tkdiff > /dev/null ; then
- if tkdiff "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" ; then
- exit 0
- else
- exit 1
- fi
+ if type tkdiff > /dev/null 2>&1; then
+ tkdiff "$LOCAL" "$OTHER" -a "$BASE" -o "$LOCAL" || exit 1
+ exit 0
fi
fi
# Attempt to do a merge with $EDITOR
-if type merge > /dev/null ; then
+if type merge > /dev/null 2>&1; then
echo "conflicts detected in $LOCAL"
merge "$LOCAL" "$BASE" "$OTHER" 2>/dev/null || $EDITOR "$LOCAL"
exit 0
fi
-if type diff3 > /dev/null ; then
+if type diff3 > /dev/null 2>&1; then
echo "conflicts detected in $LOCAL"
diff3 -m "$LOCAL.orig" "$BASE" "$OTHER" > "$LOCAL" || $EDITOR "$LOCAL"
exit 0
@@ -69,29 +57,28 @@
HGTMP=""
cleanup_exit() {
rm -rf "$HGTMP"
- exit $1
}
# attempt to manually merge with diff and patch
-if type diff > /dev/null ; then
- if type patch > /dev/null ; then
- # Remove temporary files even if we get interrupted
- trap "cleanup_exit 1" TERM KILL INT QUIT ABRT
+if type diff > /dev/null 2>&1 && type patch > /dev/null 2>&1; then
+ # Remove temporary files even if we get interrupted
+ trap "cleanup_exit" 0 # normal exit
+ trap "exit 1" 1 2 3 6 15 # HUP INT QUIT ABRT TERM
- HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$"
- (umask 077 && mkdir "$HGTMP") || {
- echo "Could not create temporary directory! Exiting." 1>&2
- exit 1
- }
+ HGTMP="${TMPDIR-/tmp}/hgmerge.$RANDOM.$RANDOM.$RANDOM.$$"
+ (umask 077 && mkdir "$HGTMP") || {
+ echo "Could not create temporary directory! Exiting." 1>&2
+ exit 1
+ }
- diff -u "$BASE" "$OTHER" > "$HGTMP/diff"
- if patch "$LOCAL" < "$HGTMP/diff" ; then
- cleanup_exit 0
- else
- $EDITOR "$LOCAL" "$LOCAL.rej"
- fi
- cleanup_exit 1
+ diff -u "$BASE" "$OTHER" > "$HGTMP/diff"
+ if patch "$LOCAL" < "$HGTMP/diff"; then
+ exit 0
+ else
+ # If rejects are empty after using the editor, merge was ok
+ $EDITOR "$LOCAL" "$LOCAL.rej" && test -s "$LOCAL.rej" || exit 0
fi
+ exit 1
fi
echo "hgmerge: unable to find merge, tkdiff, kdiff3, or diff+patch!"
--- a/mercurial/bdiff.c Thu Aug 04 05:14:59 2005 -0800
+++ b/mercurial/bdiff.c Thu Aug 04 13:31:25 2005 -0800
@@ -229,7 +229,8 @@
/* allocate and fill arrays */
t = equatelines(a, an, b, bn);
pos = calloc(bn, sizeof(struct pos));
- l.head = l.base = malloc(sizeof(struct hunk) * ((an + bn) / 4 + 2));
+ /* we can't have more matches than lines in the shorter file */
+ l.head = l.base = malloc(sizeof(struct hunk) * ((an<bn ? an:bn) + 1));
if (pos && l.base && t) {
/* generate the matching block list */
--- a/mercurial/commands.py Thu Aug 04 05:14:59 2005 -0800
+++ b/mercurial/commands.py Thu Aug 04 13:31:25 2005 -0800
@@ -710,7 +710,7 @@
message = "%s\n" % '\n'.join(message)
ui.debug('message:\n%s\n' % message)
- f = os.popen("patch -p%d < %s" % (strip, pf))
+ f = os.popen("patch -p%d < '%s'" % (strip, pf))
files = []
for l in f.read().splitlines():
l.rstrip('\r\n');
@@ -1009,7 +1009,7 @@
return default
httpd = hgweb.create_server(repo.root, opts["name"], opts["templates"],
- opts["address"], opts["port"],
+ opts["address"], opts["port"], opts["ipv6"],
openlog('accesslog', sys.stdout),
openlog('errorlog', sys.stderr))
if ui.verbose:
@@ -1258,7 +1258,8 @@
('a', 'address', '', 'interface address'),
('n', 'name', os.getcwd(), 'repository name'),
('', 'stdio', None, 'for remote clients'),
- ('t', 'templates', "", 'template map')],
+ ('t', 'templates', "", 'template map'),
+ ('6', 'ipv6', None, 'use IPv6 in addition to IPv4')],
"hg serve [OPTION]..."),
"^status": (status,
[('I', 'include', [], 'include path in search'),
@@ -1425,7 +1426,14 @@
except SignalInterrupt:
u.warn("killed!\n")
except KeyboardInterrupt:
- u.warn("interrupted!\n")
+ try:
+ u.warn("interrupted!\n")
+ except IOError, inst:
+ if inst.errno == errno.EPIPE:
+ if u.debugflag:
+ u.warn("\nbroken pipe\n")
+ else:
+ raise
except IOError, inst:
if hasattr(inst, "code"):
u.warn("abort: %s\n" % inst)
--- a/mercurial/hgweb.py Thu Aug 04 05:14:59 2005 -0800
+++ b/mercurial/hgweb.py Thu Aug 04 13:31:25 2005 -0800
@@ -6,7 +6,7 @@
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
-import os, cgi, time, re, difflib, sys, zlib
+import os, cgi, time, re, difflib, socket, sys, zlib
from mercurial.hg import *
from mercurial.ui import *
@@ -699,11 +699,14 @@
else:
write(self.t("error"))
-def create_server(path, name, templates, address, port,
+def create_server(path, name, templates, address, port, use_ipv6 = False,
accesslog = sys.stdout, errorlog = sys.stderr):
import BaseHTTPServer
+ class IPv6HTTPServer(BaseHTTPServer.HTTPServer):
+ address_family = socket.AF_INET6
+
class hgwebhandler(BaseHTTPServer.BaseHTTPRequestHandler):
def log_error(self, format, *args):
errorlog.write("%s - - [%s] %s\n" % (self.address_string(),
@@ -774,10 +777,13 @@
sys.argv, sys.stdin, sys.stdout, sys.stderr = save
hg = hgweb(path, name, templates)
- return BaseHTTPServer.HTTPServer((address, port), hgwebhandler)
+ if use_ipv6:
+ return IPv6HTTPServer((address, port), hgwebhandler)
+ else:
+ return BaseHTTPServer.HTTPServer((address, port), hgwebhandler)
-def server(path, name, templates, address, port,
+def server(path, name, templates, address, port, use_ipv6 = False,
accesslog = sys.stdout, errorlog = sys.stderr):
- httpd = create_server(path, name, templates, address, port,
+ httpd = create_server(path, name, templates, address, port, use_ipv6,
accesslog, errorlog)
httpd.serve_forever()
--- a/tests/run-tests Thu Aug 04 05:14:59 2005 -0800
+++ b/tests/run-tests Thu Aug 04 13:31:25 2005 -0800
@@ -27,11 +27,11 @@
HGTMP=""
cleanup_exit() {
rm -rf "$HGTMP"
- exit $1
}
# Remove temporary files even if we get interrupted
-trap "cleanup_exit 255" TERM KILL INT QUIT ABRT
+trap "cleanup_exit" 0 # normal exit
+trap "exit 255" 1 2 3 6 15 # HUP INT QUIT ABRT TERM
HGTMP="${TMPDIR-/tmp}/hgtests.$RANDOM.$RANDOM.$RANDOM.$$"
(umask 077 && mkdir "$HGTMP") || {
@@ -61,7 +61,7 @@
chmod 755 "$INST/bin/hg"
else
cat tests/install.err
- cleanup_exit 1
+ exit 1
fi
cd "$TESTDIR"
@@ -97,17 +97,11 @@
if diff -u "$OUTOK" "$OUT" > /dev/null; then
: no differences
else
- if FIXME="`grep 'FIXME' \"$TESTDIR/$1\"`"; then
- echo
- echo "$1 failed, but this is ignored because of:"
- echo "$FIXME"
- else
- cp "$OUT" "$ERR"
- echo
- echo "$1 output changed:"
- diff -u "$OUTOK" "$ERR" || true
- fail=1
- fi
+ cp "$OUT" "$ERR"
+ echo
+ echo "$1 output changed:"
+ diff -u "$OUTOK" "$ERR" || true
+ fail=1
fi
fi
@@ -132,6 +126,6 @@
echo "Ran $tests tests, $failed failed."
if [ $failed -gt 0 ] ; then
- cleanup_exit 1
+ exit 1
fi
-cleanup_exit 0
+exit 0
--- a/tests/test-clone Thu Aug 04 05:14:59 2005 -0800
+++ b/tests/test-clone Thu Aug 04 13:31:25 2005 -0800
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
mkdir a
cd a
--- a/tests/test-clone-failure Thu Aug 04 05:14:59 2005 -0800
+++ b/tests/test-clone-failure Thu Aug 04 13:31:25 2005 -0800
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
# No local source
hg clone a b
--- a/tests/test-merge-revert Thu Aug 04 05:14:59 2005 -0800
+++ b/tests/test-merge-revert Thu Aug 04 13:31:25 2005 -0800
@@ -1,5 +1,4 @@
#!/bin/sh
-# FIXME: This test may fail due to an uncritical bug in Mercurial.
mkdir t
cd t
--- a/tests/test-merge-revert.out Thu Aug 04 05:14:59 2005 -0800
+++ b/tests/test-merge-revert.out Thu Aug 04 13:31:25 2005 -0800
@@ -26,6 +26,7 @@
+ hg update
merging file1
+ hg diff
+FIXME: This is a known bug:
+ hg status
+ hg id
3aa14bbc23d9 tip
--- a/tests/test-merge-revert2 Thu Aug 04 05:14:59 2005 -0800
+++ b/tests/test-merge-revert2 Thu Aug 04 13:31:25 2005 -0800
@@ -1,5 +1,4 @@
#!/bin/sh
-# FIXME: This test may fail due to an uncritical bug in Mercurial.
mkdir t
cd t
--- a/tests/test-merge-revert2.out Thu Aug 04 05:14:59 2005 -0800
+++ b/tests/test-merge-revert2.out Thu Aug 04 13:31:25 2005 -0800
@@ -44,6 +44,7 @@
3aa14bbc23d9+ tip
+ hg revert
+ hg diff
+FIXME: This is a known bug:
+ hg status
+ hg id
3aa14bbc23d9 tip