i18n-merge stable heads stable
authorMartin Geisler <mg@aragost.com>
Mon, 24 Jan 2011 11:27:56 +0100
branchstable
changeset 13311 9b678a2c0400
parent 13308 d76115391140 (diff)
parent 13310 deab25946eb2 (current diff)
child 13312 9f188734dbb0
i18n-merge stable heads
--- a/.hgsigs	Fri Dec 24 15:10:24 2010 +0100
+++ b/.hgsigs	Mon Jan 24 11:27:56 2011 +0100
@@ -31,3 +31,4 @@
 333421b9e0f96c7bc788e5667c146a58a9440a55 0 iD8DBQBMz0HOywK+sNU5EO8RAlsEAJ0USh6yOG7OrWkADGunVt9QimBQnwCbBqeMnKgSbwEw8jZwE3Iz1mdrYlo=
 4438875ec01bd0fc32be92b0872eb6daeed4d44f 0 iD8DBQBM4WYUywK+sNU5EO8RAhCVAJ0dJswachwFAHALmk1x0RJehxzqPQCbBNskP9n/X689jB+btNTZTyKU/fw=
 6aff4f144ad356311318b0011df0bb21f2c97429 0 iD8DBQBM9uxXywK+sNU5EO8RAv+4AKCDj4qKP16GdPaq1tP6BUwpM/M1OACfRyzLPp/qiiN8xJTWoWYSe/XjJug=
+e3bf16703e2601de99e563cdb3a5d50b64e6d320 0 iD8DBQBNH8WqywK+sNU5EO8RAiQTAJ9sBO+TeiGro4si77VVaQaA6jcRUgCfSA28dBbjj0oFoQwvPoZjANiZBH8=
--- a/.hgtags	Fri Dec 24 15:10:24 2010 +0100
+++ b/.hgtags	Mon Jan 24 11:27:56 2011 +0100
@@ -43,3 +43,4 @@
 333421b9e0f96c7bc788e5667c146a58a9440a55 1.7
 4438875ec01bd0fc32be92b0872eb6daeed4d44f 1.7.1
 6aff4f144ad356311318b0011df0bb21f2c97429 1.7.2
+e3bf16703e2601de99e563cdb3a5d50b64e6d320 1.7.3
--- a/contrib/win32/mercurial.iss	Fri Dec 24 15:10:24 2010 +0100
+++ b/contrib/win32/mercurial.iss	Mon Jan 24 11:27:56 2011 +0100
@@ -83,6 +83,7 @@
 Source: dist\Microsoft.VC*.CRT.manifest; DestDir: {app}; Flags: skipifsourcedoesntexist
 Source: dist\library.zip; DestDir: {app}
 Source: dist\add_path.exe; DestDir: {app}
+Source: dist\cacert.pem; Destdir: {app}
 Source: doc\*.html; DestDir: {app}\Docs
 Source: doc\style.css; DestDir: {app}\Docs
 Source: mercurial\help\*.txt; DestDir: {app}\help
@@ -93,6 +94,7 @@
 
 [INI]
 Filename: {app}\Mercurial.url; Section: InternetShortcut; Key: URL; String: http://mercurial.selenic.com/
+Filename: {app}\Mercurial.ini; Section: web; Key: cacerts; String: {app}\cacert.pem
 
 [UninstallDelete]
 Type: files; Name: {app}\Mercurial.url
--- a/contrib/win32/win32-build.txt	Fri Dec 24 15:10:24 2010 +0100
+++ b/contrib/win32/win32-build.txt	Mon Jan 24 11:27:56 2011 +0100
@@ -34,7 +34,7 @@
   Inno Setup
       http://www.jrsoftware.org/isdl.php#qsp
 
-      Get and install ispack-5.3.10.exe which includes Inno Setup Processor,
+      Get and install ispack-5.3.10.exe or later (includes Inno Setup Processor),
       which is necessary to package Mercurial.
 
   ISTool - optional
@@ -46,6 +46,9 @@
   Docutils
       http://docutils.sourceforge.net/
 
+  CA Certs file
+      http://curl.haxx.se/ca/cacert.pem
+
 And, of course, Mercurial itself.
 
 Once you have all this installed and built, clone a copy of the
@@ -73,7 +76,7 @@
     "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86_amd64
     python setup.py py2exe -b 3
 
-Copy add_path.exe into the dist directory that just got created.
+Copy add_path.exe and cacert.pem files into the dist directory that just got created.
 
 If you are using Python up to version 2.5.4, copy mfc71.dll into the dist
 directory that just got created.
--- a/contrib/wix/guids.wxi	Fri Dec 24 15:10:24 2010 +0100
+++ b/contrib/wix/guids.wxi	Mon Jan 24 11:27:56 2011 +0100
@@ -44,6 +44,8 @@
   <?define COPYING.guid = {B7801DBA-1C49-4BF4-91AD-33C65F5C7895} ?>
   <?define mercurial.rc.guid = {1D5FAEEE-7E6E-43B1-9F7F-802714316B15} ?>
   <?define mergetools.rc.guid = {E8A1DC29-FF40-4B5F-BD12-80B9F7BF0CCD} ?>
+  <?define paths.rc.guid = {F9ADF21D-5F0B-4934-8CD9-14BE63664721} ?>
+  <?define cacert.pem.guid = {EC1B2630-FE21-46E6-915B-A6545AF703D4} ?>
   <?define ProgramMenuDir.guid = {D5A63320-1238-489B-B68B-CF053E9577CA} ?>
   <?define hgcmd.guid = {65CCC756-E72E-4C5F-901E-D575EDC80DB3} ?>
 
--- a/contrib/wix/mercurial.wxs	Fri Dec 24 15:10:24 2010 +0100
+++ b/contrib/wix/mercurial.wxs	Mon Jan 24 11:27:56 2011 +0100
@@ -82,6 +82,15 @@
               <File Id='mergetools.rc' Name='MergeTools.rc' Source='contrib\mergetools.hgrc'
                     ReadOnly='yes' KeyPath='yes'/>
             </Component>
+            <Component Id='paths.rc' Guid='$(var.paths.rc.guid)' Win64='$(var.IsX64)'>
+              <CreateFolder/>
+              <IniFile Id="ini0" Action="createLine" Directory="HGRCD" Name="Paths.rc"
+                Section="web" Key="cacerts" Value="[INSTALLDIR]hgrc.d\cacert.pem" />
+            </Component>
+            <Component Id='cacert.pem' Guid='$(var.cacert.pem.guid)' Win64='$(var.IsX64)'>
+              <File Id='cacert.pem' Name='cacert.pem' Source='..\misc\cacert.pem'
+                    ReadOnly='yes' KeyPath='yes'/>
+            </Component>
           </Directory>
 
           <Directory Id='binFolder' Name='bin'>
@@ -128,6 +137,8 @@
         <ComponentRef Id='COPYING' />
         <ComponentRef Id='mercurial.rc' />
         <ComponentRef Id='mergetools.rc' />
+        <ComponentRef Id='paths.rc' />
+        <ComponentRef Id='cacert.pem' />
         <ComponentRef Id='helpFolder' />
         <ComponentRef Id='HgCmd' />
         <ComponentGroupRef Id='templatesFolder' />
--- a/doc/hgrc.5.txt	Fri Dec 24 15:10:24 2010 +0100
+++ b/doc/hgrc.5.txt	Mon Jan 24 11:27:56 2011 +0100
@@ -991,10 +991,11 @@
     third-party tools like email notification hooks can construct
     URLs. Example: ``http://hgserver/repos/``.
 ``cacerts``
-    Path to file containing a list of PEM encoded certificate authority
-    certificates. If specified on the client, then it will verify the identity
-    of remote HTTPS servers with these certificates. The form must be
-    as follows::
+    Path to file containing a list of PEM encoded certificate
+    authority certificates. Environment variables and ``~user``
+    constructs are expanded in the filename. If specified on the
+    client, then it will verify the identity of remote HTTPS servers
+    with these certificates. The form must be as follows::
 
         -----BEGIN CERTIFICATE-----
         ... (certificate in base64 PEM encoding) ...
--- a/hgext/mq.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/hgext/mq.py	Mon Jan 24 11:27:56 2011 +0100
@@ -2504,7 +2504,7 @@
     backup = 'all'
     if opts.get('backup'):
         backup = 'strip'
-    elif opts.get('no-backup') or opts.get('nobackup'):
+    elif opts.get('no_backup') or opts.get('nobackup'):
         backup = 'none'
 
     cl = repo.changelog
--- a/hgext/notify.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/hgext/notify.py	Mon Jan 24 11:27:56 2011 +0100
@@ -215,8 +215,8 @@
                 s = ctx.description().lstrip().split('\n', 1)[0].rstrip()
                 subject = '%s: %s' % (self.root, s)
         maxsubject = int(self.ui.config('notify', 'maxsubject', 67))
-        if maxsubject and len(subject) > maxsubject:
-            subject = subject[:maxsubject - 3] + '...'
+        if maxsubject:
+            subject = util.ellipsis(subject, maxsubject)
         msg['Subject'] = mail.headencode(self.ui, subject,
                                          self.charsets, self.test)
 
--- a/i18n/pt_BR.po	Fri Dec 24 15:10:24 2010 +0100
+++ b/i18n/pt_BR.po	Mon Jan 24 11:27:56 2011 +0100
@@ -2335,30 +2335,35 @@
 "do Mercurial. Ele usa duas seções ``[patterns]`` e ``[repository]``."
 
 msgid ""
-"The ``[patterns]`` section specifies the line endings used in the\n"
-"working directory. The format is specified by a file pattern. The\n"
-"first match is used, so put more specific patterns first. The\n"
-"available line endings are ``LF``, ``CRLF``, and ``BIN``."
-msgstr ""
-"A seção ``[patterns]`` especifica as quebras de linha usadas no\n"
-"diretório de trabalho. O formato é especificado por um padrão de nomes\n"
+"The ``[patterns]`` section specifies how line endings should be\n"
+"converted between the working copy and the repository. The format is\n"
+"specified by a file pattern. The first match is used, so put more\n"
+"specific patterns first. The available line endings are ``LF``,\n"
+"``CRLF``, and ``BIN``."
+msgstr ""
+"A seção ``[patterns]`` especifica como quebras de linha devem ser\n"
+"convertidas entre o diretório de trabalho e o repositório.\n"
+"O formato é especificado por um padrão de nomes\n"
 "de arquivo. O primeiro padrão que combinar será usado, de modo que\n"
 "padrões mais específicos devem ser especificados primeiro. Os tipos\n"
 "de quebra de linha disponíveis são ``LF``, ``CRLF`` e ``BIN``."
 
 msgid ""
 "Files with the declared format of ``CRLF`` or ``LF`` are always\n"
-"checked out in that format and files declared to be binary (``BIN``)\n"
-"are left unchanged. Additionally, ``native`` is an alias for the\n"
-"platform's default line ending: ``LF`` on Unix (including Mac OS X)\n"
-"and ``CRLF`` on Windows. Note that ``BIN`` (do nothing to line\n"
-"endings) is Mercurial's default behaviour; it is only needed if you\n"
-"need to override a later, more general pattern."
+"checked out and stored in the repository in that format and files\n"
+"declared to be binary (``BIN``) are left unchanged. Additionally,\n"
+"``native`` is an alias for checking out in the platform's default line\n"
+"ending: ``LF`` on Unix (including Mac OS X) and ``CRLF`` on\n"
+"Windows. Note that ``BIN`` (do nothing to line endings) is Mercurial's\n"
+"default behaviour; it is only needed if you need to override a later,\n"
+"more general pattern."
 msgstr ""
 "Arquivos com formato declarado como ``CRLF`` ou ``LF`` são sempre trazidos\n"
-"para o diretório de trabalho no tal formato, e arquivos declarados como\n"
+"para o diretório de trabalho e guardados no repositório no tal formato,\n"
+"e arquivos declarados como\n"
 "binários (``BIN``) não são alterados. Adicionalmente, ``native`` é um\n"
-"apelido para o tipo de quebra de linha padrão na plataforma: ``LF`` em\n"
+"apelido para trazer o arquivo para o diretório de trabalho\n"
+"no tipo de quebra de linha padrão na plataforma: ``LF`` em\n"
 "Unix (inclusive no Mac OS X) e ``CRLF`` no Windows. Note que ``BIN`` (não\n"
 "fazer nada em relação a quebra de linhas) é o comportamento padrão do\n"
 "Mercurial; em geral só é necessário se você precisar sobrepor um padrão\n"
@@ -2412,6 +2417,17 @@
 "  native = LF"
 
 msgid ""
+".. note::\n"
+"   The rules will first apply when files are touched in the working\n"
+"   copy, e.g. by updating to null and back to tip to touch all files."
+msgstr ""
+".. note::\n"
+"   As regras passarão a ser aplicadas a partir do momento em que os\n"
+"   arquivos forem mexidos na cópia de trabalho, por exemplo após um\n"
+"   update para null e de volta para a revisão atual para mexer em\n"
+"   todos os arquivos."
+
+msgid ""
 "The extension uses an optional ``[eol]`` section in your hgrc file\n"
 "(not the ``.hgeol`` file) for settings that control the overall\n"
 "behavior. There are two settings:"
@@ -8781,8 +8797,8 @@
 msgstr "use \"hg help\" para a lista completa de comandos ou \"hg -v\" para detalhes"
 
 #, python-format
-msgid "use \"hg -v help%s\" to show aliases and global options"
-msgstr "use \"hg -v help%s\" para mostrar apelidos de comandos e opções globais"
+msgid "use \"hg -v help%s\" to show builtin aliases and global options"
+msgstr "use \"hg -v help%s\" para mostrar apelidos pré-definidos de comandos e opções globais"
 
 #, python-format
 msgid "use \"hg -v help %s\" to show global options"
@@ -10122,12 +10138,15 @@
 msgid ""
 "    Tags are used to name particular revisions of the repository and are\n"
 "    very useful to compare different revisions, to go back to significant\n"
-"    earlier versions or to mark branch points as releases, etc."
+"    earlier versions or to mark branch points as releases, etc. Changing\n"
+"    an existing tag is normally disallowed; use -f/--force to override."
 msgstr ""
 "    Etiquetas são usadas para nomear determinadas revisões do\n"
 "    repositório e são muito úteis para comparar diferentes revisões,\n"
 "    para voltar para versões significativas anteriores ou para marcar\n"
-"    pontos de ramificação para versões de distribuição, etc."
+"    pontos de ramificação para versões de distribuição, etc.\n"
+"    Alterar uma etiqueta existente normalmente não é permitido\n"
+"    use -f/--force para forçar essa alteração."
 
 msgid ""
 "    If no revision is given, the parent of the working directory is\n"
@@ -10139,19 +10158,32 @@
 
 msgid ""
 "    To facilitate version control, distribution, and merging of tags,\n"
-"    they are stored as a file named \".hgtags\" which is managed\n"
-"    similarly to other project files and can be hand-edited if\n"
-"    necessary. The file '.hg/localtags' is used for local tags (not\n"
-"    shared among repositories)."
+"    they are stored as a file named \".hgtags\" which is managed similarly\n"
+"    to other project files and can be hand-edited if necessary. This\n"
+"    also means that tagging creates a new commit. The file\n"
+"    \".hg/localtags\" is used for local tags (not shared among\n"
+"    repositories)."
 msgstr ""
 "    Para facilitar o controle de versão, a distribuição e a\n"
 "    mesclagem de etiquetas, elas são armazenadas em um arquivo\n"
 "    chamado \".hgtags\" que é gerenciado de forma similar a\n"
 "    outros arquivos do projeto, e pode ser editado manualmente se\n"
-"    necessário. O arquivo '.hg/localtags' é usado para etiquetas\n"
+"    necessário. O arquivo \".hg/localtags\" é usado para etiquetas\n"
 "    locais (não compartilhadas entre repositórios)."
 
 msgid ""
+"    Tag commits are usually made at the head of a branch. If the parent\n"
+"    of the working directory is not a branch head, :hg:`tag` aborts; use\n"
+"    -f/--force to force the tag commit to be based on a non-head\n"
+"    changeset."
+msgstr ""
+"    A consolidação de revisões de etiqueta são em geral feitas na\n"
+"    cabeça de um ramo. Se o pai do diretório de trabalho não for a\n"
+"    cabeça de um ramo, :hg:`tag` abortará; use -f/--force para\n"
+"    forçar a consolidação de uma etiqueta a se basear em uma \n"
+"    revisão que não seja uma cabeça de ramo."
+
+msgid ""
 "    Since tag names have priority over branch names during revision\n"
 "    lookup, using an existing branch name as a tag name is discouraged."
 msgstr ""
@@ -10184,6 +10216,12 @@
 msgid "tag '%s' already exists (use -f to force)"
 msgstr "a etiqueta '%s' já existe (use -f para forçar)"
 
+msgid "uncommitted merge"
+msgstr "mesclagem não consolidada pendente"
+
+msgid "not at a branch head (use -f to force)"
+msgstr "não está em uma cabeça de ramo (use -f para forçar)"
+
 msgid "list repository tags"
 msgstr "lista as etiquetas do repositório"
 
@@ -11094,8 +11132,8 @@
 msgid "list the changed files of a revision"
 msgstr "lista os arquivos modificados por uma revisão"
 
-msgid "replace existing tag"
-msgstr "substitui etiqueta existente"
+msgid "force tag"
+msgstr "força a mudança da etiqueta"
 
 msgid "make the tag local"
 msgstr "torna a etiqueta local"
@@ -14063,10 +14101,11 @@
 msgstr ":author: String. O autor da revisão, sem modificações."
 
 msgid ""
-":branches: String. The name of the branch on which the changeset was\n"
-"    committed. Will be empty if the branch name was default."
-msgstr ""
-":branches: String. O nome do ramo no qual a revisão foi\n"
+":branches: List of strings. The name of the branch on which the\n"
+"    changeset was committed. Will be empty if the branch name was\n"
+"    default."
+msgstr ""
+":branches: Lista de strings. O nome do ramo no qual a revisão foi\n"
 "    consolidada. Será vazio se o nome do ramo for default."
 
 msgid ":children: List of strings. The children of the changeset."
@@ -14560,6 +14599,10 @@
 msgstr "(mesclagem de ramo, não esqueça de consolidar)\n"
 
 #, python-format
+msgid "config file %s not found!"
+msgstr "arquivo de configuração %s não encontrado!"
+
+#, python-format
 msgid "error reading %s/.hg/hgrc: %s\n"
 msgstr "erro ao ler %s/.hg/hgrc: %s\n"
 
@@ -15887,14 +15930,21 @@
 msgid "certificate is for %s"
 msgstr "o certificado é para %s"
 
-msgid "no commonName found in certificate"
-msgstr "nenhum commonName encontrado no certificado"
+msgid "IDN in certificate not supported"
+msgstr "IDN no certificado não é suportado"
+
+msgid "no commonName or subjectAltName found in certificate"
+msgstr "nenhum commonName ou subjectAltName encontrado no certificado"
 
 #, python-format
 msgid "%s certificate error: %s"
 msgstr "erro no certificado de %s: %s"
 
 #, python-format
+msgid "warning: %s certificate not verified (check web.cacerts config setting)\n"
+msgstr "aviso: certificado %s não verificado (confira a opção de configuração web.cacerts)\n"
+
+#, python-format
 msgid "command '%s' failed: %s"
 msgstr "falha ao executar o comando '%s' : %s"
 
@@ -16170,6 +16220,8 @@
 msgid "push failed (unexpected response):"
 msgstr "o push falhou (resposta inesperada):"
 
+msgid "replace existing tag"
+msgstr "substitui etiqueta existente"
+
 msgid "- You should use single encoding in one repository."
 msgstr "- Você deve usar uma única codificação em um repositório."
-
--- a/i18n/sv.po	Fri Dec 24 15:10:24 2010 +0100
+++ b/i18n/sv.po	Mon Jan 24 11:27:56 2011 +0100
@@ -13,8 +13,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2010-11-01 13:33+0100\n"
-"PO-Revision-Date: 2010-11-01 13:42+0100\n"
+"POT-Creation-Date: 2010-12-19 19:38+0100\n"
+"PO-Revision-Date: 2010-12-19 19:40+0100\n"
 "Last-Translator: Jens Bäckman <jens.backman@gmail.com>\n"
 "Language-Team: Swedish\n"
 "Language: Swedish\n"
@@ -1884,20 +1884,22 @@
 msgstr ""
 
 msgid ""
-"The ``[patterns]`` section specifies the line endings used in the\n"
-"working directory. The format is specified by a file pattern. The\n"
-"first match is used, so put more specific patterns first. The\n"
-"available line endings are ``LF``, ``CRLF``, and ``BIN``."
+"The ``[patterns]`` section specifies how line endings should be\n"
+"converted between the working copy and the repository. The format is\n"
+"specified by a file pattern. The first match is used, so put more\n"
+"specific patterns first. The available line endings are ``LF``,\n"
+"``CRLF``, and ``BIN``."
 msgstr ""
 
 msgid ""
 "Files with the declared format of ``CRLF`` or ``LF`` are always\n"
-"checked out in that format and files declared to be binary (``BIN``)\n"
-"are left unchanged. Additionally, ``native`` is an alias for the\n"
-"platform's default line ending: ``LF`` on Unix (including Mac OS X)\n"
-"and ``CRLF`` on Windows. Note that ``BIN`` (do nothing to line\n"
-"endings) is Mercurial's default behaviour; it is only needed if you\n"
-"need to override a later, more general pattern."
+"checked out and stored in the repository in that format and files\n"
+"declared to be binary (``BIN``) are left unchanged. Additionally,\n"
+"``native`` is an alias for checking out in the platform's default line\n"
+"ending: ``LF`` on Unix (including Mac OS X) and ``CRLF`` on\n"
+"Windows. Note that ``BIN`` (do nothing to line endings) is Mercurial's\n"
+"default behaviour; it is only needed if you need to override a later,\n"
+"more general pattern."
 msgstr ""
 
 msgid ""
@@ -1930,6 +1932,12 @@
 msgstr ""
 
 msgid ""
+".. note::\n"
+"   The rules will first apply when files are touched in the working\n"
+"   copy, e.g. by updating to null and back to tip to touch all files."
+msgstr ""
+
+msgid ""
 "The extension uses an optional ``[eol]`` section in your hgrc file\n"
 "(not the ``.hgeol`` file) for settings that control the overall\n"
 "behavior. There are two settings:"
@@ -1951,6 +1959,13 @@
 msgstr ""
 
 msgid ""
+"The ``win32text.forbid*`` hooks provided by the win32text extension\n"
+"have been unified into a single hook named ``eol.hook``. The hook will\n"
+"lookup the expected line endings from the ``.hgeol`` file, which means\n"
+"you must migrate to a ``.hgeol`` file first before using the hook."
+msgstr ""
+
+msgid ""
 "See :hg:`help patterns` for more information about the glob patterns\n"
 "used.\n"
 msgstr ""
@@ -2828,7 +2843,7 @@
 msgid ""
 "The default template mappings (view with :hg:`kwdemo -d`) can be\n"
 "replaced with customized keywords and templates. Again, run\n"
-":hg:`kwdemo` to control the results of your config changes."
+":hg:`kwdemo` to control the results of your configuration changes."
 msgstr ""
 
 msgid ""
@@ -3313,6 +3328,18 @@
 msgid "cannot refresh a revision with children"
 msgstr ""
 
+#, python-format
+msgid "warning: not refreshing %s\n"
+msgstr "varning: uppdaterar inte %s\n"
+
+#, python-format
+msgid "warning: not adding %s\n"
+msgstr "varning: lägger inte till %s\n"
+
+#, python-format
+msgid "warning: not removing %s\n"
+msgstr "varning: tar inte bort %s\n"
+
 msgid ""
 "refresh interrupted while patch was popped! (revert --all, qpush to "
 "recover)\n"
@@ -5057,8 +5084,8 @@
 msgid "changesets"
 msgstr "ändringar"
 
-msgid "fix unresolved conflicts with hg resolve then run hg rebase --continue"
-msgstr "fixa olösta konflikter med hg resolve, kör sedan hg rebase --continue"
+msgid "unresolved conflicts (see hg resolve, then hg rebase --continue)"
+msgstr "olösta konflikter (se hg resolve, sedan hg rebase --continue)"
 
 #, python-format
 msgid "no changes, revision %d skipped\n"
@@ -5647,11 +5674,13 @@
 msgid "Note that there are some limitations on using this extension:"
 msgstr ""
 
-msgid "- You should use single encoding in one repository."
-msgstr ""
-
-msgid ""
-"\n"
+msgid ""
+"- You should use single encoding in one repository.\n"
+"- If the repository path ends with 0x5c, .hg/hgrc cannot be read.\n"
+"- win32mbcs is not compatible with fixutf8 extention."
+msgstr ""
+
+msgid ""
 "By default, win32mbcs uses encoding.encoding decided by Mercurial.\n"
 "You can specify the encoding by config option::"
 msgstr ""
@@ -8417,7 +8446,7 @@
 
 msgid ""
 "    Start a local HTTP repository browser and pull server. You can use\n"
-"    this for ad-hoc sharing and browing of repositories. It is\n"
+"    this for ad-hoc sharing and browsing of repositories. It is\n"
 "    recommended to use a real web server to serve a repository for\n"
 "    longer periods of time."
 msgstr ""
@@ -8657,12 +8686,14 @@
 msgid ""
 "    Tags are used to name particular revisions of the repository and are\n"
 "    very useful to compare different revisions, to go back to significant\n"
-"    earlier versions or to mark branch points as releases, etc."
+"    earlier versions or to mark branch points as releases, etc. Changing\n"
+"    an existing tag is normally disallowed; use -f/--force to override."
 msgstr ""
 "    Märken används för att namnge specifika revisioner i arkivet och är\n"
 "    väldigt användbara för at jämföra olika revisioner, för att gå\n"
 "    tillbaka till tidigare versioner eller för att markera förgreningar\n"
-"    som releaser, osv."
+"    som releaser, osv. Att ändra ett existerande märke är normalt inte\n"
+"    tillåtet; använd -f/--force för att tvinga."
 
 msgid ""
 "    If no revision is given, the parent of the working directory is\n"
@@ -8673,20 +8704,33 @@
 
 msgid ""
 "    To facilitate version control, distribution, and merging of tags,\n"
-"    they are stored as a file named \".hgtags\" which is managed\n"
-"    similarly to other project files and can be hand-edited if\n"
-"    necessary. The file '.hg/localtags' is used for local tags (not\n"
-"    shared among repositories)."
+"    they are stored as a file named \".hgtags\" which is managed similarly\n"
+"    to other project files and can be hand-edited if necessary. This\n"
+"    also means that tagging creates a new commit. The file\n"
+"    \".hg/localtags\" is used for local tags (not shared among\n"
+"    repositories)."
 msgstr ""
 "    För att underlätta versionshantering, distribution, och sammanfogning\n"
 "    av märken, lagras de som en fil vid namn \".hgtags\" som hanteras på\n"
 "    samma sätt som andra projektfiler och kan ändras för hand vid behov.\n"
-"    Filen '.hg/localtags' används för lokala märken (ej delad i arkiv)."
+"    Filen \".hg/localtags\" används för lokala märken (ej delad i arkiv)."
+
+msgid ""
+"    Tag commits are usually made at the head of a branch. If the parent\n"
+"    of the working directory is not a branch head, :hg:`tag` aborts; use\n"
+"    -f/--force to force the tag commit to be based on a non-head\n"
+"    changeset."
+msgstr ""
+"    Arkivering av märken görs vanligtvis på huvudet av en gren. Om\n"
+"    föräldern till arbetskatalogen inte är ett grenhuvud, så avbryts\n"
+"    :hg:`tag`; använd -f/--force för att tvinga arkiveringen."
 
 msgid ""
 "    Since tag names have priority over branch names during revision\n"
 "    lookup, using an existing branch name as a tag name is discouraged."
 msgstr ""
+"    Eftersom märkesnamn har prioritet över grennamn vid uppslagning av\n"
+"    revisioner, avråds det att använda existerande grennamn som märkesnamn."
 
 msgid "tag names must be unique"
 msgstr "märkesnamn måste vara unika"
@@ -8713,6 +8757,12 @@
 msgid "tag '%s' already exists (use -f to force)"
 msgstr "märket '%s' existerar redan (använd -f för att tvinga)"
 
+msgid "uncommitted merge"
+msgstr "oarkiverad sammanfogning"
+
+msgid "not at a branch head (use -f to force)"
+msgstr "inte vid ett grenhuvud (använd -f för att tvinga)"
+
 msgid "list repository tags"
 msgstr "lista arkivmärken"
 
@@ -9615,8 +9665,8 @@
 msgid "list the changed files of a revision"
 msgstr "visa de ändrade filerna från en revision"
 
-msgid "replace existing tag"
-msgstr "ersätt existerande märke"
+msgid "force tag"
+msgstr "tvinga märkning"
 
 msgid "make the tag local"
 msgstr "gör märket lokalt"
@@ -12108,7 +12158,7 @@
 msgid ""
 "Paths in the local filesystem can either point to Mercurial\n"
 "repositories or to bundle files (as created by :hg:`bundle` or :hg:`\n"
-"incoming --bundle`)."
+"incoming --bundle`). See also :hg:`help paths`."
 msgstr ""
 
 msgid ""
@@ -12461,6 +12511,10 @@
 msgid "working directory of %s"
 msgstr ""
 
+#, python-format
+msgid "warning: can't find ancestor for '%s' copied from '%s'!\n"
+msgstr "varning: kan inte hitta anfader för '%s', kopierad från '%s'!\n"
+
 msgid "cannot partially commit a merge (do not specify files or patterns)"
 msgstr ""
 
@@ -13295,6 +13349,10 @@
 msgstr ""
 
 #, python-format
+msgid "warning: subrepo spec file %s not found\n"
+msgstr ""
+
+#, python-format
 msgid "subrepo spec file %s not found"
 msgstr ""
 
@@ -13495,6 +13553,13 @@
 msgstr "%s certifikatfel: %s"
 
 #, python-format
+msgid ""
+"warning: %s certificate not verified (check web.cacerts config setting)\n"
+msgstr ""
+"varning: %s-certificatet overifierad (kontrollera inställningen "
+"web.cacerts)\n"
+
+#, python-format
 msgid "command '%s' failed: %s"
 msgstr "kommandot '%s' misslyckades: %s"
 
@@ -13517,17 +13582,28 @@
 msgid "could not symlink to %r: %s"
 msgstr ""
 
+msgid "check your clock"
+msgstr "kontrollera din klocka"
+
+#, python-format
+msgid "negative timestamp: %d"
+msgstr "negativ tidsstämpel: %d"
+
 #, python-format
 msgid "invalid date: %r"
 msgstr "ogiltigt datum: %r"
 
 #, python-format
 msgid "date exceeds 32 bits: %d"
-msgstr ""
+msgstr "datum överskrider 32 bitar: %d"
+
+#, python-format
+msgid "negative date value: %d"
+msgstr "negativt datumvärde: %d"
 
 #, python-format
 msgid "impossible time zone offset: %d"
-msgstr ""
+msgstr "omöjlig tidzonsoffset: %d"
 
 #, python-format
 msgid "invalid day spec: %s"
@@ -13535,43 +13611,43 @@
 
 #, python-format
 msgid "%.0f GB"
-msgstr ""
+msgstr "%.0f GB"
 
 #, python-format
 msgid "%.1f GB"
-msgstr ""
+msgstr "%.1f GB"
 
 #, python-format
 msgid "%.2f GB"
-msgstr ""
+msgstr "%.2f GB"
 
 #, python-format
 msgid "%.0f MB"
-msgstr ""
+msgstr "%.0f MB"
 
 #, python-format
 msgid "%.1f MB"
-msgstr ""
+msgstr "%.1f MB"
 
 #, python-format
 msgid "%.2f MB"
-msgstr ""
+msgstr "%.2f MB"
 
 #, python-format
 msgid "%.0f KB"
-msgstr ""
+msgstr "%.0f KB"
 
 #, python-format
 msgid "%.1f KB"
-msgstr ""
+msgstr "%.1f KB"
 
 #, python-format
 msgid "%.2f KB"
-msgstr ""
+msgstr "%.2f KB"
 
 #, python-format
 msgid "%.0f bytes"
-msgstr ""
+msgstr "%.0f bytes"
 
 #, python-format
 msgid "no port number associated with service '%s'"
--- a/mercurial/commands.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/mercurial/commands.py	Mon Jan 24 11:27:56 2011 +0100
@@ -1881,7 +1881,7 @@
                 msg = _('use "hg help" for the full list of commands '
                         'or "hg -v" for details')
             elif aliases:
-                msg = _('use "hg -v help%s" to show aliases and '
+                msg = _('use "hg -v help%s" to show builtin aliases and '
                         'global options') % (name and " " + name or "")
             else:
                 msg = _('use "hg -v help %s" to show global options') % name
--- a/mercurial/dirstate.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/mercurial/dirstate.py	Mon Jan 24 11:27:56 2011 +0100
@@ -503,7 +503,7 @@
         i, j = 0, 0
         while i < len(files) and j < len(subrepos):
             subpath = subrepos[j] + "/"
-            if not files[i].startswith(subpath):
+            if files[i] < subpath:
                 i += 1
                 continue
             while files and files[i].startswith(subpath):
--- a/mercurial/help/templates.txt	Fri Dec 24 15:10:24 2010 +0100
+++ b/mercurial/help/templates.txt	Mon Jan 24 11:27:56 2011 +0100
@@ -25,8 +25,9 @@
 
 :author: String. The unmodified author of the changeset.
 
-:branches: String. The name of the branch on which the changeset was
-    committed. Will be empty if the branch name was default.
+:branches: List of strings. The name of the branch on which the
+    changeset was committed. Will be empty if the branch name was
+    default.
 
 :children: List of strings. The children of the changeset.
 
--- a/mercurial/hg.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/mercurial/hg.py	Mon Jan 24 11:27:56 2011 +0100
@@ -545,9 +545,12 @@
     if r:
         dst.setconfig('bundle', 'mainreporoot', r)
 
-    # copy auth and http_proxy section settings
+    # copy selected local settings to the remote ui
     for sect in ('auth', 'http_proxy'):
         for key, val in src.configitems(sect):
             dst.setconfig(sect, key, val)
+    v = src.config('web', 'cacerts')
+    if v:
+        dst.setconfig('web', 'cacerts', util.expandpath(v))
 
     return dst
--- a/mercurial/hgweb/hgwebdir_mod.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/mercurial/hgweb/hgwebdir_mod.py	Mon Jan 24 11:27:56 2011 +0100
@@ -64,6 +64,8 @@
 
         if not isinstance(self.conf, (dict, list, tuple)):
             map = {'paths': 'hgweb-paths'}
+            if not os.path.exists(self.conf):
+                raise util.Abort(_('config file %s not found!') % self.conf)
             u.readconfig(self.conf, remap=map, trust=True)
             paths = u.configitems('hgweb-paths')
         elif isinstance(self.conf, (list, tuple)):
--- a/mercurial/url.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/mercurial/url.py	Mon Jan 24 11:27:56 2011 +0100
@@ -488,22 +488,38 @@
 
 def _verifycert(cert, hostname):
     '''Verify that cert (in socket.getpeercert() format) matches hostname.
-    CRLs and subjectAltName are not handled.
+    CRLs is not handled.
 
     Returns error message if any problems are found and None on success.
     '''
     if not cert:
         return _('no certificate received')
     dnsname = hostname.lower()
+    def matchdnsname(certname):
+        return (certname == dnsname or
+                '.' in dnsname and certname == '*.' + dnsname.split('.', 1)[1])
+
+    san = cert.get('subjectAltName', [])
+    if san:
+        certnames = [value.lower() for key, value in san if key == 'DNS']
+        for name in certnames:
+            if matchdnsname(name):
+                return None
+        return _('certificate is for %s') % ', '.join(certnames)
+
+    # subject is only checked when subjectAltName is empty
     for s in cert.get('subject', []):
         key, value = s[0]
         if key == 'commonName':
-            certname = value.lower()
-            if (certname == dnsname or
-                '.' in dnsname and certname == '*.' + dnsname.split('.', 1)[1]):
+            try:
+                # 'subject' entries are unicode
+                certname = value.lower().encode('ascii')
+            except UnicodeEncodeError:
+                return _('IDN in certificate not supported')
+            if matchdnsname(certname):
                 return None
             return _('certificate is for %s') % certname
-    return _('no commonName found in certificate')
+    return _('no commonName or subjectAltName found in certificate')
 
 if has_https:
     class BetterHTTPS(httplib.HTTPSConnection):
@@ -512,6 +528,8 @@
         def connect(self):
             if hasattr(self, 'ui'):
                 cacerts = self.ui.config('web', 'cacerts')
+                if cacerts:
+                    cacerts = util.expandpath(cacerts)
             else:
                 cacerts = None
 
--- a/mercurial/util.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/mercurial/util.py	Mon Jan 24 11:27:56 2011 +0100
@@ -391,9 +391,7 @@
             return '1'
         return str(val)
     origcmd = cmd
-    if os.name == 'nt' and sys.version_info < (2, 7, 1):
-        # Python versions since 2.7.1 do this extra quoting themselves
-        cmd = '"%s"' % cmd
+    cmd = quotecommand(cmd)
     env = dict(os.environ)
     env.update((k, py2shell(v)) for k, v in environ.iteritems())
     env['HG'] = hgexecutable()
@@ -719,21 +717,37 @@
 
 def checknlink(testfile):
     '''check whether hardlink count reporting works properly'''
-    f = testfile + ".hgtmp"
 
+    # testfile may be open, so we need a separate file for checking to
+    # work around issue2543 (or testfile may get lost on Samba shares)
+    f1 = testfile + ".hgtmp1"
+    if os.path.lexists(f1):
+        return False
     try:
-        os_link(testfile, f)
-    except OSError:
+        posixfile(f1, 'w').close()
+    except IOError:
         return False
 
+    f2 = testfile + ".hgtmp2"
+    fd = None
     try:
+        try:
+            os_link(f1, f2)
+        except OSError:
+            return False
+
         # nlinks() may behave differently for files on Windows shares if
         # the file is open.
-        fd = open(f)
-        return nlinks(f) > 1
+        fd = open(f2)
+        return nlinks(f2) > 1
     finally:
-        fd.close()
-        os.unlink(f)
+        if fd is not None:
+            fd.close()
+        for f in (f1, f2):
+            try:
+                os.unlink(f)
+            except OSError:
+                pass
 
     return False
 
@@ -1063,11 +1077,16 @@
         date = " ".join(string.split()[:-1])
 
     # add missing elements from defaults
-    for part in defaults:
+    usenow = False # default to using biased defaults
+    for part in ("S", "M", "HI", "d", "mb", "yY"): # decreasing specificity
         found = [True for p in part if ("%"+p) in format]
         if not found:
-            date += "@" + defaults[part]
+            date += "@" + defaults[part][usenow]
             format += "@%" + part[0]
+        else:
+            # We've found a specific time element, less specific time
+            # elements are relative to today
+            usenow = True
 
     timetuple = time.strptime(date, format)
     localunixtime = int(calendar.timegm(timetuple))
@@ -1079,8 +1098,8 @@
         unixtime = localunixtime + offset
     return unixtime, offset
 
-def parsedate(date, formats=None, defaults=None):
-    """parse a localized date/time string and return a (unixtime, offset) tuple.
+def parsedate(date, formats=None, bias={}):
+    """parse a localized date/time and return a (unixtime, offset) tuple.
 
     The date may be a "unixtime offset" string or in one of the specified
     formats. If the date already is a (unixtime, offset) tuple, it is returned.
@@ -1096,15 +1115,22 @@
         when, offset = map(int, date.split(' '))
     except ValueError:
         # fill out defaults
-        if not defaults:
-            defaults = {}
         now = makedate()
+        defaults = {}
+        nowmap = {}
         for part in "d mb yY HI M S".split():
-            if part not in defaults:
+            # this piece is for rounding the specific end of unknowns
+            b = bias.get(part)
+            if b is None:
                 if part[0] in "HMS":
-                    defaults[part] = "00"
+                    b = "00"
                 else:
-                    defaults[part] = datestr(now, "%" + part[0])
+                    b = "0"
+
+            # this piece is for matching the generic end to today's date
+            n = datestr(now, "%" + part[0])
+
+            defaults[part] = (b, n)
 
         for format in formats:
             try:
@@ -1138,6 +1164,22 @@
 
     '>{date}' on or after a given date
 
+    >>> p1 = parsedate("10:29:59")
+    >>> p2 = parsedate("10:30:00")
+    >>> p3 = parsedate("10:30:59")
+    >>> p4 = parsedate("10:31:00")
+    >>> p5 = parsedate("Sep 15 10:30:00 1999")
+    >>> f = matchdate("10:30")
+    >>> f(p1[0])
+    False
+    >>> f(p2[0])
+    True
+    >>> f(p3[0])
+    True
+    >>> f(p4[0])
+    False
+    >>> f(p5[0])
+    False
     """
 
     def lower(date):
@@ -1200,12 +1242,23 @@
         r = None
     return author[author.find('<') + 1:r]
 
+def _ellipsis(text, maxlength):
+    if len(text) <= maxlength:
+        return text, False
+    else:
+        return "%s..." % (text[:maxlength - 3]), True
+
 def ellipsis(text, maxlength=400):
     """Trim string to at most maxlength (default: 400) characters."""
-    if len(text) <= maxlength:
-        return text
-    else:
-        return "%s..." % (text[:maxlength - 3])
+    try:
+        # use unicode not to split at intermediate multi-byte sequence
+        utext, truncated = _ellipsis(text.decode(encoding.encoding),
+                                     maxlength)
+        if not truncated:
+            return text
+        return utext.encode(encoding.encoding)
+    except (UnicodeDecodeError, UnicodeEncodeError):
+        return _ellipsis(text, maxlength)[0]
 
 def walkrepos(path, followsym=False, seen_dirs=None, recurse=False):
     '''yield every hg repository under path, recursively.'''
--- a/mercurial/windows.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/mercurial/windows.py	Mon Jan 24 11:27:56 2011 +0100
@@ -160,9 +160,10 @@
 
 def quotecommand(cmd):
     """Build a command string suitable for os.popen* calls."""
-    # The extra quotes are needed because popen* runs the command
-    # through the current COMSPEC. cmd.exe suppress enclosing quotes.
-    return '"' + cmd + '"'
+    if sys.version_info < (2, 7, 1):
+        # Python versions since 2.7.1 do this extra quoting themselves
+        return '"' + cmd + '"'
+    return cmd
 
 def popen(command, mode='r'):
     # Work around "popen spawned process may not write to stdout
@@ -298,20 +299,18 @@
         # rename is safe to do.
         # The temporary name is chosen at random to avoid the situation
         # where a file is left lying around from a previous aborted run.
-        # The usual race condition this introduces can't be avoided as
-        # we need the name to rename into, and not the file itself. Due
-        # to the nature of the operation however, any races will at worst
-        # lead to the rename failing and the current operation aborting.
 
-        def tempname(prefix):
-            for tries in xrange(10):
-                temp = '%s-%08x' % (prefix, random.randint(0, 0xffffffff))
-                if not os.path.exists(temp):
-                    return temp
+        for tries in xrange(10):
+            temp = '%s-%08x' % (dst, random.randint(0, 0xffffffff))
+            try:
+                os.rename(dst, temp)  # raises OSError EEXIST if temp exists
+                break
+            except OSError, e:
+                if e.errno != errno.EEXIST:
+                    raise
+        else:
             raise IOError, (errno.EEXIST, "No usable temporary filename found")
 
-        temp = tempname(dst)
-        os.rename(dst, temp)
         try:
             os.unlink(temp)
         except:
--- a/tests/test-doctest.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/tests/test-doctest.py	Mon Jan 24 11:27:56 2011 +0100
@@ -16,5 +16,8 @@
 import mercurial.url
 doctest.testmod(mercurial.url)
 
+import mercurial.util
+doctest.testmod(mercurial.util)
+
 import hgext.convert.cvsps
 doctest.testmod(hgext.convert.cvsps)
--- a/tests/test-globalopts.t	Fri Dec 24 15:10:24 2010 +0100
+++ b/tests/test-globalopts.t	Mon Jan 24 11:27:56 2011 +0100
@@ -347,7 +347,7 @@
    hgweb        Configuring hgweb
    glossary     Glossary
   
-  use "hg -v help" to show aliases and global options
+  use "hg -v help" to show builtin aliases and global options
 
   $ hg --help
   Mercurial Distributed SCM
@@ -423,7 +423,7 @@
    hgweb        Configuring hgweb
    glossary     Glossary
   
-  use "hg -v help" to show aliases and global options
+  use "hg -v help" to show builtin aliases and global options
 
 Not tested: --debugger
 
--- a/tests/test-help.t	Fri Dec 24 15:10:24 2010 +0100
+++ b/tests/test-help.t	Mon Jan 24 11:27:56 2011 +0100
@@ -118,7 +118,7 @@
    hgweb        Configuring hgweb
    glossary     Glossary
   
-  use "hg -v help" to show aliases and global options
+  use "hg -v help" to show builtin aliases and global options
 
   $ hg -q help
    add          add the specified files on the next commit
@@ -416,7 +416,7 @@
    add         add the specified files on the next commit
    addremove   add all new files, delete all missing files
   
-  use "hg -v help ad" to show aliases and global options
+  use "hg -v help ad" to show builtin aliases and global options
 
 Test command without options
 
@@ -716,7 +716,7 @@
    hgweb        Configuring hgweb
    glossary     Glossary
   
-  use "hg -v help" to show aliases and global options
+  use "hg -v help" to show builtin aliases and global options
 
 Test list of commands with command with no help text
 
@@ -727,7 +727,7 @@
   
    nohelp   (no help text available)
   
-  use "hg -v help helpext" to show aliases and global options
+  use "hg -v help helpext" to show builtin aliases and global options
 
 Test a help topic
 
--- a/tests/test-https.t	Fri Dec 24 15:10:24 2010 +0100
+++ b/tests/test-https.t	Mon Jan 24 11:27:56 2011 +0100
@@ -126,7 +126,7 @@
   adding bar
   $ cd ..
 
-pull
+pull without cacert
 
   $ cd copy-pull
   $ echo '[hooks]' >> .hg/hgrc
@@ -143,12 +143,29 @@
   (run 'hg update' to get a working copy)
   $ cd ..
 
-cacert
+cacert configured in local repo
 
-  $ hg -R copy-pull pull --config web.cacerts=pub.pem
+  $ cp copy-pull/.hg/hgrc copy-pull/.hg/hgrc.bu
+  $ echo "[web]" >> copy-pull/.hg/hgrc
+  $ echo "cacerts=`pwd`/pub.pem" >> copy-pull/.hg/hgrc
+  $ hg -R copy-pull pull --traceback
   pulling from https://localhost:$HGPORT/
   searching for changes
   no changes found
+  $ mv copy-pull/.hg/hgrc.bu copy-pull/.hg/hgrc
+
+cacert configured globally, also testing expansion of environment
+variables in the filename
+
+  $ echo "[web]" >> $HGRCPATH
+  $ echo 'cacerts=$P/pub.pem' >> $HGRCPATH
+  $ P=`pwd` hg -R copy-pull pull
+  pulling from https://localhost:$HGPORT/
+  searching for changes
+  no changes found
+
+cacert mismatch
+
   $ hg -R copy-pull pull --config web.cacerts=pub.pem https://127.0.0.1:$HGPORT/
   abort: 127.0.0.1 certificate error: certificate is for localhost
   [255]
--- a/tests/test-mq.t	Fri Dec 24 15:10:24 2010 +0100
+++ b/tests/test-mq.t	Mon Jan 24 11:27:56 2011 +0100
@@ -77,7 +77,7 @@
    qunapplied   print the patches not yet applied
    strip        strip changesets and all their descendants from the repository
   
-  use "hg -v help mq" to show aliases and global options
+  use "hg -v help mq" to show builtin aliases and global options
 
   $ hg init a
   $ cd a
--- a/tests/test-notify.t	Fri Dec 24 15:10:24 2010 +0100
+++ b/tests/test-notify.t	Mon Jan 24 11:27:56 2011 +0100
@@ -302,3 +302,49 @@
   changeset 22c88b85aa27 in b
   description: merge
   (run 'hg update' to get a working copy)
+
+truncate multi-byte subject
+
+  $ cat <<EOF >> $HGRCPATH
+  > [notify]
+  > maxsubject = 4
+  > EOF
+  $ echo a >> a/a
+  $ hg --cwd a --encoding utf-8 commit -A -d '0 0' \
+  >   -m `python -c 'print "\xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4"'`
+  $ hg --traceback --cwd b --encoding utf-8 pull ../a | \
+  >   python -c 'import sys,re; print re.sub("\n\t", " ", sys.stdin.read()),'
+  pulling from ../a
+  searching for changes
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 1 changes to 1 files
+  Content-Type: text/plain; charset="us-ascii"
+  MIME-Version: 1.0
+  Content-Transfer-Encoding: 8bit
+  X-Test: foo
+  Date: * (glob)
+  Subject: \xc3\xa0... (esc)
+  From: test@test.com
+  X-Hg-Notification: changeset 4a47f01c1356
+  Message-Id: <*> (glob)
+  To: baz@test.com, foo@bar
+  
+  changeset 4a47f01c1356 in b
+  description: \xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4 (esc)
+  diffstat:
+  
+   a |  1 +
+   1 files changed, 1 insertions(+), 0 deletions(-)
+  
+  diffs (7 lines):
+  
+  diff -r 22c88b85aa27 -r 4a47f01c1356 a
+  --- a/a	Thu Jan 01 00:00:03 1970 +0000
+  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
+  @@ -1,2 +1,3 @@
+   a
+   a
+  +a
+  (run 'hg update' to get a working copy)
--- a/tests/test-subrepo.t	Fri Dec 24 15:10:24 2010 +0100
+++ b/tests/test-subrepo.t	Mon Jan 24 11:27:56 2011 +0100
@@ -656,3 +656,22 @@
   adding manifests
   adding file changes
   added 1 changesets with 1 changes to 1 files
+
+Check status of files when none of them belong to the first
+subrepository:
+
+  $ hg init subrepo-status
+  $ cd subrepo-status
+  $ hg init subrepo-1
+  $ hg init subrepo-2
+  $ cd subrepo-2
+  $ touch file
+  $ hg add file
+  $ cd ..
+  $ echo subrepo-1 = subrepo-1 > .hgsub
+  $ echo subrepo-2 = subrepo-2 >> .hgsub
+  $ hg add .hgsub
+  $ hg ci -m 'Added subrepos'
+  committing subrepository subrepo-1
+  committing subrepository subrepo-2
+  $ hg st subrepo-2/file
--- a/tests/test-url.py	Fri Dec 24 15:10:24 2010 +0100
+++ b/tests/test-url.py	Mon Jan 24 11:27:56 2011 +0100
@@ -25,6 +25,18 @@
 check(_verifycert(cert('*.example.com'), 'w.w.example.com'),
       'certificate is for *.example.com')
 
+# Test subjectAltName
+san_cert = {'subject': ((('commonName', 'example.com'),),),
+            'subjectAltName': (('DNS', '*.example.net'),
+                               ('DNS', 'example.net'))}
+check(_verifycert(san_cert, 'example.net'),
+      None)
+check(_verifycert(san_cert, 'foo.example.net'),
+      None)
+# subject is only checked when subjectAltName is empty
+check(_verifycert(san_cert, 'example.com'),
+      'certificate is for *.example.net, example.net')
+
 # Avoid some pitfalls
 check(_verifycert(cert('*.foo'), 'foo'),
       'certificate is for *.foo')
@@ -33,6 +45,10 @@
 
 check(_verifycert({'subject': ()},
                   'example.com'),
-      'no commonName found in certificate')
+      'no commonName or subjectAltName found in certificate')
 check(_verifycert(None, 'example.com'),
       'no certificate received')
+
+# Unicode (IDN) certname isn't supported
+check(_verifycert(cert(u'\u4f8b.jp'), 'example.jp'),
+      'IDN in certificate not supported')