changeset 10738:4084a48045ab

Merge with stable
author Martin Geisler <mg@lazybytes.net>
date Sat, 06 Mar 2010 10:02:45 +0100
parents 216a4ef60805 (current diff) cbea16fb46c3 (diff)
children e121a8b70540
files
diffstat 24 files changed, 213 insertions(+), 72 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsigs	Sat Mar 06 08:58:03 2010 +0000
+++ b/.hgsigs	Sat Mar 06 10:02:45 2010 +0100
@@ -18,3 +18,4 @@
 439d7ea6fe3aa4ab9ec274a68846779153789de9 0 iEYEABECAAYFAksVw0kACgkQywK+sNU5EO/oZwCfdfBEkgp38xq6wN2F4nj+SzofrJIAnjmxt04vaJSeOOeHylHvk6lzuQsw
 296a0b14a68621f6990c54fdba0083f6f20935bf 0 iEYEABECAAYFAks+jCoACgkQywK+sNU5EO9J8wCeMUGF9E/gS2UBsqIz56WS4HMPRPUAoI5J95mwEIK8Clrl7qFRidNI6APq
 4aa619c4c2c09907034d9824ebb1dd0e878206eb 0 iEYEABECAAYFAktm9IsACgkQywK+sNU5EO9XGgCgk4HclRQhexEtooPE5GcUCdB6M8EAn2ptOhMVbIoO+JncA+tNACPFXh0O
+ff2704a8ded37fbebd8b6eb5ec733731d725da8a 0 iEYEABECAAYFAkuRoSQACgkQywK+sNU5EO//3QCeJDc5r2uFyFCtAlpSA27DEE5rrxAAn2FSwTy9fhrB3QAdDQlwkEZcQzDh
--- a/.hgtags	Sat Mar 06 08:58:03 2010 +0000
+++ b/.hgtags	Sat Mar 06 10:02:45 2010 +0100
@@ -30,3 +30,4 @@
 439d7ea6fe3aa4ab9ec274a68846779153789de9 1.4.1
 296a0b14a68621f6990c54fdba0083f6f20935bf 1.4.2
 4aa619c4c2c09907034d9824ebb1dd0e878206eb 1.4.3
+ff2704a8ded37fbebd8b6eb5ec733731d725da8a 1.5
--- a/contrib/win32/hgwebdir_wsgi.py	Sat Mar 06 08:58:03 2010 +0000
+++ b/contrib/win32/hgwebdir_wsgi.py	Sat Mar 06 10:02:45 2010 +0100
@@ -6,8 +6,9 @@
 #
 # Requirements:
 # - Python 2.6
+# - PyWin32 build 214 or newer
+# - Mercurial installed from source (python setup.py install)
 # - IIS 7
-# - PyWin32 build 214 or newer
 #
 # Earlier versions will in general work as well, but the PyWin32 version is
 # necessary for win32traceutil to work correctly.
@@ -20,13 +21,13 @@
 #
 # - Run this script (i.e. python hgwebdir_wsgi.py) to get a shim dll. The
 #   shim is identical for all scripts, so you can just copy and rename one
-#   from an earlier run instead.
+#   from an earlier run, if you wish.
 #
 # - Setup an IIS application where your hgwebdir is to be served from.
-#   Make sure it's assigned a 32-bit app pool.
+#   On 64-bit systems, make sure it's assigned a 32-bit app pool.
 #
 # - In the application, setup a wildcard script handler mapping of type
-#   IpsapiModule, with the shim dll as its executable. This file MUST reside
+#   IpsapiModule with the shim dll as its executable. This file MUST reside
 #   in the same directory as the shim. Remove all other handlers, if you wish.
 #
 # - Make sure the ISAPI and CGI restrictions (configured globally on the
@@ -45,20 +46,19 @@
 
 import sys
 
-# To stop serving pages in UTF-8, remove the two lines below
+# Adjust python path if this is not a system-wide install
+#sys.path.insert(0, r'c:\path\to\python\lib')
+
+# Enable tracing. Run 'python -m win32traceutil' to debug
+if hasattr(sys, 'isapidllhandle'):
+    import win32traceutil
+
+# To serve pages in local charset instead of UTF-8, remove the two lines below
 import os
 os.environ['HGENCODING'] = 'UTF-8'
 
-# Adjust python path if this is not a system-wide install
-#sys.path.insert(0, "/path/to/python/lib")
-
-
-# Enable tracing. Run 'python -m win32traceutil' to debug
-if hasattr(sys, 'isapidllhandle'): 
-    import win32traceutil
 
 import isapi_wsgi
-
 from mercurial import demandimport; demandimport.enable()
 from mercurial.hgweb.hgwebdir_mod import hgwebdir
 
--- a/hgext/fetch.py	Sat Mar 06 08:58:03 2010 +0000
+++ b/hgext/fetch.py	Sat Mar 06 10:02:45 2010 +0100
@@ -81,7 +81,6 @@
 
         # Is this a simple fast-forward along the current branch?
         newheads = repo.branchheads(branch)
-        newheads = [head for head in newheads if len(repo[head].children()) == 0]
         newchildren = repo.changelog.nodesbetween([parent], newheads)[2]
         if len(newheads) == 1:
             if newchildren[0] != parent:
--- a/hgext/mq.py	Sat Mar 06 08:58:03 2010 +0000
+++ b/hgext/mq.py	Sat Mar 06 10:02:45 2010 +0100
@@ -813,7 +813,7 @@
     _reserved = ('series', 'status', 'guards')
     def check_reserved_name(self, name):
         if (name in self._reserved or name.startswith('.hg')
-            or name.startswith('.mq')):
+            or name.startswith('.mq') or '#' in name or ':' in name):
             raise util.Abort(_('"%s" cannot be used as the name of a patch')
                              % name)
 
@@ -1864,7 +1864,7 @@
     qcommit to commit changes to this queue repository.
 
     This command is deprecated. Without -c, it's implied by other relevant
-    commands. With -c, use hg init -Q instead."""
+    commands. With -c, use hg init --mq instead."""
     return qinit(ui, repo, create=opts['create_repo'])
 
 def clone(ui, source, dest=None, **opts):
@@ -1934,7 +1934,7 @@
 def commit(ui, repo, *pats, **opts):
     """commit changes in the queue repository (DEPRECATED)
 
-    This command is deprecated; use hg -Q commit instead."""
+    This command is deprecated; use hg --mq commit instead."""
     q = repo.mq
     r = q.qrepo()
     if not r:
@@ -2654,7 +2654,7 @@
     return orig(r.ui, r, *args, **kwargs)
 
 def uisetup(ui):
-    mqopt = [('Q', 'mq', None, _("operate on patch repository"))]
+    mqopt = [('', 'mq', None, _("operate on patch repository"))]
 
     extensions.wrapcommand(commands.table, 'import', mqimport)
 
--- a/i18n/ja.po	Sat Mar 06 08:58:03 2010 +0000
+++ b/i18n/ja.po	Sat Mar 06 10:02:45 2010 +0100
@@ -99,7 +99,7 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2010-03-02 11:58+0900\n"
+"POT-Creation-Date: 2010-03-04 11:38+0900\n"
 "PO-Revision-Date: 2009-11-16 21:24+0100\n"
 "Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n"
 "Language-Team: Japanese\n"
@@ -6511,6 +6511,16 @@
 
 #, python-format
 msgid ""
+"alias for: hg %s\n"
+"\n"
+"%s"
+msgstr ""
+"hg %s の別名\n"
+"\n"
+"%s"
+
+#, python-format
+msgid ""
 "\n"
 "use \"hg -v help %s\" to show verbose help\n"
 msgstr ""
@@ -7951,8 +7961,8 @@
 msgid "annotate the specified revision"
 msgstr "当該リビジョン時点での由来情報を表示"
 
-msgid "follow copies and renames (DEPRECATED)"
-msgstr "複製/改名元ファイルの履歴も追跡(非推奨)"
+msgid "follow copies/renames and list the filename (DEPRECATED)"
+msgstr "複製/改名元ファイルの履歴追跡と、ファイル名の表示(非推奨)"
 
 msgid "don't follow copies and renames"
 msgstr "複製/改名元ファイル履歴の追跡を抑止"
@@ -8681,16 +8691,6 @@
 msgstr "'%s' を別名に持つコマンドはありません\n"
 
 #, python-format
-msgid ""
-"alias for: hg %s\n"
-"\n"
-"%s"
-msgstr ""
-"hg %s の別名\n"
-"\n"
-"%s"
-
-#, python-format
 msgid "alias '%s' resolves to unknown command '%s'\n"
 msgstr "'%s' が未知のコマンド '%s' の別名とみなされました\n"
 
--- a/i18n/pt_BR.po	Sat Mar 06 08:58:03 2010 +0000
+++ b/i18n/pt_BR.po	Sat Mar 06 10:02:45 2010 +0100
@@ -9007,8 +9007,8 @@
 msgid "annotate the specified revision"
 msgstr "faz um annotate da revisão especificada"
 
-msgid "follow copies and renames (DEPRECATED)"
-msgstr "segue cópias e renomeações (OBSOLETA)"
+msgid "follow copies/renames and list the filename (DEPRECATED)"
+msgstr "segue cópias e renomeações e lista o nome de arquivo (OBSOLETA)"
 
 msgid "don't follow copies and renames"
 msgstr "não segue cópias e renomeações"
--- a/i18n/sv.po	Sat Mar 06 08:58:03 2010 +0000
+++ b/i18n/sv.po	Sat Mar 06 10:02:45 2010 +0100
@@ -13,8 +13,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2010-03-02 18:23+0100\n"
-"PO-Revision-Date: 2010-03-02 18:36+0100\n"
+"POT-Creation-Date: 2010-03-04 07:02+0100\n"
+"PO-Revision-Date: 2010-03-04 07:33+0100\n"
 "Last-Translator: Jens Bäckman <jens.backman@gmail.com>\n"
 "Language-Team: Swedish\n"
 "MIME-Version: 1.0\n"
@@ -4779,46 +4779,67 @@
 "    non-zero exit status means the revision is bad.\n"
 "    "
 msgstr ""
+"genomsökning av ändringar med halveringsmetoden\n"
+"\n"
+"    Detta kommando hjälper till att hitta ändringar som skapar problem. För\n"
+"    att använda, markera den tidigaste ändringen du vet har problemet som\n"
+"    dålig, och markera sedan den senaste problemfria ändringen som bra.\n"
+"    Bisect uppdaterar din arbetskatalog till en revision för testning (om\n"
+"    inte -U/--noupdate anges). När du har testat, markera arbetskatalogen\n"
+"    som bra eller dålig, och bisect kommer endera att uppdatera till en\n"
+"    annan kandidat eller meddela att den dåliga revisionen har hittats.\n"
+"\n"
+"    Som en genväg kan du också använda revisionsargumentet för att markera\n"
+"    en revision som bra eller dålig utan att kontrollera den först.\n"
+"\n"
+"    Om du tillhandahåller ett kommando, kommer det att användas för\n"
+"    automatisk genomsökning. Dess returkod kommer att användas för att ange\n"
+"    revisioner som bra eller dåliga: kod 0 betyder bra, 125 betyder att\n"
+"    revisionen hoppas över, 127 (kommandot hittades inte) avbryter\n"
+"    genomsökningen, och alla andra värden betyder att revisionen är dålig.\n"
+"    "
 
 msgid "The first good revision is:\n"
-msgstr ""
+msgstr "Den första bra revisionen är:\n"
 
 msgid "The first bad revision is:\n"
-msgstr ""
+msgstr "Den första dåliga revisionen är:\n"
 
 msgid "Due to skipped revisions, the first good revision could be any of:\n"
 msgstr ""
+"Tack vare skippade revisioner, är den första bra revisionen någon av:\n"
 
 msgid "Due to skipped revisions, the first bad revision could be any of:\n"
 msgstr ""
+"Tack vare skippade revisioner, kan den första dåliga revisionen någon av:\n"
 
 msgid "cannot bisect (no known good revisions)"
-msgstr ""
+msgstr "kan inte genomsöka (inga kända bra revisioner)"
 
 msgid "cannot bisect (no known bad revisions)"
-msgstr ""
+msgstr "kan inte genomsöka (inga kända dåliga revisioner)"
 
 msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
-msgstr ""
+msgstr "(användning av 'hg bisect <kmd>' är föråldrat)\n"
 
 msgid "incompatible arguments"
-msgstr ""
+msgstr "inkompatibla argument"
 
 #, python-format
 msgid "failed to execute %s"
-msgstr ""
+msgstr "misslyckades med att köra %s"
 
 #, python-format
 msgid "%s killed"
-msgstr ""
+msgstr "%s dödad"
 
 #, python-format
 msgid "Changeset %d:%s: %s\n"
-msgstr ""
+msgstr "Ändring %d:%s: %s\n"
 
 #, python-format
 msgid "Testing changeset %d:%s (%d changesets remaining, ~%d tests)\n"
-msgstr ""
+msgstr "Testar ändring %d:%s (%d ändringar kvar, ~%d test)\n"
 
 msgid ""
 "set or show the current branch name\n"
@@ -5898,6 +5919,23 @@
 "    contain whitespace as multiple filenames.\n"
 "    "
 msgstr ""
+"hitta filer som matchar givna mönster\n"
+"\n"
+"    Visa filer som är under Mercurials kontroll i arbetskatalogen vars\n"
+"    namn matchar givna mönster.\n"
+"\n"
+"    Som standard söker det här kommandot i alla kataloger inuti\n"
+"    arbetskatalogen. För att bara söka den aktuella katalogen och dess\n"
+"    underkataloger, använd \"--include .\".\n"
+"\n"
+"    Om inga mönster anges för matching, visar det här kommantod namnen på\n"
+"    alla filer under Mercurials kontroll i arbetskatalogen.\n"
+"\n"
+"    Om du vill skicka utmatningen från detta kommando till kommandot\n"
+"    \"xargs\", använd flaggan -O till både detta kommando och \"xargs\".\n"
+"    Detta undviker problemet med att \"xargs\" behandlar filnamn som\n"
+"    innehåller blanktecken som multipla filnamn.\n"
+"    "
 
 msgid ""
 "show revision history of entire repository or files\n"
@@ -5967,6 +6005,15 @@
 "    With --debug, print file revision hashes.\n"
 "    "
 msgstr ""
+"visa den nuvarande eller angivna revisionen av projektmanifestet\n"
+"\n"
+"    Visa en lista med versionshanterade filer för den angivna revisionen.\n"
+"    Om ingen revision anges, används arbetskatalogens första föräldern,\n"
+"    eller null-revisionen om ingen revision är uthämtad.\n"
+"\n"
+"    Med -v visas filtillstånd, symlänkar och exekverbarhetsbitar.\n"
+"    Med --debug visas filrevisionhashar.\n"
+"    "
 
 msgid ""
 "merge working directory with another revision\n"
@@ -7075,8 +7122,8 @@
 msgid "annotate the specified revision"
 msgstr "annotera den specificerade revisionen"
 
-msgid "follow copies and renames (DEPRECATED)"
-msgstr "följ kopieringar och namnbyten (FÖRLEGAD)"
+msgid "follow copies/renames and list the filename (DEPRECATED)"
+msgstr "följ kopieringar/namnbyten och visa filnamnet (FÖRLEGAD)"
 
 msgid "don't follow copies and renames"
 msgstr "följ inte kopieringar och namnbyten"
@@ -7130,22 +7177,22 @@
 msgstr "[FLAGGA]... [-r] REV"
 
 msgid "reset bisect state"
-msgstr ""
+msgstr "återställ bisect-tillständ"
 
 msgid "mark changeset good"
-msgstr ""
+msgstr "markera ändringen som bra"
 
 msgid "mark changeset bad"
-msgstr ""
+msgstr "markera ändringen som dålig"
 
 msgid "skip testing changeset"
-msgstr ""
+msgstr "hoppa över test av ändring"
 
 msgid "use command to check changeset state"
-msgstr ""
+msgstr "använd kommando för att kontrollera ändringsstatus"
 
 msgid "do not update to target"
-msgstr ""
+msgstr "uppdatera inte till målet"
 
 msgid "[-gbsr] [-U] [-c CMD] [REV]"
 msgstr "[-gbsr] [-U] [-c KMD] [REV]"
@@ -7923,7 +7970,7 @@
 msgstr "Konfigurationsfiler"
 
 msgid "Date Formats"
-msgstr ""
+msgstr "Datumformat"
 
 msgid "File Name Patterns"
 msgstr ""
@@ -8064,6 +8111,42 @@
 "- ``{datetime} to {datetime}`` - a date range, inclusive\n"
 "- ``-{days}`` - within a given number of days of today\n"
 msgstr ""
+"Vissa kommandon tillåter att användare anger ett datum, bland dom:\n"
+"\n"
+"- backout, commit, import, tag: Ange arkiveringsdatum.\n"
+"- log, revert, update: Välj revision(er) med hjälp av datum.\n"
+"\n"
+"Många datumformat är giltiga. Här är några exempel:\n"
+"\n"
+"- ``Wed Dec 6 13:18:29 2006`` (lokal tidszon antas)\n"
+"- ``Dec 6 13:18 -0600`` (året antas, tidsoffset anges)\n"
+"- ``Dec 6 13:18 UTC`` (UTC och GMT är alias för +0000)\n"
+"- ``Dec 6`` (midnatt)\n"
+"- ``13:18`` (idag antas)\n"
+"- ``3:39`` (3:39 på natten antas)\n"
+"- ``3:39pm`` (15:39)\n"
+"- ``2006-12-06 13:18:29`` (ISO 8601-format)\n"
+"- ``2006-12-6 13:18``\n"
+"- ``2006-12-6``\n"
+"- ``12-6``\n"
+"- ``12/6``\n"
+"- ``12/6/6`` (Dec 6 2006)\n"
+"\n"
+"Till sist, så finns även Mercurial's interna format:\n"
+"\n"
+"- ``1165432709 0`` (Wed Dec 6 13:18:29 2006 UTC)\n"
+"\n"
+"Detta är det interna representationsformatet för datum. unixtime är antalet\n"
+"sekunder sedan epoken(1970-01-01 00:00 UTC). offset är offseten till den\n"
+"lokala tidszonen, i sekunder väst om UTC (negativ om tidszonen är öst om\n"
+"UTC).\n"
+"\n"
+"Kommandot log accepterar också datumintervall:\n"
+"\n"
+"- ``<{datumtid}`` - på eller innan datum/tid\n"
+"- ``>{datumtid}`` - på eller efter datum/tid\n"
+"- ``{datumtid} to {datumtid}`` - ett datumintervall, inklusivt\n"
+"- ``-{dagar}`` - inom ett givet antal dagar från idag\n"
 
 msgid ""
 "Mercurial's default format for showing changes between two versions of\n"
@@ -8858,7 +8941,7 @@
 msgstr "söker efter ändringar\n"
 
 msgid "queries"
-msgstr "frågar"
+msgstr "frågor"
 
 msgid "searching"
 msgstr "söker"
--- a/mercurial/commands.py	Sat Mar 06 08:58:03 2010 +0000
+++ b/mercurial/commands.py	Sat Mar 06 10:02:45 2010 +0100
@@ -99,6 +99,11 @@
     anyway, although the results will probably be neither useful
     nor desirable.
     """
+    if opts.get('follow'):
+        # --follow is deprecated and now just an alias for -f/--file
+        # to mimic the behavior of Mercurial before version 1.5
+        opts['file'] = 1
+
     datefunc = ui.quiet and util.shortdate or util.datestr
     getdate = util.cachefunc(lambda x: datefunc(x[0].date()))
 
@@ -3422,7 +3427,8 @@
     "^annotate|blame":
         (annotate,
          [('r', 'rev', '', _('annotate the specified revision')),
-          ('', 'follow', None, _('follow copies and renames (DEPRECATED)')),
+          ('', 'follow', None,
+           _('follow copies/renames and list the filename (DEPRECATED)')),
           ('', 'no-follow', None, _("don't follow copies and renames")),
           ('a', 'text', None, _('treat all files as text')),
           ('u', 'user', None, _('list the author (long with -v)')),
--- a/mercurial/store.py	Sat Mar 06 08:58:03 2010 +0000
+++ b/mercurial/store.py	Sat Mar 06 10:02:45 2010 +0100
@@ -267,7 +267,9 @@
     def add(self, fn):
         if self.entries is None:
             self._load()
-        self.opener('fncache', 'ab').write(encodedir(fn) + '\n')
+        if fn not in self.entries:
+            self.opener('fncache', 'ab').write(encodedir(fn) + '\n')
+            self.entries.add(fn)
 
     def __contains__(self, fn):
         if self.entries is None:
@@ -290,9 +292,7 @@
         self.fncache = fnc
 
         def fncacheopener(path, mode='r', *args, **kw):
-            if (mode not in ('r', 'rb')
-                and path.startswith('data/')
-                and path not in fnc):
+            if mode not in ('r', 'rb') and path.startswith('data/'):
                 fnc.add(path)
             return op(hybridencode(path), mode, *args, **kw)
         self.opener = fncacheopener
--- a/mercurial/templates/coal/map	Sat Mar 06 08:58:03 2010 +0000
+++ b/mercurial/templates/coal/map	Sat Mar 06 10:02:45 2010 +0100
@@ -152,7 +152,7 @@
 changelogtag = '<span class="tag">{name|escape}</span> '
 changesettag = '<span class="tag">{tag|escape}</span> '
 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
-changelogbranchname = '<span class="branchname">{name|escape}</span> ' 
+changelogbranchname = '<span class="branchname">{name|escape}</span> '
 
 filediffparent = '
   <tr>
--- a/mercurial/templates/monoblue/graph.tmpl	Sat Mar 06 08:58:03 2010 +0000
+++ b/mercurial/templates/monoblue/graph.tmpl	Sat Mar 06 10:02:45 2010 +0100
@@ -76,7 +76,7 @@
         item = item.replace(/_PARITY/, 'parity' + parity);
         item = item.replace(/_NODEID/, cur[0]);
         item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_DESC/, cur[3]);
+        item = item.replace(/_DESC/, cur[3]);
         item = item.replace(/_USER/, cur[4]);
         item = item.replace(/_DATE/, cur[5]);
 
@@ -99,7 +99,7 @@
             tagspan += '</span>';
         }
 
-        item = item.replace(/_TAGS/, tagspan); 
+        item = item.replace(/_TAGS/, tagspan);
         return [bg, item];
 
     }
--- a/mercurial/templates/monoblue/index.tmpl	Sat Mar 06 08:58:03 2010 +0000
+++ b/mercurial/templates/monoblue/index.tmpl	Sat Mar 06 10:02:45 2010 +0100
@@ -9,7 +9,7 @@
         <ul class="page-nav">
         </ul>
     </div>
-    
+
     <table cellspacing="0">
         <tr>
             <td><a href="?sort={sort_name}">Name</a></td>
--- a/mercurial/templates/paper/map	Sat Mar 06 08:58:03 2010 +0000
+++ b/mercurial/templates/paper/map	Sat Mar 06 10:02:45 2010 +0100
@@ -152,7 +152,7 @@
 changelogtag = '<span class="tag">{name|escape}</span> '
 changesettag = '<span class="tag">{tag|escape}</span> '
 changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
-changelogbranchname = '<span class="branchname">{name|escape}</span> ' 
+changelogbranchname = '<span class="branchname">{name|escape}</span> '
 
 filediffparent = '
   <tr>
--- a/mercurial/templates/static/style-coal.css	Sat Mar 06 08:58:03 2010 +0000
+++ b/mercurial/templates/static/style-coal.css	Sat Mar 06 10:02:45 2010 +0100
@@ -131,7 +131,7 @@
 
 .branchname {
   color: #000;
-  font-size: 60%; 
+  font-size: 60%;
   font-weight: normal;
   margin-left: .5em;
   vertical-align: baseline;
--- a/mercurial/templates/static/style-paper.css	Sat Mar 06 08:58:03 2010 +0000
+++ b/mercurial/templates/static/style-paper.css	Sat Mar 06 10:02:45 2010 +0100
@@ -122,7 +122,7 @@
 
 .branchname {
   color: #000;
-  font-size: 60%; 
+  font-size: 60%;
   font-weight: normal;
   margin-left: .5em;
   vertical-align: baseline;
--- a/tests/test-annotate.out	Sat Mar 06 08:58:03 2010 +0000
+++ b/tests/test-annotate.out	Sat Mar 06 10:02:45 2010 +0100
@@ -102,4 +102,4 @@
 1:3: a
 % generate ABA rename configuration
 % annotate after ABA with follow
-8: foo
+foo: foo
--- a/tests/test-convert	Sat Mar 06 08:58:03 2010 +0000
+++ b/tests/test-convert	Sat Mar 06 10:02:45 2010 +0100
@@ -56,4 +56,10 @@
 echo % convert with imaginary sink type
 hg convert --dest-type foo a a-foo
 
+echo
+echo % "testing: convert must not produce duplicate entries in fncache"
+hg convert a b
+echo % "contents of fncache file:"
+cat b/.hg/store/fncache
+
 true
--- a/tests/test-convert-baz.out	Sat Mar 06 08:58:03 2010 +0000
+++ b/tests/test-convert-baz.out	Sat Mar 06 10:02:45 2010 +0100
@@ -87,10 +87,10 @@
 o  0 "initial import" files:
 
 c4072c4b72e1cabace081888efa148ee80ca3cbb 644   a
-623942606de842342ac7b221ae9ccabc13b5d8c8 644   c
+0201ac32a3a8e86e303dff60366382a54b48a72e 644   c
 1a4a864db0073705a11b1439f563bfa4b46d9246 644   e
-ab9089704d7c988687521e6adf018ebf767da7d6 644   f
-43b4308708a4b36340566684df2e2a074b12ceb0 644 @ test/a-link
-73773e3389ef7ec5a070519b74895d2eaa4ad5db 644 @ test/b
+09e0222742fc3f75777fa9d68a5d8af7294cb5e7 644   f
+c0067ba5ff0b7c9a3eb17270839d04614c435623 644 @ test/a-link
+375f4263d86feacdea7e3c27100abd1560f2a973 644 @ test/b
 copies:      c (src/a-link-2) test/a-link (src/a-link) test/b (src/b)
 copies:      f (e)
--- a/tests/test-convert.out	Sat Mar 06 08:58:03 2010 +0000
+++ b/tests/test-convert.out	Sat Mar 06 10:02:45 2010 +0100
@@ -273,3 +273,17 @@
 abort: foo: invalid source repository type
 % convert with imaginary sink type
 abort: foo: invalid destination repository type
+
+% testing: convert must not produce duplicate entries in fncache
+initializing destination b repository
+scanning source...
+sorting...
+converting...
+4 a
+3 b
+2 c
+1 d
+0 e
+% contents of fncache file:
+data/a.i
+data/b.i
--- a/tests/test-fetch	Sat Mar 06 08:58:03 2010 +0000
+++ b/tests/test-fetch	Sat Mar 06 10:02:45 2010 +0100
@@ -197,6 +197,20 @@
 HGMERGE=true hg --cwd i1726r2 fetch ../i1726r1 | sed 's/new changeset 3:[0-9a-zA-Z]* /new changeset 3 /'
 hg --cwd i1726r2 heads default --template '{rev}\n'
 
+echo
+echo % test issue2047
+hg -q init i2047a
+cd i2047a
+echo a > a
+hg -q ci -Am a
+hg -q branch stable
+echo b > b
+hg -q ci -Am b
+cd ..
+hg -q clone -r 0 i2047a i2047b
+cd i2047b
+hg fetch ../i2047a
+
 "$TESTDIR/killdaemons.py"
 
 true
--- a/tests/test-fetch.out	Sat Mar 06 08:58:03 2010 +0000
+++ b/tests/test-fetch.out	Sat Mar 06 10:02:45 2010 +0100
@@ -207,3 +207,11 @@
 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
 new changeset 3 merges remote changes with local
 3
+
+% test issue2047
+pulling from ../i2047a
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files
--- a/tests/test-mq-qnew	Sat Mar 06 08:58:03 2010 +0000
+++ b/tests/test-mq-qnew	Sat Mar 06 10:02:45 2010 +0100
@@ -19,6 +19,9 @@
     hg qnew status
     hg qnew guards
     hg qnew .hgignore
+    hg qnew .mqfoo
+    hg qnew 'foo#bar'
+    hg qnew 'foo:bar'
 
     hg qinit -c
 
--- a/tests/test-mq-qnew.out	Sat Mar 06 08:58:03 2010 +0000
+++ b/tests/test-mq-qnew.out	Sat Mar 06 10:02:45 2010 +0100
@@ -5,6 +5,9 @@
 abort: "status" cannot be used as the name of a patch
 abort: "guards" cannot be used as the name of a patch
 abort: ".hgignore" cannot be used as the name of a patch
+abort: ".mqfoo" cannot be used as the name of a patch
+abort: "foo#bar" cannot be used as the name of a patch
+abort: "foo:bar" cannot be used as the name of a patch
 % qnew with uncommitted changes
 uncommitted.patch
 % qnew implies add
@@ -52,6 +55,9 @@
 abort: "status" cannot be used as the name of a patch
 abort: "guards" cannot be used as the name of a patch
 abort: ".hgignore" cannot be used as the name of a patch
+abort: ".mqfoo" cannot be used as the name of a patch
+abort: "foo#bar" cannot be used as the name of a patch
+abort: "foo:bar" cannot be used as the name of a patch
 % qnew with uncommitted changes
 uncommitted.patch
 % qnew implies add