Merge with BOS
authormpm@selenic.com
Thu, 04 Aug 2005 13:31:25 -0800
changeset 839 9c918287d10b
parent 836 1fe3b14c7044 (diff)
parent 838 0fc4b1ab57e3 (current diff)
child 840 141744605b51
child 868 6a8a50bcc143
Merge with BOS
doc/hg.1.txt
hgeditor
hgmerge
mercurial/bdiff.c
mercurial/commands.py
mercurial/hg.py
mercurial/hgweb.py
mercurial/util.py
tests/run-tests
tests/test-clone
tests/test-clone-failure
tests/test-merge-revert
tests/test-merge-revert.out
tests/test-merge-revert2
tests/test-merge-revert2.out
tests/test-merge5.out
tests/test-push-warn
tests/test-push-warn.out
--- 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