--- a/.hgsigs Wed May 11 01:56:59 2016 +0000
+++ b/.hgsigs Tue May 17 11:28:46 2016 -0500
@@ -126,3 +126,4 @@
740156eedf2c450aee58b1a90b0e826f47c5da64 0 iQIVAwUAVxLGMCBXgaxoKi1yAQLhIg/8DDX+sCz7LmqO47/FfTo+OqGR+bTTqpfK3WebitL0Z6hbXPj7s45jijqIFGqKgMPqS5oom1xeuGTPHdYA0NNoc/mxSCuNLfuXYolpNWPN71HeSDRV9SnhMThG5HSxI+P0Ye4rbsCHrVV+ib1rV81QE2kZ9aZsJd0HnGd512xJ+2ML7AXweM/4lcLmMthN+oi/dv1OGLzfckrcr/fEATCLZt55eO7idx11J1Fk4ptQ6dQ/bKznlD4hneyy1HMPsGxw+bCXrMF2C/nUiRLHdKgGqZ+cDq6loQRfFlQoIhfoEnWC424qbjH4rvHgkZHqC59Oi/ti9Hi75oq9Tb79yzlCY/fGsdrlJpEzrTQdHFMHUoO9CC+JYObXHRo3ALnC5350ZBKxlkdpmucrHTgcDabfhRlx9vDxP4RDopm2hAjk2LJH7bdxnGEyZYkTOZ3hXKnVpt2hUQb4jyzzC9Kl47TFpPKNVKI+NLqRRZAIdXXiy24KD7WzzE6L0NNK0/IeqKBENLL8I1PmDQ6XmYTQVhTuad1jjm2PZDyGiXmJFZO1O/NGecVTvVynKsDT6XhEvzyEtjXqD98rrhbeMHTcmNSwwJMDvm9ws0075sLQyq2EYFG6ECWFypdA/jfumTmxOTkMtuy/V1Gyq7YJ8YaksZ7fXNY9VuJFP72grmlXc6Dvpr4=
f85de28eae32e7d3064b1a1321309071bbaaa069 0 iQIVAwUAVyZQaiBXgaxoKi1yAQJhCQ//WrRZ55k3VI/OgY+I/HvgFHOC0sbhe207Kedxvy00a3AtXM6wa5E95GNX04QxUfTWUf5ZHDfEgj0/mQywNrH1oJG47iPZSs+qXNLqtgAaXtrih6r4/ruUwFCRFxqK9mkhjG61SKicw3Q7uGva950g6ZUE5BsZ7XJWgoDcJzWKR+AH992G6H//Fhi4zFQAmB34++sm80wV6wMxVKA/qhQzetooTR2x9qrHpvCKMzKllleJe48yzPLJjQoaaVgXCDav0eIePFNw0WvVSldOEp/ADDdTGa65qsC1rO2BB1Cu5+frJ/vUoo0PwIgqgD6p2i41hfIKvkp6130TxmRVxUx+ma8gBYEpPIabV0flLU72gq8lMlGBBSnQ+fcZsfs/Ug0xRN0tzkEScmZFiDxRGk0y7IalXzv6irwOyC2fZCajXGJDzkROQXWMgy9eKkwuFhZBmPVYtrATSq3jHLVmJg5vfdeiVzA6NKxAgGm2z8AsRrijKK8WRqFYiH6xcWKG5u+FroPQdKa0nGCkPSTH3tvC6fAHTVm7JeXch5QE/LiS9Y575pM2PeIP+k+Fr1ugK0AEvYJAXa5UIIcdszPyI+TwPTtWaQ83X99qGAdmRWLvSYjqevOVr7F/fhO3XKFXRCcHA3EzVYnG7nWiVACYF3H2UgN4PWjStbx/Qhhdi9xAuks=
a56296f55a5e1038ea5016dace2076b693c28a56 0 iQIVAwUAVyZarCBXgaxoKi1yAQL87g/8D7whM3e08HVGDHHEkVUgqLIfueVy1mx0AkRvelmZmwaocFNGpZTd3AjSwy6qXbRNZFXrWU85JJvQCi3PSo/8bK43kwqLJ4lv+Hv2zVTvz30vbLWTSndH3oVRu38lIA7b5K9J4y50pMCwjKLG9iyp+aQG4RBz76fJMlhXy0gu38A8JZVKEeAnQCbtzxKXBzsC8k0/ku/bEQEoo9D4AAGlVTbl5AsHMp3Z6NWu7kEHAX/52/VKU2I0LxYqRxoL1tjTVGkAQfkOHz1gOhLXUgGSYmA9Fb265AYj9cnGWCfyNonlE0Rrk2kAsrjBTGiLyb8WvK/TZmRo4ZpNukzenS9UuAOKxA22Kf9+oN9kKBu1HnwqusYDH9pto1WInCZKV1al7DMBXbGFcnyTXk2xuiTGhVRG5LzCO2QMByBLXiYl77WqqJnzxK3v5lAc/immJl5qa3ATUlTnVBjAs+6cbsbCoY6sjXCT0ClndA9+iZZ1TjPnmLrSeFh5AoE8WHmnFV6oqGN4caX6wiIW5vO+x5Q2ruSsDrwXosXIYzm+0KYKRq9O+MaTwR44Dvq3/RyeIu/cif/Nc7B8bR5Kf7OiRf2T5u97MYAomwGcQfXqgUfm6y7D3Yg+IdAdAJKitxhRPsqqdxIuteXMvOvwukXNDiWP1zsKoYLI37EcwzvbGLUlZvg=
+aaabed77791a75968a12b8c43ad263631a23ee81 0 iQIVAwUAVzpH4CBXgaxoKi1yAQLm5A/9GUYv9CeIepjcdWSBAtNhCBJcqgk2cBcV0XaeQomfxqYWfbW2fze6eE+TrXPKTX1ajycgqquMyo3asQolhHXwasv8+5CQxowjGfyVg7N/kyyjgmJljI+rCi74VfnsEhvG/J4GNr8JLVQmSICfALqQjw7XN8doKthYhwOfIY2vY419613v4oeBQXSsItKC/tfKw9lYvlk4qJKDffJQFyAekgv43ovWqHNkl4LaR6ubtjOsxCnxHfr7OtpX3muM9MLT/obBax5I3EsmiDTQBOjbvI6TcLczs5tVCnTa1opQsPUcEmdA4WpUEiTnLl9lk9le/BIImfYfEP33oVYmubRlKhJYnUiu89ao9L+48FBoqCY88HqbjQI1GO6icfRJN/+NLVeE9wubltbWFETH6e2Q+Ex4+lkul1tQMLPcPt10suMHnEo3/FcOTPt6/DKeMpsYgckHSJq5KzTg632xifyySmb9qkpdGGpY9lRal6FHw3rAhRBqucMgxso4BwC51h04RImtCUQPoA3wpb4BvCHba/thpsUFnHefOvsu3ei4JyHXZK84LPwOj31PcucNFdGDTW6jvKrF1vVUIVS9uMJkJXPu0V4i/oEQSUKifJZivROlpvj1eHy3KeMtjq2kjGyXY2KdzxpT8wX/oYJhCtm1XWMui5f24XBjE6xOcjjm8k4=
--- a/.hgtags Wed May 11 01:56:59 2016 +0000
+++ b/.hgtags Tue May 17 11:28:46 2016 -0500
@@ -139,3 +139,4 @@
740156eedf2c450aee58b1a90b0e826f47c5da64 3.8-rc
f85de28eae32e7d3064b1a1321309071bbaaa069 3.8
a56296f55a5e1038ea5016dace2076b693c28a56 3.8.1
+aaabed77791a75968a12b8c43ad263631a23ee81 3.8.2
--- a/contrib/builddeb Wed May 11 01:56:59 2016 +0000
+++ b/contrib/builddeb Tue May 17 11:28:46 2016 -0500
@@ -58,6 +58,10 @@
fi
if [ -n "$distance" ] ; then
debver="$debver+$distance-$CODENAME-$node"
+elif [ "$DEBFLAGS" = "-S" ] ; then
+ # for building a ppa (--source-only) for a release (distance == 0), we need
+ # to version the distroseries so that we can upload to launchpad
+ debver="$debver~${CODENAME}1"
fi
control=debian/control
--- a/contrib/debian/control Wed May 11 01:56:59 2016 +0000
+++ b/contrib/debian/control Tue May 17 11:28:46 2016 -0500
@@ -42,6 +42,7 @@
${misc:Depends},
${python:Depends},
Recommends: mercurial (= ${source:Version}), ca-certificates
+Suggests: wish
Breaks: mercurial (<< ${source:Version})
Replaces: mercurial (<< 2.6.3)
Description: easy-to-use, scalable distributed version control system (common files)
--- a/doc/gendoc.py Wed May 11 01:56:59 2016 +0000
+++ b/doc/gendoc.py Tue May 17 11:28:46 2016 -0500
@@ -136,6 +136,7 @@
extrahelptable = [
(["common"], '', loaddoc('common')),
(["hg.1"], '', loaddoc('hg.1')),
+ (["hg-ssh.8"], '', loaddoc('hg-ssh.8')),
(["hgignore.5"], '', loaddoc('hgignore.5')),
(["hgrc.5"], '', loaddoc('hgrc.5')),
(["hgignore.5.gendoc"], '', loaddoc('hgignore')),
--- a/mercurial/commands.py Wed May 11 01:56:59 2016 +0000
+++ b/mercurial/commands.py Tue May 17 11:28:46 2016 -0500
@@ -4590,7 +4590,7 @@
subtopic = None
if name and '.' in name:
name, section = name.split('.', 1)
- section = section.lower()
+ section = encoding.lower(section)
if '.' in section:
subtopic, section = section.split('.', 1)
else:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/hg-ssh.8.txt Tue May 17 11:28:46 2016 -0500
@@ -0,0 +1,71 @@
+========
+ hg-ssh
+========
+
+----------------------------------------
+restricted ssh login shell for Mercurial
+----------------------------------------
+
+:Author: Thomas Arendsen Hein <thomas@intevation.de>
+:Organization: Mercurial
+:Manual section: 8
+:Manual group: Mercurial Manual
+
+.. contents::
+ :backlinks: top
+ :class: htmlonly
+ :depth: 1
+
+Synopsis
+""""""""
+**hg-ssh** repositories...
+
+Description
+"""""""""""
+**hg-ssh** is a wrapper for ssh access to a limited set of mercurial repos.
+
+To be used in ~/.ssh/authorized_keys with the "command" option, see sshd(8):
+command="hg-ssh path/to/repo1 /path/to/repo2 ~/repo3 ~user/repo4" ssh-dss ...
+(probably together with these other useful options:
+no-port-forwarding,no-X11-forwarding,no-agent-forwarding)
+
+This allows pull/push over ssh from/to the repositories given as arguments.
+
+If all your repositories are subdirectories of a common directory, you can
+allow shorter paths with:
+command="cd path/to/my/repositories && hg-ssh repo1 subdir/repo2"
+
+You can use pattern matching of your normal shell, e.g.:
+command="cd repos && hg-ssh user/thomas/* projects/{mercurial,foo}"
+
+You can also add a --read-only flag to allow read-only access to a key, e.g.:
+command="hg-ssh --read-only repos/\*"
+
+Bugs
+""""
+Probably lots, please post them to the mailing list (see Resources_
+below) when you find them.
+
+See Also
+""""""""
+|hg(1)|_
+
+Author
+""""""
+Written by Matt Mackall <mpm@selenic.com>
+
+Resources
+"""""""""
+Main Web Site: https://mercurial-scm.org/
+
+Source code repository: http://selenic.com/hg
+
+Mailing list: http://selenic.com/mailman/listinfo/mercurial
+
+Copying
+"""""""
+Copyright (C) 2005-2016 Matt Mackall.
+Free use of this software is granted under the terms of the GNU General
+Public License version 2 or any later version.
+
+.. include:: common.txt
--- a/mercurial/help/internals/revlogs.txt Wed May 11 01:56:59 2016 +0000
+++ b/mercurial/help/internals/revlogs.txt Tue May 17 11:28:46 2016 -0500
@@ -1,5 +1,5 @@
-Revisions Logs
-==============
+Revlogs
+=======
Revision logs - or *revlogs* - are an append only data structure for
storing discrete entries, or *revisions*. They are the primary storage
--- a/mercurial/minirst.py Wed May 11 01:56:59 2016 +0000
+++ b/mercurial/minirst.py Tue May 17 11:28:46 2016 -0500
@@ -724,7 +724,7 @@
x = b['key']
else:
x = b['lines'][0]
- x = x.lower().strip('"')
+ x = encoding.lower(x).strip('"')
if '(' in x:
x = x.split('(')[0]
return x
--- a/mercurial/patch.py Wed May 11 01:56:59 2016 +0000
+++ b/mercurial/patch.py Tue May 17 11:28:46 2016 -0500
@@ -1010,7 +1010,7 @@
ui.write("\n")
if r == 8: # ?
for c, t in ui.extractchoices(resps)[1]:
- ui.write('%s - %s\n' % (c, t.lower()))
+ ui.write('%s - %s\n' % (c, encoding.lower(t)))
continue
elif r == 0: # yes
ret = True
--- a/mercurial/progress.py Wed May 11 01:56:59 2016 +0000
+++ b/mercurial/progress.py Tue May 17 11:28:46 2016 -0500
@@ -163,7 +163,7 @@
sys.stderr.flush()
def clear(self):
- if not shouldprint(self.ui):
+ if not self.printed or not self.lastprint or not shouldprint(self.ui):
return
sys.stderr.write('\r%s\r' % (' ' * self.width()))
if self.printed:
--- a/tests/test-commit-interactive.t Wed May 11 01:56:59 2016 +0000
+++ b/tests/test-commit-interactive.t Tue May 17 11:28:46 2016 -0500
@@ -878,6 +878,32 @@
abort: user quit
[255]
+#if gettext
+
+Test translated help message
+
+str.lower() instead of encoding.lower(str) on translated message might
+make message meaningless, because some encoding uses 0x41(A) - 0x5a(Z)
+as the second or later byte of multi-byte character.
+
+For example, "\x8bL\x98^" (translation of "record" in ja_JP.cp932)
+contains 0x4c (L). str.lower() replaces 0x4c(L) by 0x6c(l) and this
+replacement makes message meaningless.
+
+This tests that translated help message is lower()-ed correctly.
+
+ $ LANGUAGE=ja
+ $ export LANGUAGE
+
+ $ hg commit -i --encoding cp932 2>&1 <<EOF | grep '^y - '
+ > ?
+ > q
+ > EOF
+ y - \x82\xb1\x82\xcc\x95\xcf\x8dX\x82\xf0\x8bL\x98^(yes) (esc)
+
+ $ LANGUAGE=
+#endif
+
Skip
$ hg commit -i <<EOF
--- a/tests/test-help.t Wed May 11 01:56:59 2016 +0000
+++ b/tests/test-help.t Tue May 17 11:28:46 2016 -0500
@@ -1539,6 +1539,78 @@
files List of strings. All files modified, added, or removed by
this changeset.
+Test section lookup by translated message
+
+str.lower() instead of encoding.lower(str) on translated message might
+make message meaningless, because some encoding uses 0x41(A) - 0x5a(Z)
+as the second or later byte of multi-byte character.
+
+For example, "\x8bL\x98^" (translation of "record" in ja_JP.cp932)
+contains 0x4c (L). str.lower() replaces 0x4c(L) by 0x6c(l) and this
+replacement makes message meaningless.
+
+This tests that section lookup by translated string isn't broken by
+such str.lower().
+
+ $ python <<EOF
+ > def escape(s):
+ > return ''.join('\u%x' % ord(uc) for uc in s.decode('cp932'))
+ > # translation of "record" in ja_JP.cp932
+ > upper = "\x8bL\x98^"
+ > # str.lower()-ed section name should be treated as different one
+ > lower = "\x8bl\x98^"
+ > with open('ambiguous.py', 'w') as fp:
+ > fp.write("""# ambiguous section names in ja_JP.cp932
+ > u'''summary of extension
+ >
+ > %s
+ > ----
+ >
+ > Upper name should show only this message
+ >
+ > %s
+ > ----
+ >
+ > Lower name should show only this message
+ >
+ > subsequent section
+ > ------------------
+ >
+ > This should be hidden at "hg help ambiguous" with section name.
+ > '''
+ > """ % (escape(upper), escape(lower)))
+ > EOF
+
+ $ cat >> $HGRCPATH <<EOF
+ > [extensions]
+ > ambiguous = ./ambiguous.py
+ > EOF
+
+ $ python <<EOF | sh
+ > upper = "\x8bL\x98^"
+ > print "hg --encoding cp932 help -e ambiguous.%s" % upper
+ > EOF
+ \x8bL\x98^ (esc)
+ ----
+
+ Upper name should show only this message
+
+
+ $ python <<EOF | sh
+ > lower = "\x8bl\x98^"
+ > print "hg --encoding cp932 help -e ambiguous.%s" % lower
+ > EOF
+ \x8bl\x98^ (esc)
+ ----
+
+ Lower name should show only this message
+
+
+ $ cat >> $HGRCPATH <<EOF
+ > [extensions]
+ > ambiguous = !
+ > EOF
+
Test dynamic list of merge tools only shows up once
$ hg help merge-tools
Merge Tools
--- a/tests/test-install.t Wed May 11 01:56:59 2016 +0000
+++ b/tests/test-install.t Tue May 17 11:28:46 2016 -0500
@@ -126,6 +126,7 @@
$ python wixxml.py help
Not installed:
help/common.txt
+ help/hg-ssh.8.txt
help/hg.1.txt
help/hgignore.5.txt
help/hgrc.5.txt
--- a/tests/test-remove.t Wed May 11 01:56:59 2016 +0000
+++ b/tests/test-remove.t Tue May 17 11:28:46 2016 -0500
@@ -322,8 +322,6 @@
\r (no-eol) (esc)
deleting [===========================================>] 2/2\r (no-eol) (esc)
\r (no-eol) (esc)
- \r (no-eol) (esc)
- \r (no-eol) (esc)
removing test/bar (glob)
removing test/foo (glob)
exit code: 0
@@ -348,8 +346,6 @@
\r (no-eol) (esc)
deleting [===========================================>] 2/2\r (no-eol) (esc)
\r (no-eol) (esc)
- \r (no-eol) (esc)
- \r (no-eol) (esc)
removing test/bar (glob)
removing test/foo (glob)
exit code: 0
@@ -374,8 +370,6 @@
\r (no-eol) (esc)
deleting [===========================================>] 1/1\r (no-eol) (esc)
\r (no-eol) (esc)
- \r (no-eol) (esc)
- \r (no-eol) (esc)
removing test/bar (glob)
not removing test/foo: file still exists (glob)
exit code: 1
@@ -400,8 +394,6 @@
\r (no-eol) (esc)
deleting [===========================================>] 2/2\r (no-eol) (esc)
\r (no-eol) (esc)
- \r (no-eol) (esc)
- \r (no-eol) (esc)
removing test/bar (glob)
removing test/foo (glob)
exit code: 0
@@ -429,8 +421,6 @@
\r (no-eol) (esc)
deleting [===========================================>] 1/1\r (no-eol) (esc)
\r (no-eol) (esc)
- \r (no-eol) (esc)
- \r (no-eol) (esc)
removing issue1861/b/c/y (glob)
$ hg ci -m remove
$ ls issue1861
@@ -465,8 +455,6 @@
\r (no-eol) (esc)
deleting [===========================================>] 1/1\r (no-eol) (esc)
\r (no-eol) (esc)
- \r (no-eol) (esc)
- \r (no-eol) (esc)
removing d1/a (glob)
$ hg rm --after nosuch
--- a/tests/test-subrepo-deep-nested-change.t Wed May 11 01:56:59 2016 +0000
+++ b/tests/test-subrepo-deep-nested-change.t Tue May 17 11:28:46 2016 -0500
@@ -214,8 +214,6 @@
\r (no-eol) (esc)
deleting [===========================================>] 2/2\r (no-eol) (esc)
\r (no-eol) (esc)
- \r (no-eol) (esc)
- \r (no-eol) (esc)
removing sub1/sub2/folder/test.txt (glob)
removing sub1/sub2/test.txt (glob)
$ hg status -S