--- a/contrib/win32/mercurial.iss Mon Sep 13 01:37:56 2010 +0000
+++ b/contrib/win32/mercurial.iss Tue Sep 14 16:21:01 2010 -0500
@@ -16,10 +16,22 @@
#pragma message "Detected Version: " + VERSION
#endif
+#ifndef ARCH
+#define ARCH = "x86"
+#endif
+
[Setup]
AppCopyright=Copyright 2005-2010 Matt Mackall and others
AppName=Mercurial
+#if ARCH == "x64"
+AppVerName=Mercurial {#VERSION} (64-bit)
+OutputBaseFilename=Mercurial-{#VERSION}-x64
+ArchitecturesAllowed=x64
+ArchitecturesInstallIn64BitMode=x64
+#else
AppVerName=Mercurial {#VERSION}
+OutputBaseFilename=Mercurial-{#VERSION}
+#endif
InfoAfterFile=contrib/win32/postinstall.txt
LicenseFile=COPYING
ShowLanguageDialog=yes
@@ -29,7 +41,6 @@
AppUpdatesURL=http://mercurial.selenic.com/
AppID={{4B95A5F1-EF59-4B08-BED8-C891C46121B3}
AppContact=mercurial@selenic.com
-OutputBaseFilename=Mercurial-{#VERSION}
DefaultDirName={pf}\Mercurial
SourceDir=..\..
VersionInfoDescription=Mercurial distributed SCM (version {#VERSION})
@@ -61,18 +72,21 @@
Source: contrib\win32\mercurial.ini; DestDir: {app}; DestName: Mercurial.ini; Check: CheckFile; AfterInstall: ConcatenateFiles;
Source: contrib\win32\postinstall.txt; DestDir: {app}; DestName: ReleaseNotes.txt
Source: dist\hg.exe; DestDir: {app}; AfterInstall: Touch('{app}\hg.exe.local')
+#if ARCH == "x64"
+Source: dist\*.dll; Destdir: {app}
+Source: dist\*.pyd; Destdir: {app}
+#else
Source: dist\python*.dll; Destdir: {app}; Flags: skipifsourcedoesntexist
-Source: dist\library.zip; DestDir: {app}
-Source: dist\mfc*.dll; DestDir: {app}; Flags: skipifsourcedoesntexist
Source: dist\msvc*.dll; DestDir: {app}; Flags: skipifsourcedoesntexist
+Source: dist\w9xpopen.exe; DestDir: {app}
+#endif
Source: dist\Microsoft.VC*.CRT.manifest; DestDir: {app}; Flags: skipifsourcedoesntexist
-Source: dist\Microsoft.VC*.MFC.manifest; DestDir: {app}; Flags: skipifsourcedoesntexist
-Source: dist\w9xpopen.exe; DestDir: {app}
+Source: dist\library.zip; DestDir: {app}
Source: dist\add_path.exe; DestDir: {app}
Source: doc\*.html; DestDir: {app}\Docs
Source: doc\style.css; DestDir: {app}\Docs
Source: mercurial\help\*.txt; DestDir: {app}\help
-Source: mercurial\locale\*.*; DestDir: {app}\locale; Flags: recursesubdirs createallsubdirs
+Source: mercurial\locale\*.*; DestDir: {app}\locale; Flags: recursesubdirs createallsubdirs skipifsourcedoesntexist
Source: mercurial\templates\*.*; DestDir: {app}\Templates; Flags: recursesubdirs createallsubdirs
Source: CONTRIBUTORS; DestDir: {app}; DestName: Contributors.txt
Source: COPYING; DestDir: {app}; DestName: Copying.txt
@@ -99,6 +113,7 @@
[UninstallDelete]
Type: files; Name: "{app}\hg.exe.local"
+
[Code]
var
WriteFile: Boolean;
--- a/contrib/win32/win32-build.txt Mon Sep 13 01:37:56 2010 +0000
+++ b/contrib/win32/win32-build.txt Tue Sep 14 16:21:01 2010 -0500
@@ -1,13 +1,17 @@
The standalone Windows installer for Mercurial is built in a somewhat
jury-rigged fashion.
-It has the following prerequisites, at least as I build it:
+It has the following prerequisites. Ensure to take the packages
+matching the mercurial version you want to build (32-bit or 64-bit).
+
+ Python 2.6 for Windows
+ http://www.python.org/download/releases/
- Python for Windows
- http://www.python.org/ftp/python/2.4.3/python-2.4.3.msi
-
- MinGW
+ A compiler:
+ either MinGW
http://www.mingw.org/
+ or Microsoft Visual C++ 2008 SP1 Express Edition
+ http://www.microsoft.com/express/Downloads/Download-2008.aspx
Python for Windows Extensions
http://sourceforge.net/projects/pywin32/
@@ -15,19 +19,22 @@
mfc71.dll (just download, don't install; not needed for Python 2.6)
http://starship.python.net/crew/mhammond/win32/
- Visual C++ 2008 redistributable package (needed for Python 2.6)
- http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en
+ Visual C++ 2008 SP1 redistributable package (needed for >= Python 2.6 or if you compile with MSVC)
+ for 32-bit:
+ http://www.microsoft.com/downloads/details.aspx?FamilyID=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2
+ for 64-bit:
+ http://www.microsoft.com/downloads/details.aspx?familyid=BA9257CA-337F-4B40-8C14-157CFDFFEE4E
The py2exe distutils extension
http://sourceforge.net/projects/py2exe/
- GnuWin32 gettext utility
+ GnuWin32 gettext utility (if you want to build translations)
http://gnuwin32.sourceforge.net/packages/gettext.htm
Inno Setup
http://www.jrsoftware.org/isdl.php#qsp
- Get and install ispack-5.3.4.exe which includes Inno Setup Processor,
+ Get and install ispack-5.3.10.exe which includes Inno Setup Processor,
which is necessary to package Mercurial.
ISTool - optional
@@ -45,41 +52,44 @@
Mercurial repository you want to package, and name the repo
C:\hg\hg-release.
-In a shell, build a standalone copy of the hg.exe program:
+In a shell, build a standalone copy of the hg.exe program.
+Building instructions for MinGW:
python setup.py build -c mingw32
- python setup.py py2exe -b 1
-
+ python setup.py py2exe -b 2
Note: the previously suggested combined command of "python setup.py build -c
-mingw32 py2exe -b 1" doesn't work correctly anymore as it doesn't include the
+mingw32 py2exe -b 2" doesn't work correctly anymore as it doesn't include the
extensions in the mercurial subdirectory.
-
If you want to create a file named setup.cfg with the contents:
-
[build]
compiler=mingw32
+you can skip the first build step.
-you can skip the first build step.
+Building instructions with MSVC 2008 SP1 Express Edition:
+ for 32-bit:
+ "C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86
+ python setup.py py2exe -b 2
+ for 64-bit:
+ "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.
If you are using Python up to version 2.5.4, copy mfc71.dll into the dist
directory that just got created.
-If you are using Python 2.6 or later, after installing the Visual C++ 2008
-redistributable package copy into the dist directory that just got created the
-following files:
- - from the directory starting with
- Windows/WinSxS/x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8
- the files named: msvcm90.dll, msvcp90.dll and msvcr90.dll
- - from the directory starting with
- Windows/WinSxS/x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.21022.8
- the files named: mfc90.dll, mfc90u.dll, mfcm90.dll and mfcm90u.dll
- - from the directory named Windows/WinSxS/Manifests, the manifest file
- starting with x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8
- (rename it to Microsoft.VC90.CRT.manifest) and the manifest file starting
- with x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.21022.8 (rename it to
- Microsoft.VC90.MFC.manifest)
+If you are using Python 2.6 or later, or if you are using MSVC 2008 to compile
+mercurial, you must include the C runtime libraries in the installer. To do so,
+install the Visual C++ 2008 SP1 redistributable package. Then in your
+windows\winsxs folder, locate the folder containing the dlls version 9.0.30729.
+For x86, it should be named like x86_Microsoft.VC90.CRT_(...)_9.0.30729(...).
+For x64, it should be named like amd64_Microsoft.VC90.CRT_(...)_9.0.30729(...).
+Copy the files named msvcm90.dll, msvcp90.dll and msvcr90.dll into the dist
+directory.
+Then in the windows\winsxs\manifests folder, locate the corresponding manifest
+file (x86_Microsoft.VC90.CRT_(...)_9.0.30729(...).manifest for x86,
+amd64_Microsoft.VC90.CRT_(...)_9.0.30729(...).manifest for x64), copy it in the
+dist directory and rename it to Microsoft.VC90.CRT.manifest.
Before building the installer, you have to build Mercurial HTML documentation
(or fix mercurial.iss to not reference the doc directory):
@@ -94,21 +104,27 @@
Otherwise you run the Inno Setup compiler. Assuming it's in the path
you should execute:
- iscc contrib\win32\mercurial.iss /DVERSION=foo
+ iscc contrib\win32\mercurial.iss /dVERSION=foo
Where 'foo' is the version number you would like to see in the
'Add/Remove Applications' tool. The installer will be placed into
a directory named Output/ at the root of your repository.
+If the /dVERSION=foo parameter is not given in the command line, the
+installer will retrieve the version information from the __version__.py file.
+
+If you want to build an installer for a 64-bit mercurial, add /dARCH=x64 to
+your command line:
+ iscc contrib\win32\mercurial.iss /dARCH=x64
To automate the steps above you may want to create a batchfile based on the
-following:
+following (MinGW build chain):
echo [build] > setup.cfg
echo compiler=mingw32 >> setup.cfg
- python setup.py py2exe -b 1
+ python setup.py py2exe -b 2
cd doc
mingw32-make html
cd ..
- iscc contrib\win32\mercurial.iss /DVERSION=snapshot
+ iscc contrib\win32\mercurial.iss /dVERSION=snapshot
and run it from the root of the hg repository (c:\hg\hg-release).
--- a/hgext/color.py Mon Sep 13 01:37:56 2010 +0000
+++ b/hgext/color.py Tue Sep 14 16:21:01 2010 -0500
@@ -233,7 +233,7 @@
# http://msdn.microsoft.com/en-us/library/ms682088%28VS.85%29.aspx
w32effects = {
- 'none': 0,
+ 'none': -1,
'black': 0,
'red': win32c.FOREGROUND_RED,
'green': win32c.FOREGROUND_GREEN,
@@ -244,7 +244,7 @@
'white': (win32c.FOREGROUND_RED | win32c.FOREGROUND_GREEN |
win32c.FOREGROUND_BLUE),
'bold': win32c.FOREGROUND_INTENSITY,
- 'black_background': 0,
+ 'black_background': 0x100, # unused value > 0x0f
'red_background': win32c.BACKGROUND_RED,
'green_background': win32c.BACKGROUND_GREEN,
'yellow_background': win32c.BACKGROUND_RED | win32c.BACKGROUND_GREEN,
@@ -258,6 +258,11 @@
'inverse': win32c.COMMON_LVB_REVERSE_VIDEO, # double-byte charsets only
}
+ passthrough = set([win32c.FOREGROUND_INTENSITY,
+ win32c.BACKGROUND_INTENSITY,
+ win32c.COMMON_LVB_UNDERSCORE,
+ win32c.COMMON_LVB_REVERSE_VIDEO])
+
try:
stdout = win32c.GetStdHandle(win32c.STD_OUTPUT_HANDLE)
if stdout is None:
@@ -272,13 +277,23 @@
def win32print(text, orig, **opts):
label = opts.get('label', '')
- attr = 0
+ attr = origattr
+
+ def mapcolor(val, attr):
+ if val == -1:
+ return origattr
+ elif val in passthrough:
+ return attr | val
+ elif val > 0x0f:
+ return (val & 0x70) | (attr & 0x8f)
+ else:
+ return (val & 0x07) | (attr & 0xf8)
# determine console attributes based on labels
for l in label.split():
style = _styles.get(l, '')
for effect in style.split():
- attr |= w32effects[effect]
+ attr = mapcolor(w32effects[effect], attr)
# hack to ensure regexp finds data
if not text.startswith('\033['):
@@ -289,9 +304,8 @@
while m:
for sattr in m.group(1).split(';'):
if sattr:
- val = int(sattr)
- attr = val and attr|val or 0
- stdout.SetConsoleTextAttribute(attr or origattr)
+ attr = mapcolor(int(sattr), attr)
+ stdout.SetConsoleTextAttribute(attr)
orig(m.group(2), **opts)
m = re.match(ansire, m.group(3))
--- a/hgext/convert/darcs.py Mon Sep 13 01:37:56 2010 +0000
+++ b/hgext/convert/darcs.py Tue Sep 14 16:21:01 2010 -0500
@@ -83,6 +83,8 @@
shutil.rmtree(self.tmppath, ignore_errors=True)
def xml(self, cmd, **kwargs):
+ # NOTE: darcs is currently encoding agnostic and will print
+ # patch metadata byte-for-byte, even in the XML changelog.
etree = ElementTree()
fp = self._run(cmd, **kwargs)
etree.parse(fp)
@@ -107,8 +109,12 @@
elt = self.changes[rev]
date = util.strdate(elt.get('local_date'), '%a %b %d %H:%M:%S %Z %Y')
desc = elt.findtext('name') + '\n' + elt.findtext('comment', '')
- return commit(author=elt.get('author'), date=util.datestr(date),
- desc=desc.strip(), parents=self.parents[rev])
+ # etree can return unicode objects for name, comment, and author,
+ # so recode() is used to ensure str objects are emitted.
+ return commit(author=self.recode(elt.get('author')),
+ date=util.datestr(date),
+ desc=self.recode(desc).strip(),
+ parents=self.parents[rev])
def pull(self, rev):
output, status = self.run('pull', self.path, all=True,
--- a/hgext/mq.py Mon Sep 13 01:37:56 2010 +0000
+++ b/hgext/mq.py Tue Sep 14 16:21:01 2010 -0500
@@ -685,7 +685,7 @@
p1, p2 = repo.dirstate.parents()
repo.dirstate.setparents(p1, merge)
- files = patch.updatedir(self.ui, repo, files)
+ files = cmdutil.updatedir(self.ui, repo, files)
match = cmdutil.matchfiles(repo, files or [])
n = repo.commit(message, ph.user, ph.date, match=match, force=True)
@@ -771,7 +771,7 @@
if opts.get('rev'):
if not self.applied:
raise util.Abort(_('no patches applied'))
- revs = cmdutil.revrange(repo, opts['rev'])
+ revs = cmdutil.revrange(repo, opts.get('rev'))
if len(revs) > 1 and revs[0] > revs[1]:
revs.reverse()
revpatches = self._revpatches(repo, revs)
@@ -1831,9 +1831,9 @@
"""
q = repo.mq
try:
- q.qimport(repo, filename, patchname=opts['name'],
- existing=opts['existing'], force=opts['force'], rev=opts['rev'],
- git=opts['git'])
+ q.qimport(repo, filename, patchname=opts.get('name'),
+ existing=opts.get('existing'), force=opts.get('force'),
+ rev=opts.get('rev'), git=opts.get('git'))
finally:
q.save_dirty()
@@ -1876,7 +1876,7 @@
This command is deprecated. Without -c, it's implied by other relevant
commands. With -c, use :hg:`init --mq` instead."""
- return qinit(ui, repo, create=opts['create_repo'])
+ return qinit(ui, repo, create=opts.get('create_repo'))
def clone(ui, source, dest=None, **opts):
'''clone main and patch repository at same time
@@ -1901,8 +1901,8 @@
if dest is None:
dest = hg.defaultdest(source)
sr = hg.repository(hg.remoteui(ui, opts), ui.expandpath(source))
- if opts['patches']:
- patchespath = ui.expandpath(opts['patches'])
+ if opts.get('patches'):
+ patchespath = ui.expandpath(opts.get('patches'))
else:
patchespath = patchdir(sr)
try:
@@ -1925,20 +1925,20 @@
pass
ui.note(_('cloning main repository\n'))
sr, dr = hg.clone(ui, sr.url(), dest,
- pull=opts['pull'],
+ pull=opts.get('pull'),
rev=destrev,
update=False,
- stream=opts['uncompressed'])
+ stream=opts.get('uncompressed'))
ui.note(_('cloning patch repository\n'))
- hg.clone(ui, opts['patches'] or patchdir(sr), patchdir(dr),
- pull=opts['pull'], update=not opts['noupdate'],
- stream=opts['uncompressed'])
+ hg.clone(ui, opts.get('patches') or patchdir(sr), patchdir(dr),
+ pull=opts.get('pull'), update=not opts.get('noupdate'),
+ stream=opts.get('uncompressed'))
if dr.local():
if qbase:
ui.note(_('stripping applied patches from destination '
'repository\n'))
dr.mq.strip(dr, [qbase], update=False, backup=None)
- if not opts['noupdate']:
+ if not opts.get('noupdate'):
ui.note(_('updating destination repository\n'))
hg.update(dr, dr.changelog.tip())
@@ -1954,7 +1954,7 @@
def series(ui, repo, **opts):
"""print the entire series file"""
- repo.mq.qseries(repo, missing=opts['missing'], summary=opts['summary'])
+ repo.mq.qseries(repo, missing=opts.get('missing'), summary=opts.get('summary'))
return 0
def top(ui, repo, **opts):
@@ -2021,7 +2021,7 @@
"""
msg = cmdutil.logmessage(opts)
def getmsg():
- return ui.edit(msg, opts['user'] or ui.username())
+ return ui.edit(msg, opts.get('user') or ui.username())
q = repo.mq
opts['msg'] = msg
if opts.get('edit'):
@@ -2054,7 +2054,7 @@
"""
q = repo.mq
message = cmdutil.logmessage(opts)
- if opts['edit']:
+ if opts.get('edit'):
if not q.applied:
ui.write(_("no patches applied\n"))
return 1
@@ -2110,7 +2110,7 @@
q.check_localchanges(repo)
message = cmdutil.logmessage(opts)
- if opts['edit']:
+ if opts.get('edit'):
if message:
raise util.Abort(_('option "-e" incompatible with "-m" or "-l"'))
@@ -2134,7 +2134,7 @@
(patchsuccess, files, fuzz) = q.patch(repo, pf)
if not patchsuccess:
raise util.Abort(_('error folding patch %s') % p)
- patch.updatedir(ui, repo, files)
+ cmdutil.updatedir(ui, repo, files)
if not message:
ph = patchheader(q.join(parent), q.plainmode)
@@ -2144,7 +2144,7 @@
message.extend(msg)
message = '\n'.join(message)
- if opts['edit']:
+ if opts.get('edit'):
message = ui.edit(message, user or ui.username())
diffopts = q.patchopts(q.diffopts(), *patches)
@@ -2157,9 +2157,9 @@
q = repo.mq
patch = q.lookup(patch)
if q.isapplied(patch):
- ret = q.pop(repo, patch, force=opts['force'])
+ ret = q.pop(repo, patch, force=opts.get('force'))
else:
- ret = q.push(repo, patch, force=opts['force'])
+ ret = q.push(repo, patch, force=opts.get('force'))
q.save_dirty()
return ret
@@ -2205,8 +2205,8 @@
applied = set(p.name for p in q.applied)
patch = None
args = list(args)
- if opts['list']:
- if args or opts['none']:
+ if opts.get('list'):
+ if args or opts.get('none'):
raise util.Abort(_('cannot mix -l/--list with options or arguments'))
for i in xrange(len(q.series)):
status(i)
@@ -2219,7 +2219,7 @@
patch = args.pop(0)
if patch is None:
raise util.Abort(_('no patch to work with'))
- if args or opts['none']:
+ if args or opts.get('none'):
idx = q.find_series(patch)
if idx is None:
raise util.Abort(_('no patch named %s') % patch)
@@ -2276,9 +2276,9 @@
q = repo.mq
mergeq = None
- if opts['merge']:
- if opts['name']:
- newpath = repo.join(opts['name'])
+ if opts.get('merge'):
+ if opts.get('name'):
+ newpath = repo.join(opts.get('name'))
else:
newpath, i = lastsavename(q.path)
if not newpath:
@@ -2286,7 +2286,7 @@
return 1
mergeq = queue(ui, repo.join(""), newpath)
ui.warn(_("merging with queue at: %s\n") % mergeq.path)
- ret = q.push(repo, patch, force=opts['force'], list=opts['list'],
+ ret = q.push(repo, patch, force=opts.get('force'), list=opts.get('list'),
mergeq=mergeq, all=opts.get('all'), move=opts.get('move'))
return ret
@@ -2298,14 +2298,14 @@
top of the stack.
"""
localupdate = True
- if opts['name']:
- q = queue(ui, repo.join(""), repo.join(opts['name']))
+ if opts.get('name'):
+ q = queue(ui, repo.join(""), repo.join(opts.get('name')))
ui.warn(_('using patch queue: %s\n') % q.path)
localupdate = False
else:
q = repo.mq
- ret = q.pop(repo, patch, force=opts['force'], update=localupdate,
- all=opts['all'])
+ ret = q.pop(repo, patch, force=opts.get('force'), update=localupdate,
+ all=opts.get('all'))
q.save_dirty()
return ret
@@ -2379,8 +2379,8 @@
This command is deprecated, use rebase --mq instead."""
rev = repo.lookup(rev)
q = repo.mq
- q.restore(repo, rev, delete=opts['delete'],
- qupdate=opts['update'])
+ q.restore(repo, rev, delete=opts.get('delete'),
+ qupdate=opts.get('update'))
q.save_dirty()
return 0
@@ -2394,22 +2394,22 @@
if ret:
return ret
q.save_dirty()
- if opts['copy']:
+ if opts.get('copy'):
path = q.path
- if opts['name']:
- newpath = os.path.join(q.basepath, opts['name'])
+ if opts.get('name'):
+ newpath = os.path.join(q.basepath, opts.get('name'))
if os.path.exists(newpath):
if not os.path.isdir(newpath):
raise util.Abort(_('destination %s exists and is not '
'a directory') % newpath)
- if not opts['force']:
+ if not opts.get('force'):
raise util.Abort(_('destination %s exists, '
'use -f to force') % newpath)
else:
newpath = savename(path)
ui.warn(_("copy %s to %s\n") % (path, newpath))
util.copyfiles(path, newpath)
- if opts['empty']:
+ if opts.get('empty'):
try:
os.unlink(q.join(q.status_path))
except:
@@ -2435,13 +2435,13 @@
the local revision numbers will in general be different after the
restore.
- Use the --nobackup option to discard the backup bundle once the
+ Use the --no-backup option to discard the backup bundle once the
operation completes.
"""
backup = 'all'
- if opts['backup']:
+ if opts.get('backup'):
backup = 'strip'
- elif opts['nobackup']:
+ elif opts.get('no-backup') or opts.get('nobackup'):
backup = 'none'
cl = repo.changelog
@@ -2479,7 +2479,7 @@
q.save_dirty()
repo.mq.strip(repo, list(rootnodes), backup=backup, update=update,
- force=opts['force'])
+ force=opts.get('force'))
return 0
def select(ui, repo, *args, **opts):
@@ -2517,7 +2517,7 @@
q = repo.mq
guards = q.active()
- if args or opts['none']:
+ if args or opts.get('none'):
old_unapplied = q.unapplied(repo)
old_guarded = [i for i in xrange(len(q.applied)) if
not q.pushable(i)[0]]
@@ -2525,7 +2525,7 @@
q.save_dirty()
if not args:
ui.status(_('guards deactivated\n'))
- if not opts['pop'] and not opts['reapply']:
+ if not opts.get('pop') and not opts.get('reapply'):
unapplied = q.unapplied(repo)
guarded = [i for i in xrange(len(q.applied))
if not q.pushable(i)[0]]
@@ -2537,7 +2537,7 @@
ui.status(_('number of guarded, applied patches has changed '
'from %d to %d\n') %
(len(old_guarded), len(guarded)))
- elif opts['series']:
+ elif opts.get('series'):
guards = {}
noguards = 0
for gs in q.series_guards:
@@ -2564,9 +2564,9 @@
ui.write(g, '\n')
else:
ui.write(_('no active guards\n'))
- reapply = opts['reapply'] and q.applied and q.appliedname(-1)
+ reapply = opts.get('reapply') and q.applied and q.appliedname(-1)
popped = False
- if opts['pop'] or opts['reapply']:
+ if opts.get('pop') or opts.get('reapply'):
for i in xrange(len(q.applied)):
pushable, reason = q.pushable(i)
if not pushable:
@@ -2601,9 +2601,9 @@
an upstream repository, or if you are about to push your changes
to upstream.
"""
- if not opts['applied'] and not revrange:
+ if not opts.get('applied') and not revrange:
raise util.Abort(_('no revisions specified'))
- elif opts['applied']:
+ elif opts.get('applied'):
revrange = ('qbase::qtip',) + revrange
q = repo.mq
@@ -3087,7 +3087,8 @@
('b', 'backup', None, _('bundle only changesets with local revision'
' number greater than REV which are not'
' descendants of REV (DEPRECATED)')),
- ('n', 'nobackup', None, _('no backups'))],
+ ('n', 'no-backup', None, _('no backups')),
+ ('', 'nobackup', None, _('no backups (DEPRECATED)'))],
_('hg strip [-f] [-n] REV...')),
"qtop": (top, [] + seriesopts, _('hg qtop [-s]')),
"qunapplied":
--- a/hgext/patchbomb.py Mon Sep 13 01:37:56 2010 +0000
+++ b/hgext/patchbomb.py Tue Sep 14 16:21:01 2010 -0500
@@ -394,17 +394,14 @@
if addrs:
showaddrs.append('%s %s' % (showaddr, ', '.join(addrs)))
- return mail.addrlistencode(ui, addrs, _charsets,
- opts.get('test'))
+ return mail.addrlistencode(ui, addrs, _charsets, opts.get('test'))
addrs = ui.config('email', opt) or ui.config('patchbomb', opt) or ''
if not addrs and prpt:
addrs = prompt(ui, prpt, default)
if addrs:
- showaddr = '%s %s' % (showaddr, addrs)
- showaddrs.append(showaddr)
-
+ showaddrs.append('%s %s' % (showaddr, addrs))
return mail.addrlistencode(ui, [addrs], _charsets, opts.get('test'))
to = getaddrs('to', 'To')
@@ -441,7 +438,7 @@
sender_addr = email.Utils.parseaddr(sender)[1]
sender = mail.addressencode(ui, sender, _charsets, opts.get('test'))
sendmail = None
- for m, subj, ds in msgs:
+ for i, (m, subj, ds) in enumerate(msgs):
try:
m['Message-Id'] = genmsgid(m['X-Mercurial-Node'])
except TypeError:
@@ -483,6 +480,7 @@
fp.close()
elif mbox:
ui.status(_('Writing '), subj, ' ...\n')
+ ui.progress(_('writing'), i, item=subj, total=len(msgs))
fp = open(mbox, 'In-Reply-To' in m and 'ab+' or 'wb+')
generator = email.Generator.Generator(fp, mangle_from_=True)
# Should be time.asctime(), but Windows prints 2-characters day
@@ -497,6 +495,7 @@
if not sendmail:
sendmail = mail.connect(ui)
ui.status(_('Sending '), subj, ' ...\n')
+ ui.progress(_('sending'), i, item=subj, total=len(msgs))
# Exim does not remove the Bcc field
del m['Bcc']
fp = cStringIO.StringIO()
@@ -504,6 +503,9 @@
generator.flatten(m, 0)
sendmail(sender, to + bcc + cc, fp.getvalue())
+ ui.progress(_('writing'), None)
+ ui.progress(_('sending'), None)
+
emailopts = [
('a', 'attach', None, _('send patches as attachments')),
('i', 'inline', None, _('send patches as inline attachments')),
--- a/hgext/record.py Mon Sep 13 01:37:56 2010 +0000
+++ b/hgext/record.py Tue Sep 14 16:21:01 2010 -0500
@@ -497,7 +497,7 @@
pfiles = {}
patch.internalpatch(fp, ui, 1, repo.root, files=pfiles,
eolmode=None)
- patch.updatedir(ui, repo, pfiles)
+ cmdutil.updatedir(ui, repo, pfiles)
except patch.PatchError, err:
s = str(err)
if s:
--- a/hgext/transplant.py Mon Sep 13 01:37:56 2010 +0000
+++ b/hgext/transplant.py Tue Sep 14 16:21:01 2010 -0500
@@ -225,7 +225,7 @@
% revlog.hex(node))
return None
finally:
- files = patch.updatedir(self.ui, repo, files)
+ files = cmdutil.updatedir(self.ui, repo, files)
except Exception, inst:
seriespath = os.path.join(self.path, 'series')
if os.path.exists(seriespath):
--- a/mercurial/cmdutil.py Mon Sep 13 01:37:56 2010 +0000
+++ b/mercurial/cmdutil.py Tue Sep 14 16:21:01 2010 -0500
@@ -329,6 +329,49 @@
finally:
wlock.release()
+def updatedir(ui, repo, patches, similarity=0):
+ '''Update dirstate after patch application according to metadata'''
+ if not patches:
+ return
+ copies = []
+ removes = set()
+ cfiles = patches.keys()
+ cwd = repo.getcwd()
+ if cwd:
+ cfiles = [util.pathto(repo.root, cwd, f) for f in patches.keys()]
+ for f in patches:
+ gp = patches[f]
+ if not gp:
+ continue
+ if gp.op == 'RENAME':
+ copies.append((gp.oldpath, gp.path))
+ removes.add(gp.oldpath)
+ elif gp.op == 'COPY':
+ copies.append((gp.oldpath, gp.path))
+ elif gp.op == 'DELETE':
+ removes.add(gp.path)
+
+ wctx = repo[None]
+ for src, dst in copies:
+ wctx.copy(src, dst)
+ if (not similarity) and removes:
+ wctx.remove(sorted(removes), True)
+
+ for f in patches:
+ gp = patches[f]
+ if gp and gp.mode:
+ islink, isexec = gp.mode
+ dst = repo.wjoin(gp.path)
+ # patch won't create empty files
+ if gp.op == 'ADD' and not os.path.exists(dst):
+ flags = (isexec and 'x' or '') + (islink and 'l' or '')
+ repo.wwrite(gp.path, '', flags)
+ util.set_flags(dst, islink, isexec)
+ addremove(repo, cfiles, similarity=similarity)
+ files = patches.keys()
+ files.extend([r for r in removes if r not in files])
+ return sorted(files)
+
def copy(ui, repo, pats, opts, rename=False):
# called with the repo lock held
#
@@ -1237,6 +1280,35 @@
yield change(rev)
return iterate()
+def add(ui, repo, match, dryrun, listsubrepos, prefix):
+ join = lambda f: os.path.join(prefix, f)
+ bad = []
+ oldbad = match.bad
+ match.bad = lambda x, y: bad.append(x) or oldbad(x, y)
+ names = []
+ wctx = repo[None]
+ for f in repo.walk(match):
+ exact = match.exact(f)
+ if exact or f not in repo.dirstate:
+ names.append(f)
+ if ui.verbose or not exact:
+ ui.status(_('adding %s\n') % match.rel(join(f)))
+
+ if listsubrepos:
+ for subpath in wctx.substate:
+ sub = wctx.sub(subpath)
+ try:
+ submatch = matchmod.narrowmatcher(subpath, match)
+ bad.extend(sub.add(ui, submatch, dryrun, prefix))
+ except error.LookupError:
+ ui.status(_("skipping missing subrepository: %s\n")
+ % join(subpath))
+
+ if not dryrun:
+ rejected = wctx.add(names, prefix)
+ bad.extend(f for f in rejected if f in match.files())
+ return bad
+
def commit(ui, repo, commitfunc, pats, opts):
'''commit the specified files or all outstanding changes'''
date = opts.get('date')
--- a/mercurial/commands.py Mon Sep 13 01:37:56 2010 +0000
+++ b/mercurial/commands.py Tue Sep 14 16:21:01 2010 -0500
@@ -9,7 +9,7 @@
from lock import release
from i18n import _, gettext
import os, re, sys, difflib, time, tempfile
-import hg, util, revlog, bundlerepo, extensions, copies, error
+import hg, util, revlog, extensions, copies, error
import patch, help, mdiff, url, encoding, templatekw, discovery
import archival, changegroup, cmdutil, sshserver, hbisect, hgweb, hgweb.server
import merge as mergemod
@@ -46,22 +46,10 @@
Returns 0 if all files are successfully added.
"""
- bad = []
- names = []
m = cmdutil.match(repo, pats, opts)
- oldbad = m.bad
- m.bad = lambda x, y: bad.append(x) or oldbad(x, y)
-
- for f in repo.walk(m):
- exact = m.exact(f)
- if exact or f not in repo.dirstate:
- names.append(f)
- if ui.verbose or not exact:
- ui.status(_('adding %s\n') % m.rel(f))
- if not opts.get('dry_run'):
- rejected = repo[None].add(names)
- bad += [f for f in rejected if f in m.files()]
- return bad and 1 or 0
+ rejected = cmdutil.add(ui, repo, m, opts.get('dry_run'),
+ opts.get('subrepos'), prefix="")
+ return rejected and 1 or 0
def addremove(ui, repo, *pats, **opts):
"""add all new files, delete all missing files
@@ -2301,8 +2289,8 @@
patch.patch(tmpname, ui, strip=strip, cwd=repo.root,
files=files, eolmode=None)
finally:
- files = patch.updatedir(ui, repo, files,
- similarity=sim / 100.0)
+ files = cmdutil.updatedir(ui, repo, files,
+ similarity=sim / 100.0)
if not opts.get('no_commit'):
if opts.get('exact'):
m = None
@@ -2369,66 +2357,16 @@
Returns 0 if there are incoming changes, 1 otherwise.
"""
- limit = cmdutil.loglimit(opts)
- source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
- other = hg.repository(hg.remoteui(repo, opts), source)
- ui.status(_('comparing with %s\n') % url.hidepassword(source))
- revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev'))
- if revs:
- revs = [other.lookup(rev) for rev in revs]
-
- tmp = discovery.findcommonincoming(repo, other, heads=revs,
- force=opts.get('force'))
- common, incoming, rheads = tmp
- if not incoming:
- try:
- os.unlink(opts["bundle"])
- except:
- pass
- ui.status(_("no changes found\n"))
- return 1
-
- cleanup = None
- try:
- fname = opts["bundle"]
- if fname or not other.local():
- # create a bundle (uncompressed if other repo is not local)
-
- if revs is None and other.capable('changegroupsubset'):
- revs = rheads
-
- if revs is None:
- cg = other.changegroup(incoming, "incoming")
- else:
- cg = other.changegroupsubset(incoming, revs, 'incoming')
- bundletype = other.local() and "HG10BZ" or "HG10UN"
- fname = cleanup = changegroup.writebundle(cg, fname, bundletype)
- # keep written bundle?
- if opts["bundle"]:
- cleanup = None
- if not other.local():
- # use the created uncompressed bundlerepo
- other = bundlerepo.bundlerepository(ui, repo.root, fname)
-
- o = other.changelog.nodesbetween(incoming, revs)[0]
- if opts.get('newest_first'):
- o.reverse()
- displayer = cmdutil.show_changeset(ui, other, opts)
- count = 0
- for n in o:
- if limit is not None and count >= limit:
- break
- parents = [p for p in other.changelog.parents(n) if p != nullid]
- if opts.get('no_merges') and len(parents) == 2:
- continue
- count += 1
- displayer.show(other[n])
- displayer.close()
- finally:
- if hasattr(other, 'close'):
- other.close()
- if cleanup:
- os.unlink(cleanup)
+ if opts.get('bundle') and opts.get('subrepos'):
+ raise util.Abort(_('cannot combine --bundle and --subrepos'))
+
+ ret = hg.incoming(ui, repo, source, opts)
+ if opts.get('subrepos'):
+ ctx = repo[None]
+ for subpath in sorted(ctx.substate):
+ sub = ctx.sub(subpath)
+ ret = min(ret, sub.incoming(ui, source, opts))
+ return ret
def init(ui, dest=".", **opts):
"""create a new repository in the given directory
@@ -2684,33 +2622,13 @@
Returns 0 if there are outgoing changes, 1 otherwise.
"""
- limit = cmdutil.loglimit(opts)
- dest = ui.expandpath(dest or 'default-push', dest or 'default')
- dest, branches = hg.parseurl(dest, opts.get('branch'))
- revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
- if revs:
- revs = [repo.lookup(rev) for rev in revs]
-
- other = hg.repository(hg.remoteui(repo, opts), dest)
- ui.status(_('comparing with %s\n') % url.hidepassword(dest))
- o = discovery.findoutgoing(repo, other, force=opts.get('force'))
- if not o:
- ui.status(_("no changes found\n"))
- return 1
- o = repo.changelog.nodesbetween(o, revs)[0]
- if opts.get('newest_first'):
- o.reverse()
- displayer = cmdutil.show_changeset(ui, repo, opts)
- count = 0
- for n in o:
- if limit is not None and count >= limit:
- break
- parents = [p for p in repo.changelog.parents(n) if p != nullid]
- if opts.get('no_merges') and len(parents) == 2:
- continue
- count += 1
- displayer.show(repo[n])
- displayer.close()
+ ret = hg.outgoing(ui, repo, dest, opts)
+ if opts.get('subrepos'):
+ ctx = repo[None]
+ for subpath in sorted(ctx.substate):
+ sub = ctx.sub(subpath)
+ ret = min(ret, sub.outgoing(ui, dest, opts))
+ return ret
def parents(ui, repo, file_=None, **opts):
"""show the parents of the working directory or revision
@@ -4014,7 +3932,8 @@
]
table = {
- "^add": (add, walkopts + dryrunopts, _('[OPTION]... [FILE]...')),
+ "^add": (add, walkopts + subrepoopts + dryrunopts,
+ _('[OPTION]... [FILE]...')),
"addremove":
(addremove, similarityopts + walkopts + dryrunopts,
_('[OPTION]... [FILE]...')),
@@ -4281,7 +4200,7 @@
_('a remote changeset intended to be added'), _('REV')),
('b', 'branch', [],
_('a specific branch you would like to pull'), _('BRANCH')),
- ] + logopts + remoteopts,
+ ] + logopts + remoteopts + subrepoopts,
_('[-p] [-n] [-M] [-f] [-r REV]...'
' [--bundle FILENAME] [SOURCE]')),
"^init":
@@ -4348,7 +4267,7 @@
('n', 'newest-first', None, _('show newest record first')),
('b', 'branch', [],
_('a specific branch you would like to push'), _('BRANCH')),
- ] + logopts + remoteopts,
+ ] + logopts + remoteopts + subrepoopts,
_('[-M] [-p] [-n] [-f] [-r REV]... [DEST]')),
"parents":
(parents,
--- a/mercurial/context.py Mon Sep 13 01:37:56 2010 +0000
+++ b/mercurial/context.py Tue Sep 14 16:21:01 2010 -0500
@@ -769,7 +769,8 @@
self.modified() or self.added() or self.removed() or
(missing and self.deleted()))
- def add(self, list):
+ def add(self, list, prefix=""):
+ join = lambda f: os.path.join(prefix, f)
wlock = self._repo.wlock()
ui, ds = self._repo.ui, self._repo.dirstate
try:
@@ -779,7 +780,7 @@
try:
st = os.lstat(p)
except:
- ui.warn(_("%s does not exist!\n") % f)
+ ui.warn(_("%s does not exist!\n") % join(f))
rejected.append(f)
continue
if st.st_size > 10000000:
@@ -787,13 +788,13 @@
"to manage this file\n"
"(use 'hg revert %s' to cancel the "
"pending addition)\n")
- % (f, 3 * st.st_size // 1000000, f))
+ % (f, 3 * st.st_size // 1000000, join(f)))
if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)):
ui.warn(_("%s not added: only files and symlinks "
- "supported currently\n") % f)
+ "supported currently\n") % join(f))
rejected.append(p)
elif ds[f] in 'amn':
- ui.warn(_("%s already tracked!\n") % f)
+ ui.warn(_("%s already tracked!\n") % join(f))
elif ds[f] == 'r':
ds.normallookup(f)
else:
--- a/mercurial/dispatch.py Mon Sep 13 01:37:56 2010 +0000
+++ b/mercurial/dispatch.py Tue Sep 14 16:21:01 2010 -0500
@@ -24,7 +24,7 @@
except util.Abort, inst:
sys.stderr.write(_("abort: %s\n") % inst)
if inst.hint:
- sys.stderr.write(_("(%s)\n") % inst.hint)
+ sys.stderr.write("(%s)\n" % inst.hint)
return -1
except error.ParseError, inst:
if len(inst.args) > 1:
--- a/mercurial/hg.py Mon Sep 13 01:37:56 2010 +0000
+++ b/mercurial/hg.py Tue Sep 14 16:21:01 2010 -0500
@@ -8,8 +8,10 @@
from i18n import _
from lock import release
+from node import hex, nullid, nullrev, short
import localrepo, bundlerepo, httprepo, sshrepo, statichttprepo
import lock, util, extensions, error, encoding, node
+import cmdutil, discovery, url, changegroup
import merge as mergemod
import verify as verifymod
import errno, os, shutil
@@ -406,6 +408,97 @@
repo.ui.status(_("(branch merge, don't forget to commit)\n"))
return stats[3] > 0
+def incoming(ui, repo, source, opts):
+ limit = cmdutil.loglimit(opts)
+ source, branches = parseurl(ui.expandpath(source), opts.get('branch'))
+ other = repository(remoteui(repo, opts), source)
+ ui.status(_('comparing with %s\n') % url.hidepassword(source))
+ revs, checkout = addbranchrevs(repo, other, branches, opts.get('rev'))
+ if revs:
+ revs = [other.lookup(rev) for rev in revs]
+
+ tmp = discovery.findcommonincoming(repo, other, heads=revs,
+ force=opts.get('force'))
+ common, incoming, rheads = tmp
+ if not incoming:
+ try:
+ os.unlink(opts["bundle"])
+ except:
+ pass
+ ui.status(_("no changes found\n"))
+ return 1
+
+ cleanup = None
+ try:
+ fname = opts["bundle"]
+ if fname or not other.local():
+ # create a bundle (uncompressed if other repo is not local)
+
+ if revs is None and other.capable('changegroupsubset'):
+ revs = rheads
+
+ if revs is None:
+ cg = other.changegroup(incoming, "incoming")
+ else:
+ cg = other.changegroupsubset(incoming, revs, 'incoming')
+ bundletype = other.local() and "HG10BZ" or "HG10UN"
+ fname = cleanup = changegroup.writebundle(cg, fname, bundletype)
+ # keep written bundle?
+ if opts["bundle"]:
+ cleanup = None
+ if not other.local():
+ # use the created uncompressed bundlerepo
+ other = bundlerepo.bundlerepository(ui, repo.root, fname)
+
+ o = other.changelog.nodesbetween(incoming, revs)[0]
+ if opts.get('newest_first'):
+ o.reverse()
+ displayer = cmdutil.show_changeset(ui, other, opts)
+ count = 0
+ for n in o:
+ if limit is not None and count >= limit:
+ break
+ parents = [p for p in other.changelog.parents(n) if p != nullid]
+ if opts.get('no_merges') and len(parents) == 2:
+ continue
+ count += 1
+ displayer.show(other[n])
+ displayer.close()
+ finally:
+ if hasattr(other, 'close'):
+ other.close()
+ if cleanup:
+ os.unlink(cleanup)
+
+def outgoing(ui, repo, dest, opts):
+ limit = cmdutil.loglimit(opts)
+ dest = ui.expandpath(dest or 'default-push', dest or 'default')
+ dest, branches = parseurl(dest, opts.get('branch'))
+ revs, checkout = addbranchrevs(repo, repo, branches, opts.get('rev'))
+ if revs:
+ revs = [repo.lookup(rev) for rev in revs]
+
+ other = repository(remoteui(repo, opts), dest)
+ ui.status(_('comparing with %s\n') % url.hidepassword(dest))
+ o = discovery.findoutgoing(repo, other, force=opts.get('force'))
+ if not o:
+ ui.status(_("no changes found\n"))
+ return 1
+ o = repo.changelog.nodesbetween(o, revs)[0]
+ if opts.get('newest_first'):
+ o.reverse()
+ displayer = cmdutil.show_changeset(ui, repo, opts)
+ count = 0
+ for n in o:
+ if limit is not None and count >= limit:
+ break
+ parents = [p for p in repo.changelog.parents(n) if p != nullid]
+ if opts.get('no_merges') and len(parents) == 2:
+ continue
+ count += 1
+ displayer.show(repo[n])
+ displayer.close()
+
def revert(repo, node, choose):
"""revert changes to revision in node without updating dirstate"""
return mergemod.update(repo, node, False, True, choose)[3] > 0
--- a/mercurial/match.py Mon Sep 13 01:37:56 2010 +0000
+++ b/mercurial/match.py Tue Sep 14 16:21:01 2010 -0500
@@ -129,9 +129,18 @@
['b.txt']
>>> m2.exact('b.txt')
True
+ >>> m2.rel('b.txt')
+ 'b.txt'
+ >>> def bad(f, msg):
+ ... print "%s: %s" % (f, msg)
+ >>> m1.bad = bad
+ >>> m2.bad('x.txt', 'No such file')
+ sub/x.txt: No such file
"""
def __init__(self, path, matcher):
+ self._root = matcher._root
+ self._cwd = matcher._cwd
self._path = path
self._matcher = matcher
@@ -141,6 +150,9 @@
self.matchfn = lambda fn: matcher.matchfn(self._path + "/" + fn)
self._fmap = set(self._files)
+ def bad(self, f, msg):
+ self._matcher.bad(self._path + "/" + f, msg)
+
def patkind(pat):
return _patsplit(pat, None)[0]
--- a/mercurial/merge.py Mon Sep 13 01:37:56 2010 +0000
+++ b/mercurial/merge.py Tue Sep 14 16:21:01 2010 -0500
@@ -433,7 +433,7 @@
the parent rev to the target rev (linear, on the same named
branch, or on another named branch).
- This logic is tested by test-update-branches.
+ This logic is tested by test-update-branches.t.
-c -C dirty rev | linear same cross
n n n n | ok (1) x
--- a/mercurial/patch.py Mon Sep 13 01:37:56 2010 +0000
+++ b/mercurial/patch.py Tue Sep 14 16:21:01 2010 -0500
@@ -11,7 +11,7 @@
from i18n import _
from node import hex, nullid, short
-import base85, cmdutil, mdiff, util, diffhelpers, copies, encoding
+import base85, mdiff, util, diffhelpers, copies, encoding
gitre = re.compile('diff --git a/(.*) b/(.*)')
@@ -444,8 +444,8 @@
def writelines(self, fname, lines):
# Ensure supplied data ends in fname, being a regular file or
- # a symlink. updatedir() will -too magically- take care of
- # setting it to the proper type afterwards.
+ # a symlink. cmdutil.updatedir will -too magically- take care
+ # of setting it to the proper type afterwards.
islink = os.path.islink(fname)
if islink:
fp = cStringIO.StringIO()
@@ -1129,8 +1129,8 @@
read in binary mode. Otherwise, line endings are ignored when
patching then normalized according to 'eolmode'.
- Callers probably want to call 'updatedir' after this to apply
- certain categories of changes not done by this function.
+ Callers probably want to call 'cmdutil.updatedir' after this to
+ apply certain categories of changes not done by this function.
"""
return _applydiff(
ui, fp, patchfile, copyfile,
@@ -1196,49 +1196,6 @@
return -1
return err
-def updatedir(ui, repo, patches, similarity=0):
- '''Update dirstate after patch application according to metadata'''
- if not patches:
- return
- copies = []
- removes = set()
- cfiles = patches.keys()
- cwd = repo.getcwd()
- if cwd:
- cfiles = [util.pathto(repo.root, cwd, f) for f in patches.keys()]
- for f in patches:
- gp = patches[f]
- if not gp:
- continue
- if gp.op == 'RENAME':
- copies.append((gp.oldpath, gp.path))
- removes.add(gp.oldpath)
- elif gp.op == 'COPY':
- copies.append((gp.oldpath, gp.path))
- elif gp.op == 'DELETE':
- removes.add(gp.path)
-
- wctx = repo[None]
- for src, dst in copies:
- wctx.copy(src, dst)
- if (not similarity) and removes:
- wctx.remove(sorted(removes), True)
-
- for f in patches:
- gp = patches[f]
- if gp and gp.mode:
- islink, isexec = gp.mode
- dst = repo.wjoin(gp.path)
- # patch won't create empty files
- if gp.op == 'ADD' and not os.path.exists(dst):
- flags = (isexec and 'x' or '') + (islink and 'l' or '')
- repo.wwrite(gp.path, '', flags)
- util.set_flags(dst, islink, isexec)
- cmdutil.addremove(repo, cfiles, similarity=similarity)
- files = patches.keys()
- files.extend([r for r in removes if r not in files])
- return sorted(files)
-
def externalpatch(patcher, args, patchname, ui, strip, cwd, files):
"""use <patcher> to apply <patchname> to the working directory.
returns whether patch was applied with fuzz factor."""
--- a/mercurial/subrepo.py Mon Sep 13 01:37:56 2010 +0000
+++ b/mercurial/subrepo.py Tue Sep 14 16:21:01 2010 -0500
@@ -255,6 +255,8 @@
"""
raise NotImplementedError
+ def add(self, ui, match, dryrun, prefix):
+ return []
def status(self, rev2, **opts):
return [], [], [], [], [], [], []
@@ -262,6 +264,12 @@
def diff(self, diffopts, node2, match, prefix, **opts):
pass
+ def outgoing(self, ui, dest, opts):
+ return 1
+
+ def incoming(self, ui, source, opts):
+ return 1
+
class hgsubrepo(abstractsubrepo):
def __init__(self, ctx, path, state):
self._path = path
@@ -291,6 +299,10 @@
addpathconfig('default-push', defpushpath)
fp.close()
+ def add(self, ui, match, dryrun, prefix):
+ return cmdutil.add(ui, self._repo, match, dryrun, True,
+ os.path.join(prefix, self._path))
+
def status(self, rev2, **opts):
try:
rev1 = self._state[1]
@@ -388,6 +400,12 @@
other = hg.repository(self._repo.ui, dsturl)
return self._repo.push(other, force)
+ def outgoing(self, ui, dest, opts):
+ return hg.outgoing(ui, self._repo, _abssource(self._repo, True), opts)
+
+ def incoming(self, ui, source, opts):
+ return hg.incoming(ui, self._repo, _abssource(self._repo, False), opts)
+
class svnsubrepo(abstractsubrepo):
def __init__(self, ctx, path, state):
self._path = path
--- a/tests/get-with-headers.py Mon Sep 13 01:37:56 2010 +0000
+++ b/tests/get-with-headers.py Tue Sep 14 16:21:01 2010 -0500
@@ -17,6 +17,8 @@
sys.argv.remove('--twice')
twice = True
+reasons = {'Not modified': 'Not Modified'} # python 2.4
+
tag = None
def request(host, path, show):
@@ -28,7 +30,7 @@
conn = httplib.HTTPConnection(host)
conn.request("GET", path, None, headers)
response = conn.getresponse()
- print response.status, response.reason
+ print response.status, reasons.get(response.reason, response.reason)
for h in [h.lower() for h in show]:
if response.getheader(h, None) is not None:
print "%s: %s" % (h, response.getheader(h))
--- a/tests/test-clone-update-order Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-#!/bin/sh
-
-echo
-echo % prepare repo a
-mkdir a
-cd a
-hg init
-echo foo > bar
-hg commit -Am default
-hg up -r null
-hg branch mine
-echo hello > world
-hg commit -Am hello
-hg up -r null
-hg branch other
-echo good > bye
-hg commit -Am other
-hg up -r mine
-
-echo % test -U -u
-hg clone -U -u . .#other ../b -r 0 -r 1 -r 2 -b other
-
-echo % test -U
-hg clone -U .#other ../b -r 0 -r 1 -r 2 -b other
-rm -rf ../b
-
-echo % test -u .
-hg clone -u . .#other ../b -r 0 -r 1 -r 2 -b other
-rm -rf ../b
-
-echo % test -u 0
-hg clone -u 0 .#other ../b -r 0 -r 1 -r 2 -b other
-rm -rf ../b
-
-echo % test -u 1
-hg clone -u 1 .#other ../b -r 0 -r 1 -r 2 -b other
-rm -rf ../b
-
-echo % test -u 2
-hg clone -u 2 .#other ../b -r 0 -r 1 -r 2 -b other
-rm -rf ../b
-
-echo % test -r 0
-hg clone -u 2 .#other ../b -r 0 -r 1 -r 2 -b other
-rm -rf ../b
-
-echo % test -r mine ... mine is ignored
-hg clone -u 2 .#other ../b -r mine -r 0 -r 1 -r 2 -b other
-rm -rf ../b
-
-echo % test -b default
-hg clone .#other ../b -b default -b mine
-rm -rf ../b
-
-echo % test #other
-hg clone .#other ../b
-rm -rf ../b
-
-echo % test tip
-hg clone -U . ../c -r 1 -r 2 > /dev/null
-hg clone ../c ../b
-rm -rf ../b ../c
-cd ..
-
-rm -rf a
-exit 0
--- a/tests/test-clone-update-order.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-
-% prepare repo a
-adding bar
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-marked working directory as branch mine
-adding world
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-marked working directory as branch other
-adding bye
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-% test -U -u
-abort: cannot specify both --noupdate and --updaterev
-% test -U
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 3 files (+2 heads)
-% test -u .
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 3 files (+2 heads)
-updating to branch mine
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% test -u 0
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 3 files (+2 heads)
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% test -u 1
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 3 files (+2 heads)
-updating to branch mine
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% test -u 2
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 3 files (+2 heads)
-updating to branch other
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% test -r 0
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 3 files (+2 heads)
-updating to branch other
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% test -r mine ... mine is ignored
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 3 files (+2 heads)
-updating to branch other
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% test -b default
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 3 files (+2 heads)
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% test
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-updating to branch other
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% test tip
-updating to branch other
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-clone-update-order.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,110 @@
+ $ hg init
+ $ echo foo > bar
+ $ hg commit -Am default
+ adding bar
+ $ hg up -r null
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg branch mine
+ marked working directory as branch mine
+ $ echo hello > world
+ $ hg commit -Am hello
+ adding world
+ $ hg up -r null
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg branch other
+ marked working directory as branch other
+ $ echo good > bye
+ $ hg commit -Am other
+ adding bye
+ $ hg up -r mine
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+ $ hg clone -U -u . .#other ../b -r 0 -r 1 -r 2 -b other
+ abort: cannot specify both --noupdate and --updaterev
+
+ $ hg clone -U .#other ../b -r 0 -r 1 -r 2 -b other
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 3 files (+2 heads)
+ $ rm -rf ../b
+
+ $ hg clone -u . .#other ../b -r 0 -r 1 -r 2 -b other
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 3 files (+2 heads)
+ updating to branch mine
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm -rf ../b
+
+ $ hg clone -u 0 .#other ../b -r 0 -r 1 -r 2 -b other
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 3 files (+2 heads)
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm -rf ../b
+
+ $ hg clone -u 1 .#other ../b -r 0 -r 1 -r 2 -b other
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 3 files (+2 heads)
+ updating to branch mine
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm -rf ../b
+
+ $ hg clone -u 2 .#other ../b -r 0 -r 1 -r 2 -b other
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 3 files (+2 heads)
+ updating to branch other
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm -rf ../b
+
+Test -r mine ... mine is ignored:
+
+ $ hg clone -u 2 .#other ../b -r mine -r 0 -r 1 -r 2 -b other
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 3 files (+2 heads)
+ updating to branch other
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm -rf ../b
+
+ $ hg clone .#other ../b -b default -b mine
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 3 files (+2 heads)
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm -rf ../b
+
+ $ hg clone .#other ../b
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ updating to branch other
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm -rf ../b
+
+ $ hg clone -U . ../c -r 1 -r 2 > /dev/null
+ $ hg clone ../c ../b
+ updating to branch other
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm -rf ../b ../c
+
--- a/tests/test-command-template Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
-#!/bin/sh
-
-hg init a
-cd a
-echo a > a
-hg add a
-echo line 1 > b
-echo line 2 >> b
-hg commit -l b -d '1000000 0' -u 'User Name <user@hostname>'
-hg add b
-echo other 1 > c
-echo other 2 >> c
-echo >> c
-echo other 3 >> c
-hg commit -l c -d '1100000 0' -u 'A. N. Other <other@place>'
-hg add c
-hg commit -m 'no person' -d '1200000 0' -u 'other@place'
-echo c >> c
-hg commit -m 'no user, no domain' -d '1300000 0' -u 'person'
-echo foo > .hg/branch
-hg commit -m 'new branch' -d '1400000 0' -u 'person'
-hg co -q 3
-echo other 4 >> d
-hg add d
-hg commit -m 'new head' -d '1500000 0' -u 'person'
-hg merge -q foo
-hg commit -m 'merge' -d '1500001 0' -u 'person'
-# second branch starting at nullrev
-hg update null
-echo second > second
-hg add second
-hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
-echo third > third
-hg add third
-hg mv second fourth
-hg commit -m third -d "2020-01-01 10:01"
-
-# make sure user/global hgrc does not affect tests
-echo '[ui]' > .hg/hgrc
-echo 'logtemplate =' >> .hg/hgrc
-echo 'style =' >> .hg/hgrc
-
-echo '# default style is like normal output'
-echo '# normal'
-hg log > log.out
-hg log --style default > style.out
-cmp log.out style.out || diff -u log.out style.out
-echo '# verbose'
-hg log -v > log.out
-hg log -v --style default > style.out
-cmp log.out style.out || diff -u log.out style.out
-echo '# debug'
-hg log --debug > log.out
-hg log --debug --style default > style.out
-cmp log.out style.out || diff -u log.out style.out
-
-echo '# revision with no copies (used to print a traceback)'
-hg tip -v --template '\n'
-
-echo '# compact style works'
-hg log --style compact
-hg log -v --style compact
-hg log --debug --style compact
-
-# Test xml styles
-echo '# xml style works (--style xml)'
-hg log --style xml
-echo '# xml style works (-v --style xml)'
-hg log -v --style xml
-echo '# xml style works (--debug --style xml)'
-hg log --debug --style xml
-
-echo '# error if style not readable'
-touch q
-chmod 0 q
-hg log --style ./q
-
-echo '# error if no style'
-hg log --style notexist
-
-echo '# error if style missing key'
-echo 'q = q' > t
-hg log --style ./t
-
-echo '# error if include fails'
-echo 'changeset = q' >> t
-hg log --style ./t
-
-echo '# include works'
-rm q
-echo '{rev}' > q
-hg log --style ./t
-
-echo '# ui.style works'
-echo '[ui]' > .hg/hgrc
-echo 'style = t' >> .hg/hgrc
-hg log
-
-echo '# issue338'
-hg log --style=changelog > changelog
-cat changelog
-
-echo '# issue 2130'
-hg heads --style changelog
-
-echo "# keys work"
-for key in author branches date desc file_adds file_dels file_mods \
- file_copies file_copies_switch files \
- manifest node parents rev tags diffstat extras; do
- for mode in '' --verbose --debug; do
- hg log $mode --template "$key$mode: {$key}\n"
- done
-done
-
-echo '# filters work'
-hg log --template '{author|domain}\n'
-hg log --template '{author|person}\n'
-hg log --template '{author|user}\n'
-hg log --template '{date|age}\n' > /dev/null || exit 1
-hg log -l1 --template '{date|age}\n'
-hg log --template '{date|date}\n'
-hg log --template '{date|isodate}\n'
-hg log --template '{date|isodatesec}\n'
-hg log --template '{date|rfc822date}\n'
-hg log --template '{desc|firstline}\n'
-hg log --template '{node|short}\n'
-hg log --template '<changeset author="{author|xmlescape}"/>\n'
-hg log --template '{rev}: {children}\n'
-
-echo '# formatnode filter works'
-echo '# quiet'
-hg -q log -r 0 --template '{node|formatnode}\n'
-echo '# normal'
-hg log -r 0 --template '{node|formatnode}\n'
-echo '# verbose'
-hg -v log -r 0 --template '{node|formatnode}\n'
-echo '# debug'
-hg --debug log -r 0 --template '{node|formatnode}\n'
-
-echo '# error on syntax'
-echo 'x = "f' >> t
-hg log
-
-cd ..
-
-echo '# latesttag'
-hg init latesttag
-cd latesttag
-
-echo a > file
-hg ci -Am a -d '0 0'
-
-echo b >> file
-hg ci -m b -d '1 0'
-
-echo c >> head1
-hg ci -Am h1c -d '2 0'
-
-hg update -q 1
-echo d >> head2
-hg ci -Am h2d -d '3 0'
-
-echo e >> head2
-hg ci -m h2e -d '4 0'
-
-hg merge -q
-hg ci -m merge -d '5 0'
-
-echo '# No tag set'
-hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
-
-echo '# one common tag: longuest path wins'
-hg tag -r 1 -m t1 -d '6 0' t1
-hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
-
-echo '# one ancestor tag: more recent wins'
-hg tag -r 2 -m t2 -d '7 0' t2
-hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
-
-echo '# two branch tags: more recent wins'
-hg tag -r 3 -m t3 -d '8 0' t3
-hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
-
-echo '# merged tag overrides'
-hg tag -r 5 -m t5 -d '9 0' t5
-hg tag -r 3 -m at3 -d '10 0' at3
-hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
-cd ..
-
-echo '# style path expansion (issue1948)'
-mkdir -p home/styles
-cat > home/styles/teststyle <<EOF
-changeset = 'test {rev}:{node|short}\n'
-EOF
-HOME=`pwd`/home; export HOME
-cat > latesttag/.hg/hgrc <<EOF
-[ui]
-style = ~/styles/teststyle
-EOF
-hg -R latesttag tip
-
-echo '# test recursive showlist template (issue1989)'
-cat > style1989 <<EOF
-changeset = '{file_mods}{manifest}{extras}'
-file_mod = 'M|{author|person}\n'
-manifest = '{rev},{author}\n'
-extra = '{key}: {author}\n'
-EOF
-hg -R latesttag log -r tip --style=style1989
-
-echo '# done'
--- a/tests/test-command-template.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1098 +0,0 @@
-0 files updated, 0 files merged, 4 files removed, 0 files unresolved
-created new head
-# default style is like normal output
-# normal
-# verbose
-# debug
-# revision with no copies (used to print a traceback)
-
-# compact style works
-8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
- third
-
-7:-1 29114dbae42b 1970-01-12 13:46 +0000 user
- second
-
-6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
- merge
-
-5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
- new head
-
-4 32a18f097fcc 1970-01-17 04:53 +0000 person
- new branch
-
-3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
- no user, no domain
-
-2 97054abb4ab8 1970-01-14 21:20 +0000 other
- no person
-
-1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
- other 1
-
-0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
- line 1
-
-8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
- third
-
-7:-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
- second
-
-6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
- merge
-
-5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
- new head
-
-4 32a18f097fcc 1970-01-17 04:53 +0000 person
- new branch
-
-3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
- no user, no domain
-
-2 97054abb4ab8 1970-01-14 21:20 +0000 other@place
- no person
-
-1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
- other 1
-other 2
-
-other 3
-
-0 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
- line 1
-line 2
-
-8[tip]:7,-1 95c24699272e 2020-01-01 10:01 +0000 test
- third
-
-7:-1,-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
- second
-
-6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
- merge
-
-5:3,-1 13207e5a10d9 1970-01-18 08:40 +0000 person
- new head
-
-4:3,-1 32a18f097fcc 1970-01-17 04:53 +0000 person
- new branch
-
-3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
- no user, no domain
-
-2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other@place
- no person
-
-1:0,-1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
- other 1
-other 2
-
-other 3
-
-0:-1,-1 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
- line 1
-line 2
-
-# xml style works (--style xml)
-<?xml version="1.0"?>
-<log>
-<logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
-<tag>tip</tag>
-<author email="test">test</author>
-<date>2020-01-01T10:01:00+00:00</date>
-<msg xml:space="preserve">third</msg>
-</logentry>
-<logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<author email="user@hostname">User Name</author>
-<date>1970-01-12T13:46:40+00:00</date>
-<msg xml:space="preserve">second</msg>
-</logentry>
-<logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
-<parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
-<parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
-<author email="person">person</author>
-<date>1970-01-18T08:40:01+00:00</date>
-<msg xml:space="preserve">merge</msg>
-</logentry>
-<logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
-<parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
-<author email="person">person</author>
-<date>1970-01-18T08:40:00+00:00</date>
-<msg xml:space="preserve">new head</msg>
-</logentry>
-<logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
-<branch>foo</branch>
-<author email="person">person</author>
-<date>1970-01-17T04:53:20+00:00</date>
-<msg xml:space="preserve">new branch</msg>
-</logentry>
-<logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
-<author email="person">person</author>
-<date>1970-01-16T01:06:40+00:00</date>
-<msg xml:space="preserve">no user, no domain</msg>
-</logentry>
-<logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
-<author email="other@place">other</author>
-<date>1970-01-14T21:20:00+00:00</date>
-<msg xml:space="preserve">no person</msg>
-</logentry>
-<logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
-<author email="other@place">A. N. Other</author>
-<date>1970-01-13T17:33:20+00:00</date>
-<msg xml:space="preserve">other 1
-other 2
-
-other 3</msg>
-</logentry>
-<logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
-<author email="user@hostname">User Name</author>
-<date>1970-01-12T13:46:40+00:00</date>
-<msg xml:space="preserve">line 1
-line 2</msg>
-</logentry>
-</log>
-# xml style works (-v --style xml)
-<?xml version="1.0"?>
-<log>
-<logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
-<tag>tip</tag>
-<author email="test">test</author>
-<date>2020-01-01T10:01:00+00:00</date>
-<msg xml:space="preserve">third</msg>
-<paths>
-<path action="A">fourth</path>
-<path action="A">third</path>
-<path action="R">second</path>
-</paths>
-<copies>
-<copy source="second">fourth</copy>
-</copies>
-</logentry>
-<logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<author email="user@hostname">User Name</author>
-<date>1970-01-12T13:46:40+00:00</date>
-<msg xml:space="preserve">second</msg>
-<paths>
-<path action="A">second</path>
-</paths>
-</logentry>
-<logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
-<parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
-<parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
-<author email="person">person</author>
-<date>1970-01-18T08:40:01+00:00</date>
-<msg xml:space="preserve">merge</msg>
-<paths>
-</paths>
-</logentry>
-<logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
-<parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
-<author email="person">person</author>
-<date>1970-01-18T08:40:00+00:00</date>
-<msg xml:space="preserve">new head</msg>
-<paths>
-<path action="A">d</path>
-</paths>
-</logentry>
-<logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
-<branch>foo</branch>
-<author email="person">person</author>
-<date>1970-01-17T04:53:20+00:00</date>
-<msg xml:space="preserve">new branch</msg>
-<paths>
-</paths>
-</logentry>
-<logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
-<author email="person">person</author>
-<date>1970-01-16T01:06:40+00:00</date>
-<msg xml:space="preserve">no user, no domain</msg>
-<paths>
-<path action="M">c</path>
-</paths>
-</logentry>
-<logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
-<author email="other@place">other</author>
-<date>1970-01-14T21:20:00+00:00</date>
-<msg xml:space="preserve">no person</msg>
-<paths>
-<path action="A">c</path>
-</paths>
-</logentry>
-<logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
-<author email="other@place">A. N. Other</author>
-<date>1970-01-13T17:33:20+00:00</date>
-<msg xml:space="preserve">other 1
-other 2
-
-other 3</msg>
-<paths>
-<path action="A">b</path>
-</paths>
-</logentry>
-<logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
-<author email="user@hostname">User Name</author>
-<date>1970-01-12T13:46:40+00:00</date>
-<msg xml:space="preserve">line 1
-line 2</msg>
-<paths>
-<path action="A">a</path>
-</paths>
-</logentry>
-</log>
-# xml style works (--debug --style xml)
-<?xml version="1.0"?>
-<log>
-<logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
-<tag>tip</tag>
-<parent revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453" />
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<author email="test">test</author>
-<date>2020-01-01T10:01:00+00:00</date>
-<msg xml:space="preserve">third</msg>
-<paths>
-<path action="A">fourth</path>
-<path action="A">third</path>
-<path action="R">second</path>
-</paths>
-<copies>
-<copy source="second">fourth</copy>
-</copies>
-<extra key="branch">default</extra>
-</logentry>
-<logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<author email="user@hostname">User Name</author>
-<date>1970-01-12T13:46:40+00:00</date>
-<msg xml:space="preserve">second</msg>
-<paths>
-<path action="A">second</path>
-</paths>
-<extra key="branch">default</extra>
-</logentry>
-<logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
-<parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
-<parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
-<author email="person">person</author>
-<date>1970-01-18T08:40:01+00:00</date>
-<msg xml:space="preserve">merge</msg>
-<paths>
-</paths>
-<extra key="branch">default</extra>
-</logentry>
-<logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
-<parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<author email="person">person</author>
-<date>1970-01-18T08:40:00+00:00</date>
-<msg xml:space="preserve">new head</msg>
-<paths>
-<path action="A">d</path>
-</paths>
-<extra key="branch">default</extra>
-</logentry>
-<logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
-<branch>foo</branch>
-<parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<author email="person">person</author>
-<date>1970-01-17T04:53:20+00:00</date>
-<msg xml:space="preserve">new branch</msg>
-<paths>
-</paths>
-<extra key="branch">foo</extra>
-</logentry>
-<logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
-<parent revision="2" node="97054abb4ab824450e9164180baf491ae0078465" />
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<author email="person">person</author>
-<date>1970-01-16T01:06:40+00:00</date>
-<msg xml:space="preserve">no user, no domain</msg>
-<paths>
-<path action="M">c</path>
-</paths>
-<extra key="branch">default</extra>
-</logentry>
-<logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
-<parent revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965" />
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<author email="other@place">other</author>
-<date>1970-01-14T21:20:00+00:00</date>
-<msg xml:space="preserve">no person</msg>
-<paths>
-<path action="A">c</path>
-</paths>
-<extra key="branch">default</extra>
-</logentry>
-<logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
-<parent revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f" />
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<author email="other@place">A. N. Other</author>
-<date>1970-01-13T17:33:20+00:00</date>
-<msg xml:space="preserve">other 1
-other 2
-
-other 3</msg>
-<paths>
-<path action="A">b</path>
-</paths>
-<extra key="branch">default</extra>
-</logentry>
-<logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<parent revision="-1" node="0000000000000000000000000000000000000000" />
-<author email="user@hostname">User Name</author>
-<date>1970-01-12T13:46:40+00:00</date>
-<msg xml:space="preserve">line 1
-line 2</msg>
-<paths>
-<path action="A">a</path>
-</paths>
-<extra key="branch">default</extra>
-</logentry>
-</log>
-# error if style not readable
-abort: Permission denied: ./q
-# error if no style
-abort: style not found: notexist
-# error if style missing key
-abort: ./t: no key named 'changeset'
-# error if include fails
-abort: template file ./q: Permission denied
-# include works
-8
-7
-6
-5
-4
-3
-2
-1
-0
-# ui.style works
-8
-7
-6
-5
-4
-3
-2
-1
-0
-# issue338
-2020-01-01 test <test>
-
- * fourth, second, third:
- third
- [95c24699272e] [tip]
-
-1970-01-12 User Name <user@hostname>
-
- * second:
- second
- [29114dbae42b]
-
-1970-01-18 person <person>
-
- * merge
- [c7b487c6c50e]
-
- * d:
- new head
- [13207e5a10d9]
-
-1970-01-17 person <person>
-
- * new branch
- [32a18f097fcc] <foo>
-
-1970-01-16 person <person>
-
- * c:
- no user, no domain
- [10e46f2dcbf4]
-
-1970-01-14 other <other@place>
-
- * c:
- no person
- [97054abb4ab8]
-
-1970-01-13 A. N. Other <other@place>
-
- * b:
- other 1 other 2
-
- other 3
- [b608e9d1a3f0]
-
-1970-01-12 User Name <user@hostname>
-
- * a:
- line 1 line 2
- [1e4e1b8f71e0]
-
-# issue 2130
-2020-01-01 test <test>
-
- * fourth, second, third:
- third
- [95c24699272e] [tip]
-
-1970-01-18 person <person>
-
- * merge
- [c7b487c6c50e]
-
-1970-01-17 person <person>
-
- * new branch
- [32a18f097fcc] <foo>
-
-# keys work
-author: test
-author: User Name <user@hostname>
-author: person
-author: person
-author: person
-author: person
-author: other@place
-author: A. N. Other <other@place>
-author: User Name <user@hostname>
-author--verbose: test
-author--verbose: User Name <user@hostname>
-author--verbose: person
-author--verbose: person
-author--verbose: person
-author--verbose: person
-author--verbose: other@place
-author--verbose: A. N. Other <other@place>
-author--verbose: User Name <user@hostname>
-author--debug: test
-author--debug: User Name <user@hostname>
-author--debug: person
-author--debug: person
-author--debug: person
-author--debug: person
-author--debug: other@place
-author--debug: A. N. Other <other@place>
-author--debug: User Name <user@hostname>
-branches:
-branches:
-branches:
-branches:
-branches: foo
-branches:
-branches:
-branches:
-branches:
-branches--verbose:
-branches--verbose:
-branches--verbose:
-branches--verbose:
-branches--verbose: foo
-branches--verbose:
-branches--verbose:
-branches--verbose:
-branches--verbose:
-branches--debug:
-branches--debug:
-branches--debug:
-branches--debug:
-branches--debug: foo
-branches--debug:
-branches--debug:
-branches--debug:
-branches--debug:
-date: 1577872860.00
-date: 1000000.00
-date: 1500001.00
-date: 1500000.00
-date: 1400000.00
-date: 1300000.00
-date: 1200000.00
-date: 1100000.00
-date: 1000000.00
-date--verbose: 1577872860.00
-date--verbose: 1000000.00
-date--verbose: 1500001.00
-date--verbose: 1500000.00
-date--verbose: 1400000.00
-date--verbose: 1300000.00
-date--verbose: 1200000.00
-date--verbose: 1100000.00
-date--verbose: 1000000.00
-date--debug: 1577872860.00
-date--debug: 1000000.00
-date--debug: 1500001.00
-date--debug: 1500000.00
-date--debug: 1400000.00
-date--debug: 1300000.00
-date--debug: 1200000.00
-date--debug: 1100000.00
-date--debug: 1000000.00
-desc: third
-desc: second
-desc: merge
-desc: new head
-desc: new branch
-desc: no user, no domain
-desc: no person
-desc: other 1
-other 2
-
-other 3
-desc: line 1
-line 2
-desc--verbose: third
-desc--verbose: second
-desc--verbose: merge
-desc--verbose: new head
-desc--verbose: new branch
-desc--verbose: no user, no domain
-desc--verbose: no person
-desc--verbose: other 1
-other 2
-
-other 3
-desc--verbose: line 1
-line 2
-desc--debug: third
-desc--debug: second
-desc--debug: merge
-desc--debug: new head
-desc--debug: new branch
-desc--debug: no user, no domain
-desc--debug: no person
-desc--debug: other 1
-other 2
-
-other 3
-desc--debug: line 1
-line 2
-file_adds: fourth third
-file_adds: second
-file_adds:
-file_adds: d
-file_adds:
-file_adds:
-file_adds: c
-file_adds: b
-file_adds: a
-file_adds--verbose: fourth third
-file_adds--verbose: second
-file_adds--verbose:
-file_adds--verbose: d
-file_adds--verbose:
-file_adds--verbose:
-file_adds--verbose: c
-file_adds--verbose: b
-file_adds--verbose: a
-file_adds--debug: fourth third
-file_adds--debug: second
-file_adds--debug:
-file_adds--debug: d
-file_adds--debug:
-file_adds--debug:
-file_adds--debug: c
-file_adds--debug: b
-file_adds--debug: a
-file_dels: second
-file_dels:
-file_dels:
-file_dels:
-file_dels:
-file_dels:
-file_dels:
-file_dels:
-file_dels:
-file_dels--verbose: second
-file_dels--verbose:
-file_dels--verbose:
-file_dels--verbose:
-file_dels--verbose:
-file_dels--verbose:
-file_dels--verbose:
-file_dels--verbose:
-file_dels--verbose:
-file_dels--debug: second
-file_dels--debug:
-file_dels--debug:
-file_dels--debug:
-file_dels--debug:
-file_dels--debug:
-file_dels--debug:
-file_dels--debug:
-file_dels--debug:
-file_mods:
-file_mods:
-file_mods:
-file_mods:
-file_mods:
-file_mods: c
-file_mods:
-file_mods:
-file_mods:
-file_mods--verbose:
-file_mods--verbose:
-file_mods--verbose:
-file_mods--verbose:
-file_mods--verbose:
-file_mods--verbose: c
-file_mods--verbose:
-file_mods--verbose:
-file_mods--verbose:
-file_mods--debug:
-file_mods--debug:
-file_mods--debug:
-file_mods--debug:
-file_mods--debug:
-file_mods--debug: c
-file_mods--debug:
-file_mods--debug:
-file_mods--debug:
-file_copies: fourth (second)
-file_copies:
-file_copies:
-file_copies:
-file_copies:
-file_copies:
-file_copies:
-file_copies:
-file_copies:
-file_copies--verbose: fourth (second)
-file_copies--verbose:
-file_copies--verbose:
-file_copies--verbose:
-file_copies--verbose:
-file_copies--verbose:
-file_copies--verbose:
-file_copies--verbose:
-file_copies--verbose:
-file_copies--debug: fourth (second)
-file_copies--debug:
-file_copies--debug:
-file_copies--debug:
-file_copies--debug:
-file_copies--debug:
-file_copies--debug:
-file_copies--debug:
-file_copies--debug:
-file_copies_switch:
-file_copies_switch:
-file_copies_switch:
-file_copies_switch:
-file_copies_switch:
-file_copies_switch:
-file_copies_switch:
-file_copies_switch:
-file_copies_switch:
-file_copies_switch--verbose:
-file_copies_switch--verbose:
-file_copies_switch--verbose:
-file_copies_switch--verbose:
-file_copies_switch--verbose:
-file_copies_switch--verbose:
-file_copies_switch--verbose:
-file_copies_switch--verbose:
-file_copies_switch--verbose:
-file_copies_switch--debug:
-file_copies_switch--debug:
-file_copies_switch--debug:
-file_copies_switch--debug:
-file_copies_switch--debug:
-file_copies_switch--debug:
-file_copies_switch--debug:
-file_copies_switch--debug:
-file_copies_switch--debug:
-files: fourth second third
-files: second
-files:
-files: d
-files:
-files: c
-files: c
-files: b
-files: a
-files--verbose: fourth second third
-files--verbose: second
-files--verbose:
-files--verbose: d
-files--verbose:
-files--verbose: c
-files--verbose: c
-files--verbose: b
-files--verbose: a
-files--debug: fourth second third
-files--debug: second
-files--debug:
-files--debug: d
-files--debug:
-files--debug: c
-files--debug: c
-files--debug: b
-files--debug: a
-manifest: 8:94961b75a2da
-manifest: 7:f2dbc354b94e
-manifest: 6:91015e9dbdd7
-manifest: 5:4dc3def4f9b4
-manifest: 4:90ae8dda64e1
-manifest: 3:cb5a1327723b
-manifest: 2:6e0e82995c35
-manifest: 1:4e8d705b1e53
-manifest: 0:a0c8bcbbb45c
-manifest--verbose: 8:94961b75a2da
-manifest--verbose: 7:f2dbc354b94e
-manifest--verbose: 6:91015e9dbdd7
-manifest--verbose: 5:4dc3def4f9b4
-manifest--verbose: 4:90ae8dda64e1
-manifest--verbose: 3:cb5a1327723b
-manifest--verbose: 2:6e0e82995c35
-manifest--verbose: 1:4e8d705b1e53
-manifest--verbose: 0:a0c8bcbbb45c
-manifest--debug: 8:94961b75a2da554b4df6fb599e5bfc7d48de0c64
-manifest--debug: 7:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
-manifest--debug: 6:91015e9dbdd76a6791085d12b0a0ec7fcd22ffbf
-manifest--debug: 5:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
-manifest--debug: 4:90ae8dda64e1a876c792bccb9af66284f6018363
-manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
-manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
-manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
-manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
-node: 95c24699272ef57d062b8bccc32c878bf841784a
-node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
-node: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
-node: 13207e5a10d9fd28ec424934298e176197f2c67f
-node: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
-node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
-node: 97054abb4ab824450e9164180baf491ae0078465
-node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
-node: 1e4e1b8f71e05681d422154f5421e385fec3454f
-node--verbose: 95c24699272ef57d062b8bccc32c878bf841784a
-node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
-node--verbose: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
-node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
-node--verbose: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
-node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
-node--verbose: 97054abb4ab824450e9164180baf491ae0078465
-node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
-node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
-node--debug: 95c24699272ef57d062b8bccc32c878bf841784a
-node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
-node--debug: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
-node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
-node--debug: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
-node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
-node--debug: 97054abb4ab824450e9164180baf491ae0078465
-node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
-node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
-parents:
-parents: -1:000000000000
-parents: 5:13207e5a10d9 4:32a18f097fcc
-parents: 3:10e46f2dcbf4
-parents:
-parents:
-parents:
-parents:
-parents:
-parents--verbose:
-parents--verbose: -1:000000000000
-parents--verbose: 5:13207e5a10d9 4:32a18f097fcc
-parents--verbose: 3:10e46f2dcbf4
-parents--verbose:
-parents--verbose:
-parents--verbose:
-parents--verbose:
-parents--verbose:
-parents--debug: 7:29114dbae42b9f078cf2714dbe3a86bba8ec7453 -1:0000000000000000000000000000000000000000
-parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
-parents--debug: 5:13207e5a10d9fd28ec424934298e176197f2c67f 4:32a18f097fcccf76ef282f62f8a85b3adf8d13c4
-parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
-parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
-parents--debug: 2:97054abb4ab824450e9164180baf491ae0078465 -1:0000000000000000000000000000000000000000
-parents--debug: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 -1:0000000000000000000000000000000000000000
-parents--debug: 0:1e4e1b8f71e05681d422154f5421e385fec3454f -1:0000000000000000000000000000000000000000
-parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
-rev: 8
-rev: 7
-rev: 6
-rev: 5
-rev: 4
-rev: 3
-rev: 2
-rev: 1
-rev: 0
-rev--verbose: 8
-rev--verbose: 7
-rev--verbose: 6
-rev--verbose: 5
-rev--verbose: 4
-rev--verbose: 3
-rev--verbose: 2
-rev--verbose: 1
-rev--verbose: 0
-rev--debug: 8
-rev--debug: 7
-rev--debug: 6
-rev--debug: 5
-rev--debug: 4
-rev--debug: 3
-rev--debug: 2
-rev--debug: 1
-rev--debug: 0
-tags: tip
-tags:
-tags:
-tags:
-tags:
-tags:
-tags:
-tags:
-tags:
-tags--verbose: tip
-tags--verbose:
-tags--verbose:
-tags--verbose:
-tags--verbose:
-tags--verbose:
-tags--verbose:
-tags--verbose:
-tags--verbose:
-tags--debug: tip
-tags--debug:
-tags--debug:
-tags--debug:
-tags--debug:
-tags--debug:
-tags--debug:
-tags--debug:
-tags--debug:
-diffstat: 3: +2/-1
-diffstat: 1: +1/-0
-diffstat: 0: +0/-0
-diffstat: 1: +1/-0
-diffstat: 0: +0/-0
-diffstat: 1: +1/-0
-diffstat: 1: +4/-0
-diffstat: 1: +2/-0
-diffstat: 1: +1/-0
-diffstat--verbose: 3: +2/-1
-diffstat--verbose: 1: +1/-0
-diffstat--verbose: 0: +0/-0
-diffstat--verbose: 1: +1/-0
-diffstat--verbose: 0: +0/-0
-diffstat--verbose: 1: +1/-0
-diffstat--verbose: 1: +4/-0
-diffstat--verbose: 1: +2/-0
-diffstat--verbose: 1: +1/-0
-diffstat--debug: 3: +2/-1
-diffstat--debug: 1: +1/-0
-diffstat--debug: 0: +0/-0
-diffstat--debug: 1: +1/-0
-diffstat--debug: 0: +0/-0
-diffstat--debug: 1: +1/-0
-diffstat--debug: 1: +4/-0
-diffstat--debug: 1: +2/-0
-diffstat--debug: 1: +1/-0
-extras: branch=default
-extras: branch=default
-extras: branch=default
-extras: branch=default
-extras: branch=foo
-extras: branch=default
-extras: branch=default
-extras: branch=default
-extras: branch=default
-extras--verbose: branch=default
-extras--verbose: branch=default
-extras--verbose: branch=default
-extras--verbose: branch=default
-extras--verbose: branch=foo
-extras--verbose: branch=default
-extras--verbose: branch=default
-extras--verbose: branch=default
-extras--verbose: branch=default
-extras--debug: branch=default
-extras--debug: branch=default
-extras--debug: branch=default
-extras--debug: branch=default
-extras--debug: branch=foo
-extras--debug: branch=default
-extras--debug: branch=default
-extras--debug: branch=default
-extras--debug: branch=default
-# filters work
-
-hostname
-
-
-
-
-place
-place
-hostname
-test
-User Name
-person
-person
-person
-person
-other
-A. N. Other
-User Name
-test
-user
-person
-person
-person
-person
-other
-other
-user
-in the future
-Wed Jan 01 10:01:00 2020 +0000
-Mon Jan 12 13:46:40 1970 +0000
-Sun Jan 18 08:40:01 1970 +0000
-Sun Jan 18 08:40:00 1970 +0000
-Sat Jan 17 04:53:20 1970 +0000
-Fri Jan 16 01:06:40 1970 +0000
-Wed Jan 14 21:20:00 1970 +0000
-Tue Jan 13 17:33:20 1970 +0000
-Mon Jan 12 13:46:40 1970 +0000
-2020-01-01 10:01 +0000
-1970-01-12 13:46 +0000
-1970-01-18 08:40 +0000
-1970-01-18 08:40 +0000
-1970-01-17 04:53 +0000
-1970-01-16 01:06 +0000
-1970-01-14 21:20 +0000
-1970-01-13 17:33 +0000
-1970-01-12 13:46 +0000
-2020-01-01 10:01:00 +0000
-1970-01-12 13:46:40 +0000
-1970-01-18 08:40:01 +0000
-1970-01-18 08:40:00 +0000
-1970-01-17 04:53:20 +0000
-1970-01-16 01:06:40 +0000
-1970-01-14 21:20:00 +0000
-1970-01-13 17:33:20 +0000
-1970-01-12 13:46:40 +0000
-Wed, 01 Jan 2020 10:01:00 +0000
-Mon, 12 Jan 1970 13:46:40 +0000
-Sun, 18 Jan 1970 08:40:01 +0000
-Sun, 18 Jan 1970 08:40:00 +0000
-Sat, 17 Jan 1970 04:53:20 +0000
-Fri, 16 Jan 1970 01:06:40 +0000
-Wed, 14 Jan 1970 21:20:00 +0000
-Tue, 13 Jan 1970 17:33:20 +0000
-Mon, 12 Jan 1970 13:46:40 +0000
-third
-second
-merge
-new head
-new branch
-no user, no domain
-no person
-other 1
-line 1
-95c24699272e
-29114dbae42b
-c7b487c6c50e
-13207e5a10d9
-32a18f097fcc
-10e46f2dcbf4
-97054abb4ab8
-b608e9d1a3f0
-1e4e1b8f71e0
-<changeset author="test"/>
-<changeset author="User Name <user@hostname>"/>
-<changeset author="person"/>
-<changeset author="person"/>
-<changeset author="person"/>
-<changeset author="person"/>
-<changeset author="other@place"/>
-<changeset author="A. N. Other <other@place>"/>
-<changeset author="User Name <user@hostname>"/>
-8:
-7: 8:95c24699272e
-6:
-5: 6:c7b487c6c50e
-4: 6:c7b487c6c50e
-3: 4:32a18f097fcc 5:13207e5a10d9
-2: 3:10e46f2dcbf4
-1: 2:97054abb4ab8
-0: 1:b608e9d1a3f0
-# formatnode filter works
-# quiet
-1e4e1b8f71e0
-# normal
-1e4e1b8f71e0
-# verbose
-1e4e1b8f71e0
-# debug
-1e4e1b8f71e05681d422154f5421e385fec3454f
-# error on syntax
-abort: t:3: unmatched quotes
-# latesttag
-adding file
-adding head1
-adding head2
-created new head
-# No tag set
-5: null+5
-4: null+4
-3: null+3
-2: null+3
-1: null+2
-0: null+1
-# one common tag: longuest path wins
-6: t1+4
-5: t1+3
-4: t1+2
-3: t1+1
-2: t1+1
-1: t1+0
-0: null+1
-# one ancestor tag: more recent wins
-7: t2+3
-6: t2+2
-5: t2+1
-4: t1+2
-3: t1+1
-2: t2+0
-1: t1+0
-0: null+1
-# two branch tags: more recent wins
-8: t3+5
-7: t3+4
-6: t3+3
-5: t3+2
-4: t3+1
-3: t3+0
-2: t2+0
-1: t1+0
-0: null+1
-# merged tag overrides
-10: t5+5
-9: t5+4
-8: t5+3
-7: t5+2
-6: t5+1
-5: t5+0
-4: at3:t3+1
-3: at3:t3+0
-2: t2+0
-1: t1+0
-0: null+1
-# style path expansion (issue1948)
-test 10:dee8f28249af
-# test recursive showlist template (issue1989)
-M|test
-10,test
-branch: test
-# done
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-command-template.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,1327 @@
+ $ hg init a
+ $ cd a
+ $ echo a > a
+ $ hg add a
+ $ echo line 1 > b
+ $ echo line 2 >> b
+ $ hg commit -l b -d '1000000 0' -u 'User Name <user@hostname>'
+
+ $ hg add b
+ $ echo other 1 > c
+ $ echo other 2 >> c
+ $ echo >> c
+ $ echo other 3 >> c
+ $ hg commit -l c -d '1100000 0' -u 'A. N. Other <other@place>'
+
+ $ hg add c
+ $ hg commit -m 'no person' -d '1200000 0' -u 'other@place'
+ $ echo c >> c
+ $ hg commit -m 'no user, no domain' -d '1300000 0' -u 'person'
+
+ $ echo foo > .hg/branch
+ $ hg commit -m 'new branch' -d '1400000 0' -u 'person'
+
+ $ hg co -q 3
+ $ echo other 4 >> d
+ $ hg add d
+ $ hg commit -m 'new head' -d '1500000 0' -u 'person'
+
+ $ hg merge -q foo
+ $ hg commit -m 'merge' -d '1500001 0' -u 'person'
+
+Second branch starting at nullrev:
+
+ $ hg update null
+ 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
+ $ echo second > second
+ $ hg add second
+ $ hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
+ created new head
+
+ $ echo third > third
+ $ hg add third
+ $ hg mv second fourth
+ $ hg commit -m third -d "2020-01-01 10:01"
+
+Make sure user/global hgrc does not affect tests
+
+ $ echo '[ui]' > .hg/hgrc
+ $ echo 'logtemplate =' >> .hg/hgrc
+ $ echo 'style =' >> .hg/hgrc
+
+Default style is like normal output:
+
+ $ hg log > log.out
+ $ hg log --style default > style.out
+ $ cmp log.out style.out || diff -u log.out style.out
+
+ $ hg log -v > log.out
+ $ hg log -v --style default > style.out
+ $ cmp log.out style.out || diff -u log.out style.out
+
+ $ hg log --debug > log.out
+ $ hg log --debug --style default > style.out
+ $ cmp log.out style.out || diff -u log.out style.out
+
+Revision with no copies (used to print a traceback):
+
+ $ hg tip -v --template '\n'
+
+
+Compact style works:
+
+ $ hg log --style compact
+ 8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
+ third
+
+ 7:-1 29114dbae42b 1970-01-12 13:46 +0000 user
+ second
+
+ 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
+ merge
+
+ 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
+ new head
+
+ 4 32a18f097fcc 1970-01-17 04:53 +0000 person
+ new branch
+
+ 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
+ no user, no domain
+
+ 2 97054abb4ab8 1970-01-14 21:20 +0000 other
+ no person
+
+ 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
+ other 1
+
+ 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
+ line 1
+
+
+ $ hg log -v --style compact
+ 8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
+ third
+
+ 7:-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
+ second
+
+ 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
+ merge
+
+ 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
+ new head
+
+ 4 32a18f097fcc 1970-01-17 04:53 +0000 person
+ new branch
+
+ 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
+ no user, no domain
+
+ 2 97054abb4ab8 1970-01-14 21:20 +0000 other@place
+ no person
+
+ 1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
+ other 1
+ other 2
+
+ other 3
+
+ 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
+ line 1
+ line 2
+
+
+ $ hg log --debug --style compact
+ 8[tip]:7,-1 95c24699272e 2020-01-01 10:01 +0000 test
+ third
+
+ 7:-1,-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
+ second
+
+ 6:5,4 c7b487c6c50e 1970-01-18 08:40 +0000 person
+ merge
+
+ 5:3,-1 13207e5a10d9 1970-01-18 08:40 +0000 person
+ new head
+
+ 4:3,-1 32a18f097fcc 1970-01-17 04:53 +0000 person
+ new branch
+
+ 3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
+ no user, no domain
+
+ 2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other@place
+ no person
+
+ 1:0,-1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
+ other 1
+ other 2
+
+ other 3
+
+ 0:-1,-1 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
+ line 1
+ line 2
+
+
+Test xml styles:
+
+ $ hg log --style xml
+ <?xml version="1.0"?>
+ <log>
+ <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
+ <tag>tip</tag>
+ <author email="test">test</author>
+ <date>2020-01-01T10:01:00+00:00</date>
+ <msg xml:space="preserve">third</msg>
+ </logentry>
+ <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <author email="user@hostname">User Name</author>
+ <date>1970-01-12T13:46:40+00:00</date>
+ <msg xml:space="preserve">second</msg>
+ </logentry>
+ <logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
+ <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
+ <parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
+ <author email="person">person</author>
+ <date>1970-01-18T08:40:01+00:00</date>
+ <msg xml:space="preserve">merge</msg>
+ </logentry>
+ <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
+ <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
+ <author email="person">person</author>
+ <date>1970-01-18T08:40:00+00:00</date>
+ <msg xml:space="preserve">new head</msg>
+ </logentry>
+ <logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
+ <branch>foo</branch>
+ <author email="person">person</author>
+ <date>1970-01-17T04:53:20+00:00</date>
+ <msg xml:space="preserve">new branch</msg>
+ </logentry>
+ <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
+ <author email="person">person</author>
+ <date>1970-01-16T01:06:40+00:00</date>
+ <msg xml:space="preserve">no user, no domain</msg>
+ </logentry>
+ <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
+ <author email="other@place">other</author>
+ <date>1970-01-14T21:20:00+00:00</date>
+ <msg xml:space="preserve">no person</msg>
+ </logentry>
+ <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
+ <author email="other@place">A. N. Other</author>
+ <date>1970-01-13T17:33:20+00:00</date>
+ <msg xml:space="preserve">other 1
+ other 2
+
+ other 3</msg>
+ </logentry>
+ <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
+ <author email="user@hostname">User Name</author>
+ <date>1970-01-12T13:46:40+00:00</date>
+ <msg xml:space="preserve">line 1
+ line 2</msg>
+ </logentry>
+ </log>
+
+ $ hg log -v --style xml
+ <?xml version="1.0"?>
+ <log>
+ <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
+ <tag>tip</tag>
+ <author email="test">test</author>
+ <date>2020-01-01T10:01:00+00:00</date>
+ <msg xml:space="preserve">third</msg>
+ <paths>
+ <path action="A">fourth</path>
+ <path action="A">third</path>
+ <path action="R">second</path>
+ </paths>
+ <copies>
+ <copy source="second">fourth</copy>
+ </copies>
+ </logentry>
+ <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <author email="user@hostname">User Name</author>
+ <date>1970-01-12T13:46:40+00:00</date>
+ <msg xml:space="preserve">second</msg>
+ <paths>
+ <path action="A">second</path>
+ </paths>
+ </logentry>
+ <logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
+ <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
+ <parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
+ <author email="person">person</author>
+ <date>1970-01-18T08:40:01+00:00</date>
+ <msg xml:space="preserve">merge</msg>
+ <paths>
+ </paths>
+ </logentry>
+ <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
+ <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
+ <author email="person">person</author>
+ <date>1970-01-18T08:40:00+00:00</date>
+ <msg xml:space="preserve">new head</msg>
+ <paths>
+ <path action="A">d</path>
+ </paths>
+ </logentry>
+ <logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
+ <branch>foo</branch>
+ <author email="person">person</author>
+ <date>1970-01-17T04:53:20+00:00</date>
+ <msg xml:space="preserve">new branch</msg>
+ <paths>
+ </paths>
+ </logentry>
+ <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
+ <author email="person">person</author>
+ <date>1970-01-16T01:06:40+00:00</date>
+ <msg xml:space="preserve">no user, no domain</msg>
+ <paths>
+ <path action="M">c</path>
+ </paths>
+ </logentry>
+ <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
+ <author email="other@place">other</author>
+ <date>1970-01-14T21:20:00+00:00</date>
+ <msg xml:space="preserve">no person</msg>
+ <paths>
+ <path action="A">c</path>
+ </paths>
+ </logentry>
+ <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
+ <author email="other@place">A. N. Other</author>
+ <date>1970-01-13T17:33:20+00:00</date>
+ <msg xml:space="preserve">other 1
+ other 2
+
+ other 3</msg>
+ <paths>
+ <path action="A">b</path>
+ </paths>
+ </logentry>
+ <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
+ <author email="user@hostname">User Name</author>
+ <date>1970-01-12T13:46:40+00:00</date>
+ <msg xml:space="preserve">line 1
+ line 2</msg>
+ <paths>
+ <path action="A">a</path>
+ </paths>
+ </logentry>
+ </log>
+
+ $ hg log --debug --style xml
+ <?xml version="1.0"?>
+ <log>
+ <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
+ <tag>tip</tag>
+ <parent revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453" />
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <author email="test">test</author>
+ <date>2020-01-01T10:01:00+00:00</date>
+ <msg xml:space="preserve">third</msg>
+ <paths>
+ <path action="A">fourth</path>
+ <path action="A">third</path>
+ <path action="R">second</path>
+ </paths>
+ <copies>
+ <copy source="second">fourth</copy>
+ </copies>
+ <extra key="branch">default</extra>
+ </logentry>
+ <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <author email="user@hostname">User Name</author>
+ <date>1970-01-12T13:46:40+00:00</date>
+ <msg xml:space="preserve">second</msg>
+ <paths>
+ <path action="A">second</path>
+ </paths>
+ <extra key="branch">default</extra>
+ </logentry>
+ <logentry revision="6" node="c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f">
+ <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
+ <parent revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4" />
+ <author email="person">person</author>
+ <date>1970-01-18T08:40:01+00:00</date>
+ <msg xml:space="preserve">merge</msg>
+ <paths>
+ </paths>
+ <extra key="branch">default</extra>
+ </logentry>
+ <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
+ <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <author email="person">person</author>
+ <date>1970-01-18T08:40:00+00:00</date>
+ <msg xml:space="preserve">new head</msg>
+ <paths>
+ <path action="A">d</path>
+ </paths>
+ <extra key="branch">default</extra>
+ </logentry>
+ <logentry revision="4" node="32a18f097fcccf76ef282f62f8a85b3adf8d13c4">
+ <branch>foo</branch>
+ <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <author email="person">person</author>
+ <date>1970-01-17T04:53:20+00:00</date>
+ <msg xml:space="preserve">new branch</msg>
+ <paths>
+ </paths>
+ <extra key="branch">foo</extra>
+ </logentry>
+ <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
+ <parent revision="2" node="97054abb4ab824450e9164180baf491ae0078465" />
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <author email="person">person</author>
+ <date>1970-01-16T01:06:40+00:00</date>
+ <msg xml:space="preserve">no user, no domain</msg>
+ <paths>
+ <path action="M">c</path>
+ </paths>
+ <extra key="branch">default</extra>
+ </logentry>
+ <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
+ <parent revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965" />
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <author email="other@place">other</author>
+ <date>1970-01-14T21:20:00+00:00</date>
+ <msg xml:space="preserve">no person</msg>
+ <paths>
+ <path action="A">c</path>
+ </paths>
+ <extra key="branch">default</extra>
+ </logentry>
+ <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
+ <parent revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f" />
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <author email="other@place">A. N. Other</author>
+ <date>1970-01-13T17:33:20+00:00</date>
+ <msg xml:space="preserve">other 1
+ other 2
+
+ other 3</msg>
+ <paths>
+ <path action="A">b</path>
+ </paths>
+ <extra key="branch">default</extra>
+ </logentry>
+ <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <parent revision="-1" node="0000000000000000000000000000000000000000" />
+ <author email="user@hostname">User Name</author>
+ <date>1970-01-12T13:46:40+00:00</date>
+ <msg xml:space="preserve">line 1
+ line 2</msg>
+ <paths>
+ <path action="A">a</path>
+ </paths>
+ <extra key="branch">default</extra>
+ </logentry>
+ </log>
+
+
+Error if style not readable:
+
+ $ touch q
+ $ chmod 0 q
+ $ hg log --style ./q
+ abort: Permission denied: ./q
+
+Error if no style:
+
+ $ hg log --style notexist
+ abort: style not found: notexist
+
+Error if style missing key:
+
+ $ echo 'q = q' > t
+ $ hg log --style ./t
+ abort: ./t: no key named 'changeset'
+
+Error if include fails:
+
+ $ echo 'changeset = q' >> t
+ $ hg log --style ./t
+ abort: template file ./q: Permission denied
+
+Include works:
+
+ $ rm q
+ $ echo '{rev}' > q
+ $ hg log --style ./t
+ 8
+ 7
+ 6
+ 5
+ 4
+ 3
+ 2
+ 1
+ 0
+
+ui.style works:
+
+ $ echo '[ui]' > .hg/hgrc
+ $ echo 'style = t' >> .hg/hgrc
+ $ hg log
+ 8
+ 7
+ 6
+ 5
+ 4
+ 3
+ 2
+ 1
+ 0
+
+
+Issue338:
+
+ $ hg log --style=changelog > changelog
+
+ $ cat changelog
+ 2020-01-01 test <test>
+
+ * fourth, second, third:
+ third
+ [95c24699272e] [tip]
+
+ 1970-01-12 User Name <user@hostname>
+
+ * second:
+ second
+ [29114dbae42b]
+
+ 1970-01-18 person <person>
+
+ * merge
+ [c7b487c6c50e]
+
+ * d:
+ new head
+ [13207e5a10d9]
+
+ 1970-01-17 person <person>
+
+ * new branch
+ [32a18f097fcc] <foo>
+
+ 1970-01-16 person <person>
+
+ * c:
+ no user, no domain
+ [10e46f2dcbf4]
+
+ 1970-01-14 other <other@place>
+
+ * c:
+ no person
+ [97054abb4ab8]
+
+ 1970-01-13 A. N. Other <other@place>
+
+ * b:
+ other 1 other 2
+
+ other 3
+ [b608e9d1a3f0]
+
+ 1970-01-12 User Name <user@hostname>
+
+ * a:
+ line 1 line 2
+ [1e4e1b8f71e0]
+
+
+Issue 2130:
+
+ $ hg heads --style changelog
+ 2020-01-01 test <test>
+
+ * fourth, second, third:
+ third
+ [95c24699272e] [tip]
+
+ 1970-01-18 person <person>
+
+ * merge
+ [c7b487c6c50e]
+
+ 1970-01-17 person <person>
+
+ * new branch
+ [32a18f097fcc] <foo>
+
+
+Keys work:
+
+ $ for key in author branches date desc file_adds file_dels file_mods \
+ > file_copies file_copies_switch files \
+ > manifest node parents rev tags diffstat extras; do
+ > for mode in '' --verbose --debug; do
+ > hg log $mode --template "$key$mode: {$key}\n"
+ > done
+ > done
+ author: test
+ author: User Name <user@hostname>
+ author: person
+ author: person
+ author: person
+ author: person
+ author: other@place
+ author: A. N. Other <other@place>
+ author: User Name <user@hostname>
+ author--verbose: test
+ author--verbose: User Name <user@hostname>
+ author--verbose: person
+ author--verbose: person
+ author--verbose: person
+ author--verbose: person
+ author--verbose: other@place
+ author--verbose: A. N. Other <other@place>
+ author--verbose: User Name <user@hostname>
+ author--debug: test
+ author--debug: User Name <user@hostname>
+ author--debug: person
+ author--debug: person
+ author--debug: person
+ author--debug: person
+ author--debug: other@place
+ author--debug: A. N. Other <other@place>
+ author--debug: User Name <user@hostname>
+ branches:
+ branches:
+ branches:
+ branches:
+ branches: foo
+ branches:
+ branches:
+ branches:
+ branches:
+ branches--verbose:
+ branches--verbose:
+ branches--verbose:
+ branches--verbose:
+ branches--verbose: foo
+ branches--verbose:
+ branches--verbose:
+ branches--verbose:
+ branches--verbose:
+ branches--debug:
+ branches--debug:
+ branches--debug:
+ branches--debug:
+ branches--debug: foo
+ branches--debug:
+ branches--debug:
+ branches--debug:
+ branches--debug:
+ date: 1577872860.00
+ date: 1000000.00
+ date: 1500001.00
+ date: 1500000.00
+ date: 1400000.00
+ date: 1300000.00
+ date: 1200000.00
+ date: 1100000.00
+ date: 1000000.00
+ date--verbose: 1577872860.00
+ date--verbose: 1000000.00
+ date--verbose: 1500001.00
+ date--verbose: 1500000.00
+ date--verbose: 1400000.00
+ date--verbose: 1300000.00
+ date--verbose: 1200000.00
+ date--verbose: 1100000.00
+ date--verbose: 1000000.00
+ date--debug: 1577872860.00
+ date--debug: 1000000.00
+ date--debug: 1500001.00
+ date--debug: 1500000.00
+ date--debug: 1400000.00
+ date--debug: 1300000.00
+ date--debug: 1200000.00
+ date--debug: 1100000.00
+ date--debug: 1000000.00
+ desc: third
+ desc: second
+ desc: merge
+ desc: new head
+ desc: new branch
+ desc: no user, no domain
+ desc: no person
+ desc: other 1
+ other 2
+
+ other 3
+ desc: line 1
+ line 2
+ desc--verbose: third
+ desc--verbose: second
+ desc--verbose: merge
+ desc--verbose: new head
+ desc--verbose: new branch
+ desc--verbose: no user, no domain
+ desc--verbose: no person
+ desc--verbose: other 1
+ other 2
+
+ other 3
+ desc--verbose: line 1
+ line 2
+ desc--debug: third
+ desc--debug: second
+ desc--debug: merge
+ desc--debug: new head
+ desc--debug: new branch
+ desc--debug: no user, no domain
+ desc--debug: no person
+ desc--debug: other 1
+ other 2
+
+ other 3
+ desc--debug: line 1
+ line 2
+ file_adds: fourth third
+ file_adds: second
+ file_adds:
+ file_adds: d
+ file_adds:
+ file_adds:
+ file_adds: c
+ file_adds: b
+ file_adds: a
+ file_adds--verbose: fourth third
+ file_adds--verbose: second
+ file_adds--verbose:
+ file_adds--verbose: d
+ file_adds--verbose:
+ file_adds--verbose:
+ file_adds--verbose: c
+ file_adds--verbose: b
+ file_adds--verbose: a
+ file_adds--debug: fourth third
+ file_adds--debug: second
+ file_adds--debug:
+ file_adds--debug: d
+ file_adds--debug:
+ file_adds--debug:
+ file_adds--debug: c
+ file_adds--debug: b
+ file_adds--debug: a
+ file_dels: second
+ file_dels:
+ file_dels:
+ file_dels:
+ file_dels:
+ file_dels:
+ file_dels:
+ file_dels:
+ file_dels:
+ file_dels--verbose: second
+ file_dels--verbose:
+ file_dels--verbose:
+ file_dels--verbose:
+ file_dels--verbose:
+ file_dels--verbose:
+ file_dels--verbose:
+ file_dels--verbose:
+ file_dels--verbose:
+ file_dels--debug: second
+ file_dels--debug:
+ file_dels--debug:
+ file_dels--debug:
+ file_dels--debug:
+ file_dels--debug:
+ file_dels--debug:
+ file_dels--debug:
+ file_dels--debug:
+ file_mods:
+ file_mods:
+ file_mods:
+ file_mods:
+ file_mods:
+ file_mods: c
+ file_mods:
+ file_mods:
+ file_mods:
+ file_mods--verbose:
+ file_mods--verbose:
+ file_mods--verbose:
+ file_mods--verbose:
+ file_mods--verbose:
+ file_mods--verbose: c
+ file_mods--verbose:
+ file_mods--verbose:
+ file_mods--verbose:
+ file_mods--debug:
+ file_mods--debug:
+ file_mods--debug:
+ file_mods--debug:
+ file_mods--debug:
+ file_mods--debug: c
+ file_mods--debug:
+ file_mods--debug:
+ file_mods--debug:
+ file_copies: fourth (second)
+ file_copies:
+ file_copies:
+ file_copies:
+ file_copies:
+ file_copies:
+ file_copies:
+ file_copies:
+ file_copies:
+ file_copies--verbose: fourth (second)
+ file_copies--verbose:
+ file_copies--verbose:
+ file_copies--verbose:
+ file_copies--verbose:
+ file_copies--verbose:
+ file_copies--verbose:
+ file_copies--verbose:
+ file_copies--verbose:
+ file_copies--debug: fourth (second)
+ file_copies--debug:
+ file_copies--debug:
+ file_copies--debug:
+ file_copies--debug:
+ file_copies--debug:
+ file_copies--debug:
+ file_copies--debug:
+ file_copies--debug:
+ file_copies_switch:
+ file_copies_switch:
+ file_copies_switch:
+ file_copies_switch:
+ file_copies_switch:
+ file_copies_switch:
+ file_copies_switch:
+ file_copies_switch:
+ file_copies_switch:
+ file_copies_switch--verbose:
+ file_copies_switch--verbose:
+ file_copies_switch--verbose:
+ file_copies_switch--verbose:
+ file_copies_switch--verbose:
+ file_copies_switch--verbose:
+ file_copies_switch--verbose:
+ file_copies_switch--verbose:
+ file_copies_switch--verbose:
+ file_copies_switch--debug:
+ file_copies_switch--debug:
+ file_copies_switch--debug:
+ file_copies_switch--debug:
+ file_copies_switch--debug:
+ file_copies_switch--debug:
+ file_copies_switch--debug:
+ file_copies_switch--debug:
+ file_copies_switch--debug:
+ files: fourth second third
+ files: second
+ files:
+ files: d
+ files:
+ files: c
+ files: c
+ files: b
+ files: a
+ files--verbose: fourth second third
+ files--verbose: second
+ files--verbose:
+ files--verbose: d
+ files--verbose:
+ files--verbose: c
+ files--verbose: c
+ files--verbose: b
+ files--verbose: a
+ files--debug: fourth second third
+ files--debug: second
+ files--debug:
+ files--debug: d
+ files--debug:
+ files--debug: c
+ files--debug: c
+ files--debug: b
+ files--debug: a
+ manifest: 8:94961b75a2da
+ manifest: 7:f2dbc354b94e
+ manifest: 6:91015e9dbdd7
+ manifest: 5:4dc3def4f9b4
+ manifest: 4:90ae8dda64e1
+ manifest: 3:cb5a1327723b
+ manifest: 2:6e0e82995c35
+ manifest: 1:4e8d705b1e53
+ manifest: 0:a0c8bcbbb45c
+ manifest--verbose: 8:94961b75a2da
+ manifest--verbose: 7:f2dbc354b94e
+ manifest--verbose: 6:91015e9dbdd7
+ manifest--verbose: 5:4dc3def4f9b4
+ manifest--verbose: 4:90ae8dda64e1
+ manifest--verbose: 3:cb5a1327723b
+ manifest--verbose: 2:6e0e82995c35
+ manifest--verbose: 1:4e8d705b1e53
+ manifest--verbose: 0:a0c8bcbbb45c
+ manifest--debug: 8:94961b75a2da554b4df6fb599e5bfc7d48de0c64
+ manifest--debug: 7:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
+ manifest--debug: 6:91015e9dbdd76a6791085d12b0a0ec7fcd22ffbf
+ manifest--debug: 5:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
+ manifest--debug: 4:90ae8dda64e1a876c792bccb9af66284f6018363
+ manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
+ manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
+ manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
+ manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
+ node: 95c24699272ef57d062b8bccc32c878bf841784a
+ node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
+ node: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
+ node: 13207e5a10d9fd28ec424934298e176197f2c67f
+ node: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
+ node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
+ node: 97054abb4ab824450e9164180baf491ae0078465
+ node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
+ node: 1e4e1b8f71e05681d422154f5421e385fec3454f
+ node--verbose: 95c24699272ef57d062b8bccc32c878bf841784a
+ node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
+ node--verbose: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
+ node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
+ node--verbose: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
+ node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
+ node--verbose: 97054abb4ab824450e9164180baf491ae0078465
+ node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
+ node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
+ node--debug: 95c24699272ef57d062b8bccc32c878bf841784a
+ node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
+ node--debug: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
+ node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
+ node--debug: 32a18f097fcccf76ef282f62f8a85b3adf8d13c4
+ node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
+ node--debug: 97054abb4ab824450e9164180baf491ae0078465
+ node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
+ node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
+ parents:
+ parents: -1:000000000000
+ parents: 5:13207e5a10d9 4:32a18f097fcc
+ parents: 3:10e46f2dcbf4
+ parents:
+ parents:
+ parents:
+ parents:
+ parents:
+ parents--verbose:
+ parents--verbose: -1:000000000000
+ parents--verbose: 5:13207e5a10d9 4:32a18f097fcc
+ parents--verbose: 3:10e46f2dcbf4
+ parents--verbose:
+ parents--verbose:
+ parents--verbose:
+ parents--verbose:
+ parents--verbose:
+ parents--debug: 7:29114dbae42b9f078cf2714dbe3a86bba8ec7453 -1:0000000000000000000000000000000000000000
+ parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
+ parents--debug: 5:13207e5a10d9fd28ec424934298e176197f2c67f 4:32a18f097fcccf76ef282f62f8a85b3adf8d13c4
+ parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
+ parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
+ parents--debug: 2:97054abb4ab824450e9164180baf491ae0078465 -1:0000000000000000000000000000000000000000
+ parents--debug: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 -1:0000000000000000000000000000000000000000
+ parents--debug: 0:1e4e1b8f71e05681d422154f5421e385fec3454f -1:0000000000000000000000000000000000000000
+ parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
+ rev: 8
+ rev: 7
+ rev: 6
+ rev: 5
+ rev: 4
+ rev: 3
+ rev: 2
+ rev: 1
+ rev: 0
+ rev--verbose: 8
+ rev--verbose: 7
+ rev--verbose: 6
+ rev--verbose: 5
+ rev--verbose: 4
+ rev--verbose: 3
+ rev--verbose: 2
+ rev--verbose: 1
+ rev--verbose: 0
+ rev--debug: 8
+ rev--debug: 7
+ rev--debug: 6
+ rev--debug: 5
+ rev--debug: 4
+ rev--debug: 3
+ rev--debug: 2
+ rev--debug: 1
+ rev--debug: 0
+ tags: tip
+ tags:
+ tags:
+ tags:
+ tags:
+ tags:
+ tags:
+ tags:
+ tags:
+ tags--verbose: tip
+ tags--verbose:
+ tags--verbose:
+ tags--verbose:
+ tags--verbose:
+ tags--verbose:
+ tags--verbose:
+ tags--verbose:
+ tags--verbose:
+ tags--debug: tip
+ tags--debug:
+ tags--debug:
+ tags--debug:
+ tags--debug:
+ tags--debug:
+ tags--debug:
+ tags--debug:
+ tags--debug:
+ diffstat: 3: +2/-1
+ diffstat: 1: +1/-0
+ diffstat: 0: +0/-0
+ diffstat: 1: +1/-0
+ diffstat: 0: +0/-0
+ diffstat: 1: +1/-0
+ diffstat: 1: +4/-0
+ diffstat: 1: +2/-0
+ diffstat: 1: +1/-0
+ diffstat--verbose: 3: +2/-1
+ diffstat--verbose: 1: +1/-0
+ diffstat--verbose: 0: +0/-0
+ diffstat--verbose: 1: +1/-0
+ diffstat--verbose: 0: +0/-0
+ diffstat--verbose: 1: +1/-0
+ diffstat--verbose: 1: +4/-0
+ diffstat--verbose: 1: +2/-0
+ diffstat--verbose: 1: +1/-0
+ diffstat--debug: 3: +2/-1
+ diffstat--debug: 1: +1/-0
+ diffstat--debug: 0: +0/-0
+ diffstat--debug: 1: +1/-0
+ diffstat--debug: 0: +0/-0
+ diffstat--debug: 1: +1/-0
+ diffstat--debug: 1: +4/-0
+ diffstat--debug: 1: +2/-0
+ diffstat--debug: 1: +1/-0
+ extras: branch=default
+ extras: branch=default
+ extras: branch=default
+ extras: branch=default
+ extras: branch=foo
+ extras: branch=default
+ extras: branch=default
+ extras: branch=default
+ extras: branch=default
+ extras--verbose: branch=default
+ extras--verbose: branch=default
+ extras--verbose: branch=default
+ extras--verbose: branch=default
+ extras--verbose: branch=foo
+ extras--verbose: branch=default
+ extras--verbose: branch=default
+ extras--verbose: branch=default
+ extras--verbose: branch=default
+ extras--debug: branch=default
+ extras--debug: branch=default
+ extras--debug: branch=default
+ extras--debug: branch=default
+ extras--debug: branch=foo
+ extras--debug: branch=default
+ extras--debug: branch=default
+ extras--debug: branch=default
+ extras--debug: branch=default
+
+
+Filters work:
+
+ $ hg log --template '{author|domain}\n'
+
+ hostname
+
+
+
+
+ place
+ place
+ hostname
+
+ $ hg log --template '{author|person}\n'
+ test
+ User Name
+ person
+ person
+ person
+ person
+ other
+ A. N. Other
+ User Name
+
+ $ hg log --template '{author|user}\n'
+ test
+ user
+ person
+ person
+ person
+ person
+ other
+ other
+ user
+
+ $ hg log --template '{date|age}\n' > /dev/null || exit 1
+
+ $ hg log -l1 --template '{date|age}\n'
+ in the future
+ $ hg log --template '{date|date}\n'
+ Wed Jan 01 10:01:00 2020 +0000
+ Mon Jan 12 13:46:40 1970 +0000
+ Sun Jan 18 08:40:01 1970 +0000
+ Sun Jan 18 08:40:00 1970 +0000
+ Sat Jan 17 04:53:20 1970 +0000
+ Fri Jan 16 01:06:40 1970 +0000
+ Wed Jan 14 21:20:00 1970 +0000
+ Tue Jan 13 17:33:20 1970 +0000
+ Mon Jan 12 13:46:40 1970 +0000
+
+ $ hg log --template '{date|isodate}\n'
+ 2020-01-01 10:01 +0000
+ 1970-01-12 13:46 +0000
+ 1970-01-18 08:40 +0000
+ 1970-01-18 08:40 +0000
+ 1970-01-17 04:53 +0000
+ 1970-01-16 01:06 +0000
+ 1970-01-14 21:20 +0000
+ 1970-01-13 17:33 +0000
+ 1970-01-12 13:46 +0000
+
+ $ hg log --template '{date|isodatesec}\n'
+ 2020-01-01 10:01:00 +0000
+ 1970-01-12 13:46:40 +0000
+ 1970-01-18 08:40:01 +0000
+ 1970-01-18 08:40:00 +0000
+ 1970-01-17 04:53:20 +0000
+ 1970-01-16 01:06:40 +0000
+ 1970-01-14 21:20:00 +0000
+ 1970-01-13 17:33:20 +0000
+ 1970-01-12 13:46:40 +0000
+
+ $ hg log --template '{date|rfc822date}\n'
+ Wed, 01 Jan 2020 10:01:00 +0000
+ Mon, 12 Jan 1970 13:46:40 +0000
+ Sun, 18 Jan 1970 08:40:01 +0000
+ Sun, 18 Jan 1970 08:40:00 +0000
+ Sat, 17 Jan 1970 04:53:20 +0000
+ Fri, 16 Jan 1970 01:06:40 +0000
+ Wed, 14 Jan 1970 21:20:00 +0000
+ Tue, 13 Jan 1970 17:33:20 +0000
+ Mon, 12 Jan 1970 13:46:40 +0000
+
+ $ hg log --template '{desc|firstline}\n'
+ third
+ second
+ merge
+ new head
+ new branch
+ no user, no domain
+ no person
+ other 1
+ line 1
+
+ $ hg log --template '{node|short}\n'
+ 95c24699272e
+ 29114dbae42b
+ c7b487c6c50e
+ 13207e5a10d9
+ 32a18f097fcc
+ 10e46f2dcbf4
+ 97054abb4ab8
+ b608e9d1a3f0
+ 1e4e1b8f71e0
+
+ $ hg log --template '<changeset author="{author|xmlescape}"/>\n'
+ <changeset author="test"/>
+ <changeset author="User Name <user@hostname>"/>
+ <changeset author="person"/>
+ <changeset author="person"/>
+ <changeset author="person"/>
+ <changeset author="person"/>
+ <changeset author="other@place"/>
+ <changeset author="A. N. Other <other@place>"/>
+ <changeset author="User Name <user@hostname>"/>
+
+ $ hg log --template '{rev}: {children}\n'
+ 8:
+ 7: 8:95c24699272e
+ 6:
+ 5: 6:c7b487c6c50e
+ 4: 6:c7b487c6c50e
+ 3: 4:32a18f097fcc 5:13207e5a10d9
+ 2: 3:10e46f2dcbf4
+ 1: 2:97054abb4ab8
+ 0: 1:b608e9d1a3f0
+
+Formatnode filter works:
+
+ $ hg -q log -r 0 --template '{node|formatnode}\n'
+ 1e4e1b8f71e0
+
+ $ hg log -r 0 --template '{node|formatnode}\n'
+ 1e4e1b8f71e0
+
+ $ hg -v log -r 0 --template '{node|formatnode}\n'
+ 1e4e1b8f71e0
+
+ $ hg --debug log -r 0 --template '{node|formatnode}\n'
+ 1e4e1b8f71e05681d422154f5421e385fec3454f
+
+Error on syntax:
+
+ $ echo 'x = "f' >> t
+ $ hg log
+ abort: t:3: unmatched quotes
+
+ $ cd ..
+
+
+latesttag:
+
+ $ hg init latesttag
+ $ cd latesttag
+
+ $ echo a > file
+ $ hg ci -Am a -d '0 0'
+ adding file
+
+ $ echo b >> file
+ $ hg ci -m b -d '1 0'
+
+ $ echo c >> head1
+ $ hg ci -Am h1c -d '2 0'
+ adding head1
+
+ $ hg update -q 1
+ $ echo d >> head2
+ $ hg ci -Am h2d -d '3 0'
+ adding head2
+ created new head
+
+ $ echo e >> head2
+ $ hg ci -m h2e -d '4 0'
+
+ $ hg merge -q
+ $ hg ci -m merge -d '5 0'
+
+No tag set:
+
+ $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
+ 5: null+5
+ 4: null+4
+ 3: null+3
+ 2: null+3
+ 1: null+2
+ 0: null+1
+
+One common tag: longuest path wins:
+
+ $ hg tag -r 1 -m t1 -d '6 0' t1
+ $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
+ 6: t1+4
+ 5: t1+3
+ 4: t1+2
+ 3: t1+1
+ 2: t1+1
+ 1: t1+0
+ 0: null+1
+
+One ancestor tag: more recent wins:
+
+ $ hg tag -r 2 -m t2 -d '7 0' t2
+ $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
+ 7: t2+3
+ 6: t2+2
+ 5: t2+1
+ 4: t1+2
+ 3: t1+1
+ 2: t2+0
+ 1: t1+0
+ 0: null+1
+
+Two branch tags: more recent wins:
+
+ $ hg tag -r 3 -m t3 -d '8 0' t3
+ $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
+ 8: t3+5
+ 7: t3+4
+ 6: t3+3
+ 5: t3+2
+ 4: t3+1
+ 3: t3+0
+ 2: t2+0
+ 1: t1+0
+ 0: null+1
+
+Merged tag overrides:
+
+ $ hg tag -r 5 -m t5 -d '9 0' t5
+ $ hg tag -r 3 -m at3 -d '10 0' at3
+ $ hg log --template '{rev}: {latesttag}+{latesttagdistance}\n'
+ 10: t5+5
+ 9: t5+4
+ 8: t5+3
+ 7: t5+2
+ 6: t5+1
+ 5: t5+0
+ 4: at3:t3+1
+ 3: at3:t3+0
+ 2: t2+0
+ 1: t1+0
+ 0: null+1
+
+ $ cd ..
+
+
+Style path expansion (issue1948):
+
+ $ mkdir -p home/styles
+
+ $ cat > home/styles/teststyle <<EOF
+ > changeset = 'test {rev}:{node|short}\n'
+ > EOF
+
+ $ HOME=`pwd`/home; export HOME
+
+ $ cat > latesttag/.hg/hgrc <<EOF
+ > [ui]
+ > style = ~/styles/teststyle
+ > EOF
+
+ $ hg -R latesttag tip
+ test 10:dee8f28249af
+
+Test recursive showlist template (issue1989):
+
+ $ cat > style1989 <<EOF
+ > changeset = '{file_mods}{manifest}{extras}'
+ > file_mod = 'M|{author|person}\n'
+ > manifest = '{rev},{author}\n'
+ > extra = '{key}: {author}\n'
+ > EOF
+
+ $ hg -R latesttag log -r tip --style=style1989
+ M|test
+ 10,test
+ branch: test
+
--- a/tests/test-confused-revert Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-#!/bin/sh
-
-hg init
-echo foo > a
-hg add a
-hg commit -m "1"
-
-echo bar > b
-hg add b
-hg remove a
-
-echo "%%% should show a removed and b added"
-hg status
-
-echo "reverting..."
-hg revert --all
-
-echo "%%% should show b unknown and a back to normal"
-hg status
-
-rm b
-
-hg co -C 0
-echo foo-a > a
-hg commit -m "2a"
-
-hg co -C 0
-echo foo-b > a
-hg commit -m "2b"
-
-HGMERGE=true hg merge 1
-
-echo "%%% should show foo-b"
-cat a
-
-echo bar > b
-hg add b
-rm a
-hg remove a
-
-echo "%%% should show a removed and b added"
-hg status
-
-echo "%%% revert should fail"
-hg revert --all
-
-echo "%%% revert should be ok now"
-hg revert -r2 --all
-
-echo "%%% should show b unknown and a marked modified (merged)"
-hg status
-
-echo "%%% should show foo-b"
-cat a
-
--- a/tests/test-confused-revert.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-%%% should show a removed and b added
-A b
-R a
-reverting...
-undeleting a
-forgetting b
-%%% should show b unknown and a back to normal
-? b
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-merging a
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-%%% should show foo-b
-foo-b
-%%% should show a removed and b added
-A b
-R a
-%%% revert should fail
-abort: uncommitted merge - please provide a specific revision
-%%% revert should be ok now
-undeleting a
-forgetting b
-%%% should show b unknown and a marked modified (merged)
-M a
-? b
-%%% should show foo-b
-foo-b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-confused-revert.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,80 @@
+ $ hg init
+ $ echo foo > a
+ $ hg add a
+ $ hg commit -m "1"
+
+ $ echo bar > b
+ $ hg add b
+ $ hg remove a
+
+Should show a removed and b added:
+
+ $ hg status
+ A b
+ R a
+
+ $ hg revert --all
+ undeleting a
+ forgetting b
+
+Should show b unknown and a back to normal:
+
+ $ hg status
+ ? b
+
+ $ rm b
+
+ $ hg co -C 0
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo foo-a > a
+ $ hg commit -m "2a"
+
+ $ hg co -C 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo foo-b > a
+ $ hg commit -m "2b"
+ created new head
+
+ $ HGMERGE=true hg merge 1
+ merging a
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+Should show foo-b:
+
+ $ cat a
+ foo-b
+
+ $ echo bar > b
+ $ hg add b
+ $ rm a
+ $ hg remove a
+
+Should show a removed and b added:
+
+ $ hg status
+ A b
+ R a
+
+Revert should fail:
+
+ $ hg revert --all
+ abort: uncommitted merge - please provide a specific revision
+
+Revert should be ok now:
+
+ $ hg revert -r2 --all
+ undeleting a
+ forgetting b
+
+Should show b unknown and a marked modified (merged):
+
+ $ hg status
+ M a
+ ? b
+
+Should show foo-b:
+
+ $ cat a
+ foo-b
+
--- a/tests/test-convert-darcs Mon Sep 13 01:37:56 2010 +0000
+++ b/tests/test-convert-darcs Tue Sep 14 16:21:01 2010 -0500
@@ -56,13 +56,18 @@
rm dir/d2
darcs mv dir dir2
darcs record -a -l -m p3
-cd ..
+
+echo % test utf-8 commit message and author
+echo g > g
+# darcs is encoding agnostic, so it takes whatever bytes it's given
+darcs record -a -l -m 'p4: desc ñ' -A 'author ñ'
glog()
{
- hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
+ HGENCODING=utf-8 hg glog --template '{rev} "{desc|firstline}" ({author}) files: {files}\n' "$@"
}
+cd ..
hg convert darcs-repo darcs-repo-hg
# The converter does not currently handle patch conflicts very well.
# When they occur, it reverts *all* changes and moves forward,
--- a/tests/test-convert-darcs.out Mon Sep 13 01:37:56 2010 +0000
+++ b/tests/test-convert-darcs.out Tue Sep 14 16:21:01 2010 -0500
@@ -12,26 +12,32 @@
Finished recording patch 'p2'
% test file and directory move
Finished recording patch 'p3'
+% test utf-8 commit message and author
+Finished recording patch 'p4: desc ñ'
initializing destination darcs-repo-hg repository
scanning source...
sorting...
converting...
-4 p0
-3 p1.2
-2 p1.1
-1 p2
-0 p3
-o 4 "p3" files: dir/d dir/d2 dir2/d f ff
+5 p0
+4 p1.2
+3 p1.1
+2 p2
+1 p3
+0 p4: desc ?
+o 5 "p4: desc ñ" (author ñ) files: g
|
-o 3 "p2" files: a dir/d dir/d2 f
+o 4 "p3" (test@example.org) files: dir/d dir/d2 dir2/d f ff
|
-o 2 "p1.1" files:
+o 3 "p2" (test@example.org) files: a dir/d dir/d2 f
|
-o 1 "p1.2" files: a b
+o 2 "p1.1" (test@example.org) files:
|
-o 0 "p0" files: a
+o 1 "p1.2" (test@example.org) files: a b
+|
+o 0 "p0" (test@example.org) files: a
7225b30cdf38257d5cc7780772c051b6f33e6d6b 644 a
1e88685f5ddec574a34c70af492f95b6debc8741 644 b
37406831adc447ec2385014019599dfec953c806 644 dir2/d
b783a337463792a5c7d548ad85a7d3253c16ba8c 644 ff
+0973eb1b2ecc4de7fafe7447ce1b7462108b4848 644 g
--- a/tests/test-debugcomplete.t Mon Sep 13 01:37:56 2010 +0000
+++ b/tests/test-debugcomplete.t Tue Sep 14 16:21:01 2010 -0500
@@ -176,7 +176,7 @@
Show all commands + options
$ hg debugcommands
- add: include, exclude, dry-run
+ add: include, exclude, subrepos, dry-run
annotate: rev, follow, no-follow, text, user, file, date, number, changeset, line-number, include, exclude
clone: noupdate, updaterev, rev, branch, pull, uncompressed, ssh, remotecmd
commit: addremove, close-branch, include, exclude, message, logfile, date, user
@@ -227,10 +227,10 @@
help:
identify: rev, num, id, branch, tags
import: strip, base, force, no-commit, exact, import-branch, message, logfile, date, user, similarity
- incoming: force, newest-first, bundle, rev, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd
+ incoming: force, newest-first, bundle, rev, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd, subrepos
locate: rev, print0, fullpath, include, exclude
manifest: rev
- outgoing: force, rev, newest-first, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd
+ outgoing: force, rev, newest-first, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd, subrepos
parents: rev, style, template
paths:
recover:
--- a/tests/test-debugrename Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-#!/bin/sh
-
-hg init
-echo a > a
-hg ci -Am t
-
-hg mv a b
-hg ci -Am t1
-hg debugrename b
-
-hg mv b a
-hg ci -Am t2
-hg debugrename a
-
-echo % test with --rev
-hg debugrename --rev 1 b
-
--- a/tests/test-debugrename.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-adding a
-b renamed from a:b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
-a renamed from b:37d9b5d994eab34eda9c16b195ace52c7b129980
-% test with --rev
-b renamed from a:b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-debugrename.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,18 @@
+ $ hg init
+ $ echo a > a
+ $ hg ci -Am t
+ adding a
+
+ $ hg mv a b
+ $ hg ci -Am t1
+ $ hg debugrename b
+ b renamed from a:b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
+
+ $ hg mv b a
+ $ hg ci -Am t2
+ $ hg debugrename a
+ a renamed from b:37d9b5d994eab34eda9c16b195ace52c7b129980
+
+ $ hg debugrename --rev 1 b
+ b renamed from a:b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
+
--- a/tests/test-default-push Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-#!/bin/sh
-
-hg init a
-echo a > a/a
-hg --cwd a ci -Ama
-
-hg clone a c
-
-hg clone a b
-echo b >> b/a
-hg --cwd b ci -mb
-
-echo % push should push to default when default-push not set
-hg --cwd b push | sed 's/pushing to.*/pushing/'
-
-echo % push should push to default-push when set
-echo 'default-push = ../c' >> b/.hg/hgrc
-hg --cwd b push | sed 's/pushing to.*/pushing/'
--- a/tests/test-default-push.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-adding a
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% push should push to default when default-push not set
-pushing
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-% push should push to default-push when set
-pushing
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-default-push.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,38 @@
+ $ hg init a
+
+ $ echo a > a/a
+ $ hg --cwd a ci -Ama
+ adding a
+
+ $ hg clone a c
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg clone a b
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ echo b >> b/a
+ $ hg --cwd b ci -mb
+
+Push should push to 'default' when 'default-push' not set:
+
+ $ hg --cwd b push
+ pushing to .*/a
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+
+Push should push to 'default-push' when set:
+
+ $ echo 'default-push = ../c' >> b/.hg/hgrc
+ $ hg --cwd b push
+ pushing to .*/c
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-dirstate-race.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,33 @@
+ $ hg init
+ $ echo a > a
+ $ hg add a
+ $ hg commit -m test
+
+Do we ever miss a sub-second change?:
+
+ $ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
+ > hg co -qC 0
+ > echo b > a
+ > hg st
+ > done
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+ M a
+
--- a/tests/test-help.t Mon Sep 13 01:37:56 2010 +0000
+++ b/tests/test-help.t Tue Sep 14 16:21:01 2010 -0500
@@ -274,6 +274,7 @@
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
+ -S --subrepos recurse into subrepositories
-n --dry-run do not perform actions, just print output
[+] marked option can be specified multiple times
@@ -312,6 +313,7 @@
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
+ -S --subrepos recurse into subrepositories
-n --dry-run do not perform actions, just print output
global options:
@@ -364,6 +366,7 @@
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
+ -S --subrepos recurse into subrepositories
-n --dry-run do not perform actions, just print output
[+] marked option can be specified multiple times
@@ -391,6 +394,7 @@
-I --include PATTERN [+] include names matching the given patterns
-X --exclude PATTERN [+] exclude names matching the given patterns
+ -S --subrepos recurse into subrepositories
-n --dry-run do not perform actions, just print output
[+] marked option can be specified multiple times
--- a/tests/test-manifest Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-#!/bin/sh
-
-# Source bundle was generated with the following script.
-#
-# hg init
-# echo a > a
-# ln -s a l
-# hg ci -Ama -d'0 0'
-# mkdir b
-# echo a > b/a
-# chmod +x b/a
-# hg ci -Amb -d'1 0'
-
-hg init
-hg -q pull "$TESTDIR/test-manifest.hg"
-
-echo % should be empty
-hg manifest
-
-hg co
-hg manifest
-hg manifest -v
-hg manifest --debug
-hg manifest -r 0
-hg manifest -r 1
-hg manifest -r tip
-
-echo % should fail
-hg manifest -r 2
-hg manifest -r tip tip
-
-hg manifest tip
--- a/tests/test-manifest-merging Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-#!/bin/sh
-
-echo % init foo-base
-hg init foo-base
-
-echo % create alpha in first repo
-cd foo-base
-echo 'alpha' > alpha
-hg ci -A -m 'add alpha' -d '1 0'
-cd ..
-
-echo % clone foo-base to foo-work
-hg clone foo-base foo-work
-
-echo % create beta in second repo
-cd foo-work
-echo 'beta' > beta
-hg ci -A -m 'add beta' -d '2 0'
-cd ..
-
-echo % create gamma in first repo
-cd foo-base
-echo 'gamma' > gamma
-hg ci -A -m 'add gamma' -d '3 0'
-cd ..
-
-echo % pull into work and merge
-cd foo-work
-hg pull -q
-hg merge
-
-echo % revert to changeset 1 to simulate a failed merge
-rm alpha beta gamma
-hg up -C 1
--- a/tests/test-manifest-merging.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-% init foo-base
-% create alpha in first repo
-adding alpha
-% clone foo-base to foo-work
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% create beta in second repo
-adding beta
-% create gamma in first repo
-adding gamma
-% pull into work and merge
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% revert to changeset 1 to simulate a failed merge
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-manifest-merging.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,36 @@
+ $ hg init base
+
+ $ cd base
+ $ echo 'alpha' > alpha
+ $ hg ci -A -m 'add alpha'
+ adding alpha
+ $ cd ..
+
+ $ hg clone base work
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cd work
+ $ echo 'beta' > beta
+ $ hg ci -A -m 'add beta'
+ adding beta
+ $ cd ..
+
+ $ cd base
+ $ echo 'gamma' > gamma
+ $ hg ci -A -m 'add gamma'
+ adding gamma
+ $ cd ..
+
+ $ cd work
+ $ hg pull -q
+ $ hg merge
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+Update --clean to revision 1 to simulate a failed merge:
+
+ $ rm alpha beta gamma
+ $ hg update --clean 1
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
--- a/tests/test-manifest.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-% should be empty
-3 files updated, 0 files merged, 0 files removed, 0 files unresolved
-a
-b/a
-l
-644 a
-755 * b/a
-644 @ l
-b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 644 a
-b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 755 * b/a
-047b75c6d7a3ef6a2243bd0e99f94f6ea6683597 644 @ l
-a
-l
-a
-b/a
-l
-a
-b/a
-l
-% should fail
-abort: unknown revision '2'!
-abort: please specify just one revision
-a
-b/a
-l
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-manifest.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,69 @@
+# Source bundle was generated with the following script.
+#
+# hg init
+# echo a > a
+# ln -s a l
+# hg ci -Ama -d'0 0'
+# mkdir b
+# echo a > b/a
+# chmod +x b/a
+# hg ci -Amb -d'1 0'
+
+ $ hg init
+ $ hg -q pull "$TESTDIR/test-manifest.hg"
+
+
+The next call is expected to return nothing:
+
+ $ hg manifest
+
+
+ $ hg co
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg manifest
+ a
+ b/a
+ l
+
+ $ hg manifest -v
+ 644 a
+ 755 * b/a
+ 644 @ l
+
+ $ hg manifest --debug
+ b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 644 a
+ b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 755 * b/a
+ 047b75c6d7a3ef6a2243bd0e99f94f6ea6683597 644 @ l
+
+ $ hg manifest -r 0
+ a
+ l
+
+ $ hg manifest -r 1
+ a
+ b/a
+ l
+
+ $ hg manifest -r tip
+ a
+ b/a
+ l
+
+ $ hg manifest tip
+ a
+ b/a
+ l
+
+
+The next two calls are expected to abort:
+
+ $ hg manifest -r 2
+ abort: unknown revision '2'!
+
+ $ hg manifest -r tip tip
+ abort: please specify just one revision
+
+
+ $ true
+
--- a/tests/test-merge-commit Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-#!/bin/sh
-# check that renames are correctly saved by a commit after a merge
-
-# test with the merge on 3 having the rename on the local parent
-hg init a
-cd a
-
-echo line1 > foo
-hg add foo
-hg ci -m '0: add foo'
-
-echo line2 >> foo
-hg ci -m '1: change foo'
-
-hg up -C 0
-hg mv foo bar
-rm bar
-echo line0 > bar
-echo line1 >> bar
-hg ci -m '2: mv foo bar; change bar'
-
-hg merge 1
-echo '% contents of bar should be line0 line1 line2'
-cat bar
-hg ci -m '3: merge with local rename'
-hg debugindex .hg/store/data/bar.i
-hg debugrename bar
-hg debugindex .hg/store/data/foo.i
-
-# revert the content change from rev 2
-hg up -C 2
-rm bar
-echo line1 > bar
-hg ci -m '4: revert content change from rev 2'
-
-hg log --template '{rev}:{node|short} {parents}\n'
-echo '% this should use bar@rev2 as the ancestor'
-hg --debug merge 3
-echo '% contents of bar should be line1 line2'
-cat bar
-hg ci -m '5: merge'
-hg debugindex .hg/store/data/bar.i
-
-
-# same thing, but with the merge on 3 having the rename on the remote parent
-echo
-echo
-cd ..
-hg clone -U -r 1 -r 2 a b
-cd b
-
-hg up -C 1
-hg merge 2
-echo '% contents of bar should be line0 line1 line2'
-cat bar
-hg ci -m '3: merge with remote rename'
-hg debugindex .hg/store/data/bar.i
-hg debugrename bar
-hg debugindex .hg/store/data/foo.i
-
-# revert the content change from rev 2
-hg up -C 2
-rm bar
-echo line1 > bar
-hg ci -m '4: revert content change from rev 2'
-
-hg log --template '{rev}:{node|short} {parents}\n'
-echo '% this should use bar@rev2 as the ancestor'
-hg --debug merge 3
-echo '% contents of bar should be line1 line2'
-cat bar
-hg ci -m '5: merge'
-hg debugindex .hg/store/data/bar.i
-
--- a/tests/test-merge-commit.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-merging bar and foo to bar
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% contents of bar should be line0 line1 line2
-line0
-line1
-line2
- rev offset length base linkrev nodeid p1 p2
- 0 0 77 0 2 d35118874825 000000000000 000000000000
- 1 77 76 0 3 5345f5ab8abd 000000000000 d35118874825
-bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
- rev offset length base linkrev nodeid p1 p2
- 0 0 7 0 0 690b295714ae 000000000000 000000000000
- 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-4:2263c1be0967 2:0f2ff26688b9
-3:0555950ead28 2:0f2ff26688b9 1:5cd961e4045d
-2:0f2ff26688b9 0:2665aaee66e9
-1:5cd961e4045d
-0:2665aaee66e9
-% this should use bar@rev2 as the ancestor
- searching for copies back to rev 1
-resolving manifests
- overwrite None partial False
- ancestor 0f2ff26688b9 local 2263c1be0967+ remote 0555950ead28
- bar: versions differ -> m
-preserving bar for resolve of bar
-updating: bar 1/1 files (100.00%)
-picked tool 'internal:merge' for bar (binary False symlink False)
-merging bar
-my bar@2263c1be0967+ other bar@0555950ead28 ancestor bar@0f2ff26688b9
- premerge successful
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% contents of bar should be line1 line2
-line1
-line2
- rev offset length base linkrev nodeid p1 p2
- 0 0 77 0 2 d35118874825 000000000000 000000000000
- 1 77 76 0 3 5345f5ab8abd 000000000000 d35118874825
- 2 153 7 2 4 ff4b45017382 d35118874825 000000000000
- 3 160 13 3 5 3701b4893544 ff4b45017382 5345f5ab8abd
-
-
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 2 files (+1 heads)
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-merging foo and bar to bar
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% contents of bar should be line0 line1 line2
-line0
-line1
-line2
- rev offset length base linkrev nodeid p1 p2
- 0 0 77 0 2 d35118874825 000000000000 000000000000
- 1 77 76 0 3 5345f5ab8abd 000000000000 d35118874825
-bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
- rev offset length base linkrev nodeid p1 p2
- 0 0 7 0 0 690b295714ae 000000000000 000000000000
- 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-4:2263c1be0967 2:0f2ff26688b9
-3:3ffa6b9e35f0 1:5cd961e4045d 2:0f2ff26688b9
-2:0f2ff26688b9 0:2665aaee66e9
-1:5cd961e4045d
-0:2665aaee66e9
-% this should use bar@rev2 as the ancestor
- searching for copies back to rev 1
-resolving manifests
- overwrite None partial False
- ancestor 0f2ff26688b9 local 2263c1be0967+ remote 3ffa6b9e35f0
- bar: versions differ -> m
-preserving bar for resolve of bar
-updating: bar 1/1 files (100.00%)
-picked tool 'internal:merge' for bar (binary False symlink False)
-merging bar
-my bar@2263c1be0967+ other bar@3ffa6b9e35f0 ancestor bar@0f2ff26688b9
- premerge successful
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% contents of bar should be line1 line2
-line1
-line2
- rev offset length base linkrev nodeid p1 p2
- 0 0 77 0 2 d35118874825 000000000000 000000000000
- 1 77 76 0 3 5345f5ab8abd 000000000000 d35118874825
- 2 153 7 2 4 ff4b45017382 d35118874825 000000000000
- 3 160 13 3 5 3701b4893544 ff4b45017382 5345f5ab8abd
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-commit.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,184 @@
+# Check that renames are correctly saved by a commit after a merge
+
+Test with the merge on 3 having the rename on the local parent
+
+ $ hg init a
+ $ cd a
+
+ $ echo line1 > foo
+ $ hg add foo
+ $ hg ci -m '0: add foo'
+
+ $ echo line2 >> foo
+ $ hg ci -m '1: change foo'
+
+ $ hg up -C 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg mv foo bar
+ $ rm bar
+ $ echo line0 > bar
+ $ echo line1 >> bar
+ $ hg ci -m '2: mv foo bar; change bar'
+ created new head
+
+ $ hg merge 1
+ merging bar and foo to bar
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ cat bar
+ line0
+ line1
+ line2
+
+ $ hg ci -m '3: merge with local rename'
+
+ $ hg debugindex .hg/store/data/bar.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 77 0 2 d35118874825 000000000000 000000000000
+ 1 77 76 0 3 5345f5ab8abd 000000000000 d35118874825
+
+ $ hg debugrename bar
+ bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
+
+ $ hg debugindex .hg/store/data/foo.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 7 0 0 690b295714ae 000000000000 000000000000
+ 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
+
+
+Revert the content change from rev 2:
+
+ $ hg up -C 2
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm bar
+ $ echo line1 > bar
+ $ hg ci -m '4: revert content change from rev 2'
+ created new head
+
+ $ hg log --template '{rev}:{node|short} {parents}\n'
+ 4:2263c1be0967 2:0f2ff26688b9
+ 3:0555950ead28 2:0f2ff26688b9 1:5cd961e4045d
+ 2:0f2ff26688b9 0:2665aaee66e9
+ 1:5cd961e4045d
+ 0:2665aaee66e9
+
+This should use bar@rev2 as the ancestor:
+
+ $ hg --debug merge 3
+ searching for copies back to rev 1
+ resolving manifests
+ overwrite None partial False
+ ancestor 0f2ff26688b9 local 2263c1be0967+ remote 0555950ead28
+ bar: versions differ -> m
+ preserving bar for resolve of bar
+ updating: bar 1/1 files (100.00%)
+ picked tool 'internal:merge' for bar (binary False symlink False)
+ merging bar
+ my bar@2263c1be0967+ other bar@0555950ead28 ancestor bar@0f2ff26688b9
+ premerge successful
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ cat bar
+ line1
+ line2
+
+ $ hg ci -m '5: merge'
+
+ $ hg debugindex .hg/store/data/bar.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 77 0 2 d35118874825 000000000000 000000000000
+ 1 77 76 0 3 5345f5ab8abd 000000000000 d35118874825
+ 2 153 7 2 4 ff4b45017382 d35118874825 000000000000
+ 3 160 13 3 5 3701b4893544 ff4b45017382 5345f5ab8abd
+
+
+Same thing, but with the merge on 3 having the rename
+on the remote parent:
+
+ $ cd ..
+ $ hg clone -U -r 1 -r 2 a b
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 2 files (+1 heads)
+ $ cd b
+
+ $ hg up -C 1
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg merge 2
+ merging foo and bar to bar
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ cat bar
+ line0
+ line1
+ line2
+
+ $ hg ci -m '3: merge with remote rename'
+
+ $ hg debugindex .hg/store/data/bar.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 77 0 2 d35118874825 000000000000 000000000000
+ 1 77 76 0 3 5345f5ab8abd 000000000000 d35118874825
+
+ $ hg debugrename bar
+ bar renamed from foo:9e25c27b87571a1edee5ae4dddee5687746cc8e2
+
+ $ hg debugindex .hg/store/data/foo.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 7 0 0 690b295714ae 000000000000 000000000000
+ 1 7 13 1 1 9e25c27b8757 690b295714ae 000000000000
+
+
+Revert the content change from rev 2:
+
+ $ hg up -C 2
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm bar
+ $ echo line1 > bar
+ $ hg ci -m '4: revert content change from rev 2'
+ created new head
+
+ $ hg log --template '{rev}:{node|short} {parents}\n'
+ 4:2263c1be0967 2:0f2ff26688b9
+ 3:3ffa6b9e35f0 1:5cd961e4045d 2:0f2ff26688b9
+ 2:0f2ff26688b9 0:2665aaee66e9
+ 1:5cd961e4045d
+ 0:2665aaee66e9
+
+This should use bar@rev2 as the ancestor:
+
+ $ hg --debug merge 3
+ searching for copies back to rev 1
+ resolving manifests
+ overwrite None partial False
+ ancestor 0f2ff26688b9 local 2263c1be0967+ remote 3ffa6b9e35f0
+ bar: versions differ -> m
+ preserving bar for resolve of bar
+ updating: bar 1/1 files (100.00%)
+ picked tool 'internal:merge' for bar (binary False symlink False)
+ merging bar
+ my bar@2263c1be0967+ other bar@3ffa6b9e35f0 ancestor bar@0f2ff26688b9
+ premerge successful
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ cat bar
+ line1
+ line2
+
+ $ hg ci -m '5: merge'
+
+ $ hg debugindex .hg/store/data/bar.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 77 0 2 d35118874825 000000000000 000000000000
+ 1 77 76 0 3 5345f5ab8abd 000000000000 d35118874825
+ 2 153 7 2 4 ff4b45017382 d35118874825 000000000000
+ 3 160 13 3 5 3701b4893544 ff4b45017382 5345f5ab8abd
+
--- a/tests/test-merge-default Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-#!/bin/sh
-
-hg init
-echo a > a
-hg commit -A -ma
-
-echo b >> a
-hg commit -mb
-
-echo c >> a
-hg commit -mc
-
-hg up 1
-echo d >> a
-hg commit -md
-
-hg up 1
-echo e >> a
-hg commit -me
-
-hg up 1
-echo % should fail because not at a head
-hg merge
-
-hg up
-echo % should fail because \> 2 heads
-HGMERGE=internal:other; export HGMERGE
-hg merge
-
-echo % should succeed
-hg merge 2
-hg commit -mm1
-
-echo % should succeed - 2 heads
-hg merge -P
-hg merge
-hg commit -mm2
-
-echo % should fail because at tip
-hg merge
-
-hg up 0
-echo % should fail because 1 head
-hg merge
-
-hg up 3
-echo f >> a
-hg branch foobranch
-hg commit -mf
-echo % should fail because merge with other branch
-hg merge
-
-# Test for issue2043: ensure that 'merge -P' shows ancestors of 6 that
-# are not ancestors of 7, regardless of where their least common
-# ancestor is.
-echo % merge preview not affected by common ancestor
-hg up -q 7
-hg merge -q -P 6 # expect: 2, 4, 5, 6
-
-true
--- a/tests/test-merge-default.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-adding a
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% should fail because not at a head
-abort: branch 'default' has 3 heads - please merge with an explicit rev
-(run 'hg heads .' to see heads)
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% should fail because > 2 heads
-abort: branch 'default' has 3 heads - please merge with an explicit rev
-(run 'hg heads .' to see heads)
-% should succeed
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% should succeed - 2 heads
-changeset: 3:ea9ff125ff88
-parent: 1:1846eede8b68
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: d
-
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% should fail because at tip
-abort: there is nothing to merge
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% should fail because 1 head
-abort: there is nothing to merge - use "hg update" instead
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-marked working directory as branch foobranch
-% should fail because merge with other branch
-abort: branch 'foobranch' has one head - please merge with an explicit rev
-(run 'hg heads' to see all heads)
-% merge preview not affected by common ancestor
-2:2d95304fed5d
-4:f25cbe84d8b3
-5:a431fabd6039
-6:e88e33f3bf62
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-default.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,104 @@
+ $ hg init
+ $ echo a > a
+ $ hg commit -A -ma
+ adding a
+
+ $ echo b >> a
+ $ hg commit -mb
+
+ $ echo c >> a
+ $ hg commit -mc
+
+ $ hg up 1
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo d >> a
+ $ hg commit -md
+ created new head
+
+ $ hg up 1
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo e >> a
+ $ hg commit -me
+ created new head
+
+ $ hg up 1
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Should fail because not at a head:
+
+ $ hg merge
+ abort: branch 'default' has 3 heads - please merge with an explicit rev
+ (run 'hg heads .' to see heads)
+
+ $ hg up
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Should fail because > 2 heads:
+
+ $ HGMERGE=internal:other; export HGMERGE
+ $ hg merge
+ abort: branch 'default' has 3 heads - please merge with an explicit rev
+ (run 'hg heads .' to see heads)
+
+Should succeed:
+
+ $ hg merge 2
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg commit -mm1
+
+Should succeed - 2 heads:
+
+ $ hg merge -P
+ changeset: 3:ea9ff125ff88
+ parent: 1:1846eede8b68
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: d
+
+ $ hg merge
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg commit -mm2
+
+Should fail because at tip:
+
+ $ hg merge
+ abort: there is nothing to merge
+
+ $ hg up 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Should fail because there is only one head:
+
+ $ hg merge
+ abort: there is nothing to merge - use "hg update" instead
+
+ $ hg up 3
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ echo f >> a
+ $ hg branch foobranch
+ marked working directory as branch foobranch
+ $ hg commit -mf
+
+Should fail because merge with other branch:
+
+ $ hg merge
+ abort: branch 'foobranch' has one head - please merge with an explicit rev
+ (run 'hg heads' to see all heads)
+
+
+Test for issue2043: ensure that 'merge -P' shows ancestors of 6 that
+are not ancestors of 7, regardless of where their least common
+ancestor is.
+
+Merge preview not affected by common ancestor:
+
+ $ hg up -q 7
+ $ hg merge -q -P 6
+ 2:2d95304fed5d
+ 4:f25cbe84d8b3
+ 5:a431fabd6039
+ 6:e88e33f3bf62
+
--- a/tests/test-merge-force Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-#!/bin/sh
-
-hg init repo
-cd repo
-
-echo a > a
-hg ci -qAm 'add a'
-
-echo b > b
-hg ci -qAm 'add b'
-
-hg up -qC 0
-hg rm a
-hg ci -m 'rm a'
-
-hg up -qC 1
-rm a
-
-echo '% local deleted a file, remote removed'
-hg merge # should fail, since there are deleted files
-hg -v merge --force
-echo % should show a as removed
-hg st
-
-hg ci -m merge
-echo % manifest. should not have a:
-hg manifest
--- a/tests/test-merge-force.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-created new head
-% local deleted a file, remote removed
-abort: outstanding uncommitted changes (use 'hg status' to list changes)
-resolving manifests
-removing a
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% should show a as removed
-R a
-% manifest. should not have a:
-b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-force.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,43 @@
+ $ hg init
+
+ $ echo a > a
+ $ hg ci -qAm 'add a'
+
+ $ echo b > b
+ $ hg ci -qAm 'add b'
+
+ $ hg up -qC 0
+ $ hg rm a
+ $ hg ci -m 'rm a'
+ created new head
+
+ $ hg up -qC 1
+ $ rm a
+
+Local deleted a file, remote removed
+
+Should fail, since there are deleted files:
+
+ $ hg merge
+ abort: outstanding uncommitted changes (use 'hg status' to list changes)
+
+Should succeed with --force:
+
+ $ hg -v merge --force
+ resolving manifests
+ removing a
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+Should show 'a' as removed:
+
+ $ hg status
+ R a
+
+ $ hg ci -m merge
+
+Should not show 'a':
+
+ $ hg manifest
+ b
+
--- a/tests/test-merge-internal-tools-pattern Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-#!/bin/sh
-
-# make sure that the internal merge tools (internal:fail, internal:local, and
-# internal:other) are used when matched by a merge-pattern in hgrc
-
-unset HGMERGE # make sure HGMERGE doesn't interfere with the test
-
-hg init
-
-echo "# initial file contents"
-echo "line 1" > f
-echo "line 2" >> f
-echo "line 3" >> f
-hg commit -Am "revision 0"
-cat f
-echo "# branch 1: editing line 1"
-sed 's/line 1/first line/' f > f.new
-mv f.new f
-hg commit -Am "edited first line"
-
-echo "# branch 2: editing line 3"
-hg update 0
-sed 's/line 3/third line/' f > f.new
-mv f.new f
-hg commit -Am "edited third line"
-
-echo "# merge using internal:fail tool"
-echo "[merge-patterns]" > .hg/hgrc
-echo "* = internal:fail" >> .hg/hgrc
-hg merge
-cat f
-hg stat
-
-echo "# merge using internal:local tool"
-hg update -C 2
-sed 's/internal:fail/internal:local/' .hg/hgrc > .hg/hgrc.new
-mv .hg/hgrc.new .hg/hgrc
-hg merge
-cat f
-hg stat
-
-echo "# merge using internal:other tool"
-hg update -C 2
-sed 's/internal:local/internal:other/' .hg/hgrc > .hg/hgrc.new
-mv .hg/hgrc.new .hg/hgrc
-hg merge
-cat f
-hg stat
-
-echo "# merge using default tool"
-hg update -C 2
-rm .hg/hgrc
-hg merge
-cat f
-hg stat
-
--- a/tests/test-merge-internal-tools-pattern.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-# initial file contents
-adding f
-line 1
-line 2
-line 3
-# branch 1: editing line 1
-# branch 2: editing line 3
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-# merge using internal:fail tool
-0 files updated, 0 files merged, 0 files removed, 1 files unresolved
-use 'hg resolve' to retry unresolved file merges or 'hg update -C' to abandon
-line 1
-line 2
-third line
-M f
-# merge using internal:local tool
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-line 1
-line 2
-third line
-M f
-# merge using internal:other tool
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-first line
-line 2
-line 3
-M f
-# merge using default tool
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-merging f
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-first line
-line 2
-third line
-M f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-internal-tools-pattern.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,111 @@
+# Make sure that the internal merge tools (internal:fail, internal:local, and
+# internal:other) are used when matched by a merge-pattern in hgrc
+
+Make sure HGMERGE doesn't interfere with the test:
+
+ $ unset HGMERGE
+
+ $ hg init
+
+Initial file contents:
+
+ $ echo "line 1" > f
+ $ echo "line 2" >> f
+ $ echo "line 3" >> f
+ $ hg ci -Am "revision 0"
+ adding f
+
+ $ cat f
+ line 1
+ line 2
+ line 3
+
+Branch 1: editing line 1:
+
+ $ sed 's/line 1/first line/' f > f.new
+ $ mv f.new f
+ $ hg ci -Am "edited first line"
+
+Branch 2: editing line 3:
+
+ $ hg update 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ sed 's/line 3/third line/' f > f.new
+ $ mv f.new f
+ $ hg ci -Am "edited third line"
+ created new head
+
+Merge using internal:fail tool:
+
+ $ echo "[merge-patterns]" > .hg/hgrc
+ $ echo "* = internal:fail" >> .hg/hgrc
+
+ $ hg merge
+ 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+ use 'hg resolve' to retry unresolved file merges or 'hg update -C' to abandon
+
+ $ cat f
+ line 1
+ line 2
+ third line
+
+ $ hg stat
+ M f
+
+Merge using internal:local tool:
+
+ $ hg update -C 2
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ sed 's/internal:fail/internal:local/' .hg/hgrc > .hg/hgrc.new
+ $ mv .hg/hgrc.new .hg/hgrc
+
+ $ hg merge
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ cat f
+ line 1
+ line 2
+ third line
+
+ $ hg stat
+ M f
+
+Merge using internal:other tool:
+
+ $ hg update -C 2
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ sed 's/internal:local/internal:other/' .hg/hgrc > .hg/hgrc.new
+ $ mv .hg/hgrc.new .hg/hgrc
+
+ $ hg merge
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ cat f
+ first line
+ line 2
+ line 3
+
+ $ hg stat
+ M f
+
+Merge using default tool:
+
+ $ hg update -C 2
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm .hg/hgrc
+
+ $ hg merge
+ merging f
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ cat f
+ first line
+ line 2
+ third line
+
+ $ hg stat
+ M f
+
--- a/tests/test-merge-local Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-#!/bin/sh
-
-hg init
-
-echo "# revision 0"
-echo "unchanged" > unchanged
-echo "remove me" > remove
-echo "copy me" > copy
-echo "move me" > move
-for i in 1 2 3 4 5 6 7 8 9; do
- echo "merge ok $i" >> zzz1_merge_ok
-done
-echo "merge bad" > zzz2_merge_bad
-hg ci -Am "revision 0"
-
-echo "# revision 1"
-hg rm remove
-hg mv move moved
-hg cp copy copied
-echo "added" > added
-hg add added
-echo "new first line" > zzz1_merge_ok
-hg cat zzz1_merge_ok >> zzz1_merge_ok
-echo "new last line" >> zzz2_merge_bad
-hg ci -m "revision 1"
-
-echo "# local changes to revision 0"
-hg co 0
-echo "new last line" >> zzz1_merge_ok
-echo "another last line" >> zzz2_merge_bad
-hg diff --nodates | grep "^[+-][^<>]"
-hg st
-
-echo "# local merge with bad merge tool"
-HGMERGE=false hg co
-hg co 0
-hg diff --nodates | grep "^[+-][^<>]"
-hg st
-
-echo "# local merge with conflicts"
-hg co
-hg co 0
-hg diff --nodates | grep "^[+-][^<>]"
-hg st
-
-echo "# local merge without conflicts"
-hg revert zzz2_merge_bad
-hg co
-hg diff --nodates | grep "^[+-][^<>]"
-hg st
--- a/tests/test-merge-local.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-# revision 0
-adding copy
-adding move
-adding remove
-adding unchanged
-adding zzz1_merge_ok
-adding zzz2_merge_bad
-# revision 1
-# local changes to revision 0
-4 files updated, 0 files merged, 3 files removed, 0 files unresolved
---- a/zzz1_merge_ok
-+++ b/zzz1_merge_ok
-+new last line
---- a/zzz2_merge_bad
-+++ b/zzz2_merge_bad
-+another last line
-M zzz1_merge_ok
-M zzz2_merge_bad
-# local merge with bad merge tool
-merging zzz1_merge_ok
-merging zzz2_merge_bad
-merging zzz2_merge_bad failed!
-3 files updated, 1 files merged, 2 files removed, 1 files unresolved
-use 'hg resolve' to retry unresolved file merges
-merging zzz1_merge_ok
-merging zzz2_merge_bad
-warning: conflicts during merge.
-merging zzz2_merge_bad failed!
-2 files updated, 1 files merged, 3 files removed, 1 files unresolved
-use 'hg resolve' to retry unresolved file merges
---- a/zzz1_merge_ok
-+++ b/zzz1_merge_ok
-+new last line
---- a/zzz2_merge_bad
-+++ b/zzz2_merge_bad
-+another last line
-+=======
-M zzz1_merge_ok
-M zzz2_merge_bad
-? zzz2_merge_bad.orig
-# local merge with conflicts
-merging zzz1_merge_ok
-merging zzz2_merge_bad
-warning: conflicts during merge.
-merging zzz2_merge_bad failed!
-3 files updated, 1 files merged, 2 files removed, 1 files unresolved
-use 'hg resolve' to retry unresolved file merges
-merging zzz1_merge_ok
-merging zzz2_merge_bad
-warning: conflicts during merge.
-merging zzz2_merge_bad failed!
-2 files updated, 1 files merged, 3 files removed, 1 files unresolved
-use 'hg resolve' to retry unresolved file merges
---- a/zzz1_merge_ok
-+++ b/zzz1_merge_ok
-+new last line
---- a/zzz2_merge_bad
-+++ b/zzz2_merge_bad
-+another last line
-+=======
-+=======
-+new last line
-+=======
-M zzz1_merge_ok
-M zzz2_merge_bad
-? zzz2_merge_bad.orig
-# local merge without conflicts
-merging zzz1_merge_ok
-4 files updated, 1 files merged, 2 files removed, 0 files unresolved
---- a/zzz1_merge_ok
-+++ b/zzz1_merge_ok
-+new last line
-M zzz1_merge_ok
-? zzz2_merge_bad.orig
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-local.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,134 @@
+ $ hg init
+
+Revision 0:
+
+ $ echo "unchanged" > unchanged
+ $ echo "remove me" > remove
+ $ echo "copy me" > copy
+ $ echo "move me" > move
+ $ for i in 1 2 3 4 5 6 7 8 9; do
+ > echo "merge ok $i" >> zzz1_merge_ok
+ > done
+ $ echo "merge bad" > zzz2_merge_bad
+ $ hg ci -Am "revision 0"
+ adding copy
+ adding move
+ adding remove
+ adding unchanged
+ adding zzz1_merge_ok
+ adding zzz2_merge_bad
+
+Revision 1:
+
+ $ hg rm remove
+ $ hg mv move moved
+ $ hg cp copy copied
+ $ echo "added" > added
+ $ hg add added
+ $ echo "new first line" > zzz1_merge_ok
+ $ hg cat zzz1_merge_ok >> zzz1_merge_ok
+ $ echo "new last line" >> zzz2_merge_bad
+ $ hg ci -m "revision 1"
+
+Local changes to revision 0:
+
+ $ hg co 0
+ 4 files updated, 0 files merged, 3 files removed, 0 files unresolved
+ $ echo "new last line" >> zzz1_merge_ok
+ $ echo "another last line" >> zzz2_merge_bad
+
+ $ hg diff --nodates | grep "^[+-][^<>]"
+ --- a/zzz1_merge_ok
+ +++ b/zzz1_merge_ok
+ +new last line
+ --- a/zzz2_merge_bad
+ +++ b/zzz2_merge_bad
+ +another last line
+
+ $ hg st
+ M zzz1_merge_ok
+ M zzz2_merge_bad
+
+Local merge with bad merge tool:
+
+ $ HGMERGE=false hg co
+ merging zzz1_merge_ok
+ merging zzz2_merge_bad
+ merging zzz2_merge_bad failed!
+ 3 files updated, 1 files merged, 2 files removed, 1 files unresolved
+ use 'hg resolve' to retry unresolved file merges
+
+ $ hg co 0
+ merging zzz1_merge_ok
+ merging zzz2_merge_bad
+ warning: conflicts during merge.
+ merging zzz2_merge_bad failed!
+ 2 files updated, 1 files merged, 3 files removed, 1 files unresolved
+ use 'hg resolve' to retry unresolved file merges
+
+ $ hg diff --nodates | grep "^[+-][^<>]"
+ --- a/zzz1_merge_ok
+ +++ b/zzz1_merge_ok
+ +new last line
+ --- a/zzz2_merge_bad
+ +++ b/zzz2_merge_bad
+ +another last line
+ +=======
+
+ $ hg st
+ M zzz1_merge_ok
+ M zzz2_merge_bad
+ ? zzz2_merge_bad.orig
+
+Local merge with conflicts:
+
+ $ hg co
+ merging zzz1_merge_ok
+ merging zzz2_merge_bad
+ warning: conflicts during merge.
+ merging zzz2_merge_bad failed!
+ 3 files updated, 1 files merged, 2 files removed, 1 files unresolved
+ use 'hg resolve' to retry unresolved file merges
+
+ $ hg co 0
+ merging zzz1_merge_ok
+ merging zzz2_merge_bad
+ warning: conflicts during merge.
+ merging zzz2_merge_bad failed!
+ 2 files updated, 1 files merged, 3 files removed, 1 files unresolved
+ use 'hg resolve' to retry unresolved file merges
+
+ $ hg diff --nodates | grep "^[+-][^<>]"
+ --- a/zzz1_merge_ok
+ +++ b/zzz1_merge_ok
+ +new last line
+ --- a/zzz2_merge_bad
+ +++ b/zzz2_merge_bad
+ +another last line
+ +=======
+ +=======
+ +new last line
+ +=======
+
+ $ hg st
+ M zzz1_merge_ok
+ M zzz2_merge_bad
+ ? zzz2_merge_bad.orig
+
+Local merge without conflicts:
+
+ $ hg revert zzz2_merge_bad
+
+ $ hg co
+ merging zzz1_merge_ok
+ 4 files updated, 1 files merged, 2 files removed, 0 files unresolved
+
+ $ hg diff --nodates | grep "^[+-][^<>]"
+ --- a/zzz1_merge_ok
+ +++ b/zzz1_merge_ok
+ +new last line
+
+ $ hg st
+ M zzz1_merge_ok
+ ? zzz2_merge_bad.orig
+
--- a/tests/test-merge-prompt Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-#!/bin/sh
-#
-# Test for b5605d88dc27
-# Make ui.prompt repeat on "unrecognized response" again (issue897)
-# and for 840e2b315c1f
-# Fix misleading error and prompts during update/merge (issue556)
-
-status() {
- [ $? -ne 0 ] && echo "failed."
- echo "status:"
- hg st -A file1 file2
- for file in file1 file2; do
- if [ -f $file ]; then
- echo "$file:"
- cat $file
- else
- echo "$file does not exist"
- fi
- done
-}
-
-hg init repo
-cd repo
-echo 1 > file1
-echo 2 > file2
-hg ci -Am 'added file1 and file2' # rev 0
-
-hg rm file1
-echo changed >> file2
-hg ci -m 'removed file1, changed file2' # rev 1
-
-hg co 0
-echo changed >> file1
-hg rm file2
-hg ci -m 'changed file1, removed file2' # rev 2
-
-echo
-echo "# non-interactive merge"
-hg merge -y || echo "failed"
-status
-
-echo
-echo "# interactive merge"
-hg co -C
-hg merge --config ui.interactive=true <<EOF || echo "failed"
-c
-d
-EOF
-status
-
-echo
-echo "# interactive merge with bad input"
-hg co -C
-hg merge --config ui.interactive=true <<EOF || echo "failed"
-foo
-bar
-d
-baz
-c
-EOF
-status
-
-echo
-echo "# interactive merge with not enough input"
-hg co -C
-hg merge --config ui.interactive=true <<EOF || echo "failed"
-d
-EOF
-status
--- a/tests/test-merge-prompt.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-adding file1
-adding file2
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-
-# non-interactive merge
- local changed file1 which remote deleted
-use (c)hanged version or (d)elete? c
-remote changed file2 which local deleted
-use (c)hanged version or leave (d)eleted? c
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-status:
-M file2
-C file1
-file1:
-1
-changed
-file2:
-2
-changed
-
-# interactive merge
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
- local changed file1 which remote deleted
-use (c)hanged version or (d)elete? remote changed file2 which local deleted
-use (c)hanged version or leave (d)eleted? 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-status:
-file2: No such file or directory
-C file1
-file1:
-1
-changed
-file2 does not exist
-
-# interactive merge with bad input
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
- local changed file1 which remote deleted
-use (c)hanged version or (d)elete? unrecognized response
- local changed file1 which remote deleted
-use (c)hanged version or (d)elete? unrecognized response
- local changed file1 which remote deleted
-use (c)hanged version or (d)elete? remote changed file2 which local deleted
-use (c)hanged version or leave (d)eleted? unrecognized response
-remote changed file2 which local deleted
-use (c)hanged version or leave (d)eleted? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-status:
-M file2
-R file1
-file1 does not exist
-file2:
-2
-changed
-
-# interactive merge with not enough input
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
- local changed file1 which remote deleted
-use (c)hanged version or (d)elete? remote changed file2 which local deleted
-use (c)hanged version or leave (d)eleted? abort: response expected
-failed
-status:
-file2: No such file or directory
-C file1
-file1:
-1
-changed
-file2 does not exist
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-prompt.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,144 @@
+# Test for
+#
+# b5605d88dc27: Make ui.prompt repeat on "unrecognized response" again
+# (issue897)
+#
+# 840e2b315c1f: Fix misleading error and prompts during update/merge
+# (issue556)
+
+ $ status() {
+ > [ $? -ne 0 ] && echo "failed."
+ > echo "--- status ---"
+ > hg st -A file1 file2
+ > for file in file1 file2; do
+ > if [ -f $file ]; then
+ > echo "--- $file ---"
+ > cat $file
+ > else
+ > echo "*** $file does not exist"
+ > fi
+ > done
+ > }
+
+ $ hg init
+
+ $ echo 1 > file1
+ $ echo 2 > file2
+ $ hg ci -Am 'added file1 and file2'
+ adding file1
+ adding file2
+
+ $ hg rm file1
+ $ echo changed >> file2
+ $ hg ci -m 'removed file1, changed file2'
+
+ $ hg co 0
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ echo changed >> file1
+ $ hg rm file2
+ $ hg ci -m 'changed file1, removed file2'
+ created new head
+
+
+Non-interactive merge:
+
+ $ hg merge -y || echo "failed"
+ local changed file1 which remote deleted
+ use (c)hanged version or (d)elete? c
+ remote changed file2 which local deleted
+ use (c)hanged version or leave (d)eleted? c
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ status
+ --- status ---
+ M file2
+ C file1
+ --- file1 ---
+ 1
+ changed
+ --- file2 ---
+ 2
+ changed
+
+
+Interactive merge:
+
+ $ hg co -C
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+ $ hg merge --config ui.interactive=true <<EOF || echo "failed"
+ > c
+ > d
+ > EOF
+ local changed file1 which remote deleted
+ use (c)hanged version or (d)elete? remote changed file2 which local deleted
+ use (c)hanged version or leave (d)eleted? 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ status
+ --- status ---
+ file2: No such file or directory
+ C file1
+ --- file1 ---
+ 1
+ changed
+ *** file2 does not exist
+
+
+Interactive merge with bad input:
+
+ $ hg co -C
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg merge --config ui.interactive=true <<EOF || echo "failed"
+ > foo
+ > bar
+ > d
+ > baz
+ > c
+ > EOF
+ local changed file1 which remote deleted
+ use (c)hanged version or (d)elete? unrecognized response
+ local changed file1 which remote deleted
+ use (c)hanged version or (d)elete? unrecognized response
+ local changed file1 which remote deleted
+ use (c)hanged version or (d)elete? remote changed file2 which local deleted
+ use (c)hanged version or leave (d)eleted? unrecognized response
+ remote changed file2 which local deleted
+ use (c)hanged version or leave (d)eleted? 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ status
+ --- status ---
+ M file2
+ R file1
+ *** file1 does not exist
+ --- file2 ---
+ 2
+ changed
+
+
+Interactive merge with not enough input:
+
+ $ hg co -C
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+ $ hg merge --config ui.interactive=true <<EOF || echo "failed"
+ > d
+ > EOF
+ local changed file1 which remote deleted
+ use (c)hanged version or (d)elete? remote changed file2 which local deleted
+ use (c)hanged version or leave (d)eleted? abort: response expected
+ failed
+
+ $ status
+ --- status ---
+ file2: No such file or directory
+ C file1
+ --- file1 ---
+ 1
+ changed
+ *** file2 does not exist
+
--- a/tests/test-merge-remove Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#!/bin/sh
-
-hg init repo
-cd repo
-
-echo foo > foo
-echo bar > bar
-hg ci -qAm 'add foo bar'
-
-echo foo2 >> foo
-echo bleh > bar
-hg ci -m 'change foo bar'
-
-hg up -qC 0
-hg mv foo foo1
-echo foo1 > foo1
-hg cat foo >> foo1
-hg ci -m 'mv foo foo1'
-
-hg merge
-hg debugstate --nodates
-hg st -q
-
-echo '% removing foo1 and bar'
-cp foo1 F
-cp bar B
-hg rm -f foo1 bar
-hg debugstate --nodates
-hg st -qC
-
-echo '% readding foo1 and bar'
-cp F foo1
-cp B bar
-hg add -v foo1 bar
-hg debugstate --nodates
-hg st -qC
-
-echo '% reverting foo1 and bar'
-hg revert -vr . foo1 bar
-hg debugstate --nodates
-hg st -qC
-hg diff
-
--- a/tests/test-merge-remove.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-created new head
-merging foo1 and foo to foo1
-1 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-n 0 -2 bar
-m 644 14 foo1
-copy: foo -> foo1
-M bar
-M foo1
-% removing foo1 and bar
-r 0 -2 bar
-r 0 -1 foo1
-copy: foo -> foo1
-R bar
-R foo1
-% readding foo1 and bar
-adding bar
-adding foo1
-n 0 -2 bar
-m 644 14 foo1
-copy: foo -> foo1
-M bar
-M foo1
- foo
-% reverting foo1 and bar
-saving current version of bar as bar.orig
-reverting bar
-saving current version of foo1 as foo1.orig
-reverting foo1
-n 0 -2 bar
-m 644 14 foo1
-copy: foo -> foo1
-M bar
-M foo1
- foo
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-remove.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,87 @@
+ $ hg init
+
+ $ echo foo > foo
+ $ echo bar > bar
+ $ hg ci -qAm 'add foo bar'
+
+ $ echo foo2 >> foo
+ $ echo bleh > bar
+ $ hg ci -m 'change foo bar'
+
+ $ hg up -qC 0
+ $ hg mv foo foo1
+ $ echo foo1 > foo1
+ $ hg cat foo >> foo1
+ $ hg ci -m 'mv foo foo1'
+ created new head
+
+ $ hg merge
+ merging foo1 and foo to foo1
+ 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg debugstate --nodates
+ n 0 -2 bar
+ m 644 14 foo1
+ copy: foo -> foo1
+
+ $ hg st -q
+ M bar
+ M foo1
+
+
+Removing foo1 and bar:
+
+ $ cp foo1 F
+ $ cp bar B
+ $ hg rm -f foo1 bar
+
+ $ hg debugstate --nodates
+ r 0 -2 bar
+ r 0 -1 foo1
+ copy: foo -> foo1
+
+ $ hg st -qC
+ R bar
+ R foo1
+
+
+Re-adding foo1 and bar:
+
+ $ cp F foo1
+ $ cp B bar
+ $ hg add -v foo1 bar
+ adding bar
+ adding foo1
+
+ $ hg debugstate --nodates
+ n 0 -2 bar
+ m 644 14 foo1
+ copy: foo -> foo1
+
+ $ hg st -qC
+ M bar
+ M foo1
+ foo
+
+
+Reverting foo1 and bar:
+
+ $ hg revert -vr . foo1 bar
+ saving current version of bar as bar.orig
+ reverting bar
+ saving current version of foo1 as foo1.orig
+ reverting foo1
+
+ $ hg debugstate --nodates
+ n 0 -2 bar
+ m 644 14 foo1
+ copy: foo -> foo1
+
+ $ hg st -qC
+ M bar
+ M foo1
+ foo
+
+ $ hg diff
+
--- a/tests/test-merge-revert Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-#!/bin/sh
-
-mkdir t
-cd t
-hg init
-echo "added file1" > file1
-echo "added file2" > file2
-hg add file1 file2
-hg commit -m "added file1 and file2"
-echo "changed file1" >> file1
-hg commit -m "changed file1"
-hg -q log
-hg id
-hg update -C 0
-hg id
-echo "changed file1" >> file1
-hg id
-hg revert --all
-hg diff
-hg status
-hg id
-hg update
-hg diff
-hg status
-hg id
-hg update -C 0
-echo "changed file1" >> file1
-hg update
-hg diff
-hg status
-hg id
-hg revert --all
-hg diff
-hg status
-hg id
-hg revert -r tip --all
-hg diff
-hg status
-hg id
-hg update -C
-hg diff
-hg status
-hg id
-
--- a/tests/test-merge-revert.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-1:08a16e8e4408
-0:d29c767a4b52
-08a16e8e4408 tip
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-d29c767a4b52
-d29c767a4b52+
-reverting file1
-? file1.orig
-d29c767a4b52
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-? file1.orig
-08a16e8e4408 tip
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-? file1.orig
-08a16e8e4408 tip
-? file1.orig
-08a16e8e4408 tip
-? file1.orig
-08a16e8e4408 tip
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-? file1.orig
-08a16e8e4408 tip
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-revert.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,74 @@
+ $ hg init
+
+ $ echo "added file1" > file1
+ $ echo "added file2" > file2
+ $ hg add file1 file2
+ $ hg commit -m "added file1 and file2"
+
+ $ echo "changed file1" >> file1
+ $ hg commit -m "changed file1"
+
+ $ hg -q log
+ 1:08a16e8e4408
+ 0:d29c767a4b52
+ $ hg id
+ 08a16e8e4408 tip
+
+ $ hg update -C 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg id
+ d29c767a4b52
+ $ echo "changed file1" >> file1
+ $ hg id
+ d29c767a4b52+
+
+ $ hg revert --all
+ reverting file1
+ $ hg diff
+ $ hg status
+ ? file1.orig
+ $ hg id
+ d29c767a4b52
+
+ $ hg update
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg diff
+ $ hg status
+ ? file1.orig
+ $ hg id
+ 08a16e8e4408 tip
+
+ $ hg update -C 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo "changed file1" >> file1
+
+ $ hg update
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg diff
+ $ hg status
+ ? file1.orig
+ $ hg id
+ 08a16e8e4408 tip
+
+ $ hg revert --all
+ $ hg diff
+ $ hg status
+ ? file1.orig
+ $ hg id
+ 08a16e8e4408 tip
+
+ $ hg revert -r tip --all
+ $ hg diff
+ $ hg status
+ ? file1.orig
+ $ hg id
+ 08a16e8e4408 tip
+
+ $ hg update -C
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg diff
+ $ hg status
+ ? file1.orig
+ $ hg id
+ 08a16e8e4408 tip
+
--- a/tests/test-merge-revert2 Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#!/bin/sh
-
-mkdir t
-cd t
-hg init
-echo "added file1" > file1
-echo "another line of text" >> file1
-echo "added file2" > file2
-hg add file1 file2
-hg commit -m "added file1 and file2"
-echo "changed file1" >> file1
-hg commit -m "changed file1"
-hg -q log
-hg id
-hg update -C 0
-hg id
-echo "changed file1" >> file1
-hg id
-hg revert --no-backup --all
-hg diff
-hg status
-hg id
-hg update
-hg diff
-hg status
-hg id
-hg update -C 0
-echo "changed file1 different" >> file1
-hg update
-hg diff --nodates
-hg status
-hg id
-hg revert --no-backup --all
-hg diff
-hg status
-hg id
-hg revert -r tip --no-backup --all
-hg diff
-hg status
-hg id
-hg update -C
-hg diff
-hg status
-hg id
-
--- a/tests/test-merge-revert2.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-1:dfab7f3c2efb
-0:c3fa057dd86f
-dfab7f3c2efb tip
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-c3fa057dd86f
-c3fa057dd86f+
-reverting file1
-c3fa057dd86f
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-dfab7f3c2efb tip
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-merging file1
-warning: conflicts during merge.
-merging file1 failed!
-0 files updated, 0 files merged, 0 files removed, 1 files unresolved
-use 'hg resolve' to retry unresolved file merges
-diff -r dfab7f3c2efb file1
---- a/file1
-+++ b/file1
-@@ -1,3 +1,7 @@
- added file1
- another line of text
-+<<<<<<< local
-+changed file1 different
-+=======
- changed file1
-+>>>>>>> other
-M file1
-? file1.orig
-dfab7f3c2efb+ tip
-reverting file1
-? file1.orig
-dfab7f3c2efb tip
-? file1.orig
-dfab7f3c2efb tip
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-? file1.orig
-dfab7f3c2efb tip
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-revert2.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,93 @@
+ $ hg init
+
+ $ echo "added file1" > file1
+ $ echo "another line of text" >> file1
+ $ echo "added file2" > file2
+ $ hg add file1 file2
+ $ hg commit -m "added file1 and file2"
+
+ $ echo "changed file1" >> file1
+ $ hg commit -m "changed file1"
+
+ $ hg -q log
+ 1:dfab7f3c2efb
+ 0:c3fa057dd86f
+ $ hg id
+ dfab7f3c2efb tip
+
+ $ hg update -C 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg id
+ c3fa057dd86f
+
+ $ echo "changed file1" >> file1
+ $ hg id
+ c3fa057dd86f+
+
+ $ hg revert --no-backup --all
+ reverting file1
+ $ hg diff
+ $ hg status
+ $ hg id
+ c3fa057dd86f
+
+ $ hg update
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg diff
+ $ hg status
+ $ hg id
+ dfab7f3c2efb tip
+
+ $ hg update -C 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo "changed file1 different" >> file1
+
+ $ hg update
+ merging file1
+ warning: conflicts during merge.
+ merging file1 failed!
+ 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+ use 'hg resolve' to retry unresolved file merges
+
+ $ hg diff --nodates
+ diff -r dfab7f3c2efb file1
+ --- a/file1
+ +++ b/file1
+ @@ -1,3 +1,7 @@
+ added file1
+ another line of text
+ +<<<<<<< local
+ +changed file1 different
+ +=======
+ changed file1
+ +>>>>>>> other
+
+ $ hg status
+ M file1
+ ? file1.orig
+ $ hg id
+ dfab7f3c2efb+ tip
+
+ $ hg revert --no-backup --all
+ reverting file1
+ $ hg diff
+ $ hg status
+ ? file1.orig
+ $ hg id
+ dfab7f3c2efb tip
+
+ $ hg revert -r tip --no-backup --all
+ $ hg diff
+ $ hg status
+ ? file1.orig
+ $ hg id
+ dfab7f3c2efb tip
+
+ $ hg update -C
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg diff
+ $ hg status
+ ? file1.orig
+ $ hg id
+ dfab7f3c2efb tip
+
--- a/tests/test-merge-types Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-#!/bin/sh
-
-hg init
-echo a > a
-hg ci -Amadd # 0
-
-chmod +x a
-hg ci -mexecutable # 1
-
-hg up 0
-rm a
-ln -s symlink a
-hg ci -msymlink # 2
-hg merge --debug
-
-echo % symlink is local parent, executable is other
-
-if [ -h a ]; then
- echo a is a symlink
- $TESTDIR/readlink.py a
-elif [ -x a ]; then
- echo a is executable
-else
- echo "a has no flags (default for conflicts)"
-fi
-
-hg update -C 1
-hg merge --debug
-
-echo % symlink is other parent, executable is local
-
-if [ -h a ]; then
- echo a is a symlink
- $TESTDIR/readlink.py a
-elif [ -x a ]; then
- echo a is executable
-else
- echo "a has no flags (default for conflicts)"
-fi
--- a/tests/test-merge-types.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-adding a
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
- searching for copies back to rev 1
-resolving manifests
- overwrite None partial False
- ancestor c334dc3be0da local 521a1e40188f+ remote 3574f3e69b1c
- conflicting flags for a
-(n)one, e(x)ec or sym(l)ink? n
- a: update permissions -> e
-updating: a 1/1 files (100.00%)
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% symlink is local parent, executable is other
-a has no flags (default for conflicts)
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
- searching for copies back to rev 1
-resolving manifests
- overwrite None partial False
- ancestor c334dc3be0da local 3574f3e69b1c+ remote 521a1e40188f
- conflicting flags for a
-(n)one, e(x)ec or sym(l)ink? n
- a: remote is newer -> g
-updating: a 1/1 files (100.00%)
-getting a
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% symlink is other parent, executable is local
-a has no flags (default for conflicts)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-types.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,70 @@
+ $ hg init
+
+ $ echo a > a
+ $ hg ci -Amadd
+ adding a
+
+ $ chmod +x a
+ $ hg ci -mexecutable
+
+ $ hg up 0
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ rm a
+ $ ln -s symlink a
+ $ hg ci -msymlink
+ created new head
+
+ $ hg merge --debug
+ searching for copies back to rev 1
+ resolving manifests
+ overwrite None partial False
+ ancestor c334dc3be0da local 521a1e40188f+ remote 3574f3e69b1c
+ conflicting flags for a
+ (n)one, e(x)ec or sym(l)ink? n
+ a: update permissions -> e
+ updating: a 1/1 files (100.00%)
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+
+Symlink is local parent, executable is other:
+
+ $ if [ -h a ]; then
+ > echo a is a symlink
+ > $TESTDIR/readlink.py a
+ > elif [ -x a ]; then
+ > echo a is executable
+ > else
+ > echo "a has no flags (default for conflicts)"
+ > fi
+ a has no flags (default for conflicts)
+
+ $ hg update -C 1
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg merge --debug
+ searching for copies back to rev 1
+ resolving manifests
+ overwrite None partial False
+ ancestor c334dc3be0da local 3574f3e69b1c+ remote 521a1e40188f
+ conflicting flags for a
+ (n)one, e(x)ec or sym(l)ink? n
+ a: remote is newer -> g
+ updating: a 1/1 files (100.00%)
+ getting a
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+
+Symlink is other parent, executable is local:
+
+ $ if [ -h a ]; then
+ > echo a is a symlink
+ > $TESTDIR/readlink.py a
+ > elif [ -x a ]; then
+ > echo a is executable
+ > else
+ > echo "a has no flags (default for conflicts)"
+ > fi
+ a has no flags (default for conflicts)
+
--- a/tests/test-nested-repo Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-#!/bin/sh
-
-hg init a
-cd a
-hg init b
-echo x > b/x
-
-echo '# should print nothing'
-hg add b
-hg st
-
-echo '# should fail'
-hg st b/x
-hg add b/x
-
-echo '# should fail'
-hg add b b/x
-hg st
-
-echo '# should arguably print nothing'
-hg st b
-
-echo a > a
-hg ci -Ama a
-
-echo '# should fail'
-hg mv a b
-hg st
--- a/tests/test-nested-repo.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-# should print nothing
-# should fail
-abort: path 'b/x' is inside repo 'b'
-abort: path 'b/x' is inside repo 'b'
-# should fail
-abort: path 'b/x' is inside repo 'b'
-# should arguably print nothing
-# should fail
-abort: path 'b/a' is inside repo 'b'
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-nested-repo.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,36 @@
+ $ hg init a
+ $ cd a
+ $ hg init b
+ $ echo x > b/x
+
+Should print nothing:
+
+ $ hg add b
+ $ hg st
+
+Should fail:
+
+ $ hg st b/x
+ abort: path 'b/x' is inside repo 'b'
+ $ hg add b/x
+ abort: path 'b/x' is inside repo 'b'
+
+Should fail:
+
+ $ hg add b b/x
+ abort: path 'b/x' is inside repo 'b'
+ $ hg st
+
+Should arguably print nothing:
+
+ $ hg st b
+
+ $ echo a > a
+ $ hg ci -Ama a
+
+Should fail:
+
+ $ hg mv a b
+ abort: path 'b/a' is inside repo 'b'
+ $ hg st
+
--- a/tests/test-newbranch Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-#!/bin/sh
-
-branchcache=.hg/branchheads.cache
-
-hg init t
-cd t
-hg branches
-
-echo foo > a
-hg add a
-hg ci -m "initial"
-hg branch foo
-hg branch
-hg ci -m "add branch name"
-hg branch bar
-hg ci -m "change branch name"
-echo % branch shadowing
-hg branch default
-hg branch -f default
-hg ci -m "clear branch name"
-
-echo % there should be only one default branch head
-hg heads .
-
-hg co foo
-hg branch
-echo bleah > a
-hg ci -m "modify a branch"
-
-hg merge default
-hg branch
-hg ci -m "merge"
-hg log
-
-hg branches
-hg branches -q
-
-echo % test for invalid branch cache
-hg rollback
-cp $branchcache .hg/bc-invalid
-hg log -r foo
-cp .hg/bc-invalid $branchcache
-hg --debug log -r foo
-rm $branchcache
-echo corrupted > $branchcache
-hg log -qr foo
-cat $branchcache
-
-echo % push should update the branch cache
-hg init ../target
-echo % pushing just rev 0
-hg push -qr 0 ../target
-cat ../target/$branchcache
-echo % pushing everything
-hg push -qf ../target
-cat ../target/$branchcache
-
-echo % update with no arguments: tipmost revision of the current branch
-hg up -q -C 0
-hg up -q
-hg id
-hg up -q 1
-hg up -q
-hg id
-hg branch foobar
-hg up
-
-echo % fastforward merge
-hg branch ff
-echo ff > ff
-hg ci -Am'fast forward'
-hg up foo
-hg merge ff
-hg branch
-hg commit -m'Merge ff into foo'
-hg parents
-hg manifest
-
-echo % test merging, add 3 default heads and one test head
-cd ..
-hg init merges
-cd merges
-echo a > a
-hg ci -Ama
-
-echo b > b
-hg ci -Amb
-
-hg up 0
-echo c > c
-hg ci -Amc
-
-hg up 0
-echo d > d
-hg ci -Amd
-
-hg up 0
-hg branch test
-echo e >> e
-hg ci -Ame
-
-hg log
-
-echo % implicit merge with test branch as parent
-hg merge
-hg up -C default
-echo % implicit merge with default branch as parent
-hg merge
-echo % 3 branch heads, explicit merge required
-hg merge 2
-hg ci -m merge
-echo % 2 branch heads, implicit merge works
-hg merge
--- a/tests/test-newbranch.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,180 +0,0 @@
-marked working directory as branch foo
-foo
-marked working directory as branch bar
-% branch shadowing
-abort: a branch of the same name already exists (use 'hg update' to switch to it)
-marked working directory as branch default
-created new head
-% there should be only one default branch head
-changeset: 3:9d567d0b51f9
-tag: tip
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: clear branch name
-
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-foo
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-foo
-changeset: 5:dc140083783b
-branch: foo
-tag: tip
-parent: 4:98d14f698afe
-parent: 3:9d567d0b51f9
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: merge
-
-changeset: 4:98d14f698afe
-branch: foo
-parent: 1:0079f24813e2
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: modify a branch
-
-changeset: 3:9d567d0b51f9
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: clear branch name
-
-changeset: 2:ed2bbf4e0102
-branch: bar
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: change branch name
-
-changeset: 1:0079f24813e2
-branch: foo
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: add branch name
-
-changeset: 0:db01e8ea3388
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: initial
-
-foo 5:dc140083783b
-default 3:9d567d0b51f9 (inactive)
-bar 2:ed2bbf4e0102 (inactive)
-foo
-default
-bar
-% test for invalid branch cache
-rolling back to revision 4 (undo commit)
-changeset: 4:98d14f698afe
-branch: foo
-tag: tip
-parent: 1:0079f24813e2
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: modify a branch
-
-invalidating branch cache (tip differs)
-changeset: 4:98d14f698afeaff8cb612dcf215ce95e639effc3
-branch: foo
-tag: tip
-parent: 1:0079f24813e2b73a891577c243684c5066347bc8
-parent: -1:0000000000000000000000000000000000000000
-manifest: 4:d01b250baaa05909152f7ae07d7a649deea0df9a
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-files: a
-extra: branch=foo
-description:
-modify a branch
-
-
-4:98d14f698afe
-98d14f698afeaff8cb612dcf215ce95e639effc3 4
-9d567d0b51f9e2068b054e1948e1a927f99b5874 default
-98d14f698afeaff8cb612dcf215ce95e639effc3 foo
-ed2bbf4e01029020711be82ca905283e883f0e11 bar
-% push should update the branch cache
-% pushing just rev 0
-db01e8ea3388fd3c7c94e1436ea2bd6a53d581c5 0
-db01e8ea3388fd3c7c94e1436ea2bd6a53d581c5 default
-% pushing everything
-98d14f698afeaff8cb612dcf215ce95e639effc3 4
-9d567d0b51f9e2068b054e1948e1a927f99b5874 default
-98d14f698afeaff8cb612dcf215ce95e639effc3 foo
-ed2bbf4e01029020711be82ca905283e883f0e11 bar
-% update with no arguments: tipmost revision of the current branch
-9d567d0b51f9
-98d14f698afe (foo) tip
-marked working directory as branch foobar
-abort: branch foobar not found
-% fastforward merge
-marked working directory as branch ff
-adding ff
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-foo
-changeset: 6:917eb54e1b4b
-branch: foo
-tag: tip
-parent: 4:98d14f698afe
-parent: 5:6683a60370cb
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: Merge ff into foo
-
-a
-ff
-% test merging, add 3 default heads and one test head
-adding a
-adding b
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-adding c
-created new head
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-adding d
-created new head
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-marked working directory as branch test
-adding e
-changeset: 4:3a1e01ed1df4
-branch: test
-tag: tip
-parent: 0:cb9a9f314b8b
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: e
-
-changeset: 3:980f7dc84c29
-parent: 0:cb9a9f314b8b
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: d
-
-changeset: 2:d36c0562f908
-parent: 0:cb9a9f314b8b
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: c
-
-changeset: 1:d2ae7f538514
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: b
-
-changeset: 0:cb9a9f314b8b
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: a
-
-% implicit merge with test branch as parent
-abort: branch 'test' has one head - please merge with an explicit rev
-(run 'hg heads' to see all heads)
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-% implicit merge with default branch as parent
-abort: branch 'default' has 3 heads - please merge with an explicit rev
-(run 'hg heads .' to see heads)
-% 3 branch heads, explicit merge required
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% 2 branch heads, implicit merge works
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-newbranch.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,316 @@
+ $ branchcache=.hg/branchheads.cache
+
+ $ hg init t
+ $ cd t
+
+ $ hg branches
+ $ echo foo > a
+ $ hg add a
+ $ hg ci -m "initial"
+ $ hg branch foo
+ marked working directory as branch foo
+ $ hg branch
+ foo
+ $ hg ci -m "add branch name"
+ $ hg branch bar
+ marked working directory as branch bar
+ $ hg ci -m "change branch name"
+
+Branch shadowing:
+
+ $ hg branch default
+ abort: a branch of the same name already exists (use 'hg update' to switch to it)
+
+ $ hg branch -f default
+ marked working directory as branch default
+
+ $ hg ci -m "clear branch name"
+ created new head
+
+There should be only one default branch head
+
+ $ hg heads .
+ changeset: 3:9d567d0b51f9
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: clear branch name
+
+
+ $ hg co foo
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg branch
+ foo
+ $ echo bleah > a
+ $ hg ci -m "modify a branch"
+
+ $ hg merge default
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg branch
+ foo
+ $ hg ci -m "merge"
+
+ $ hg log
+ changeset: 5:dc140083783b
+ branch: foo
+ tag: tip
+ parent: 4:98d14f698afe
+ parent: 3:9d567d0b51f9
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: merge
+
+ changeset: 4:98d14f698afe
+ branch: foo
+ parent: 1:0079f24813e2
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: modify a branch
+
+ changeset: 3:9d567d0b51f9
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: clear branch name
+
+ changeset: 2:ed2bbf4e0102
+ branch: bar
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: change branch name
+
+ changeset: 1:0079f24813e2
+ branch: foo
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: add branch name
+
+ changeset: 0:db01e8ea3388
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: initial
+
+ $ hg branches
+ foo 5:dc140083783b
+ default 3:9d567d0b51f9 (inactive)
+ bar 2:ed2bbf4e0102 (inactive)
+
+ $ hg branches -q
+ foo
+ default
+ bar
+
+Test for invalid branch cache:
+
+ $ hg rollback
+ rolling back to revision 4 (undo commit)
+
+ $ cp $branchcache .hg/bc-invalid
+
+ $ hg log -r foo
+ changeset: 4:98d14f698afe
+ branch: foo
+ tag: tip
+ parent: 1:0079f24813e2
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: modify a branch
+
+ $ cp .hg/bc-invalid $branchcache
+
+ $ hg --debug log -r foo
+ invalidating branch cache (tip differs)
+ changeset: 4:98d14f698afeaff8cb612dcf215ce95e639effc3
+ branch: foo
+ tag: tip
+ parent: 1:0079f24813e2b73a891577c243684c5066347bc8
+ parent: -1:0000000000000000000000000000000000000000
+ manifest: 4:d01b250baaa05909152f7ae07d7a649deea0df9a
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ files: a
+ extra: branch=foo
+ description:
+ modify a branch
+
+
+ $ rm $branchcache
+ $ echo corrupted > $branchcache
+
+ $ hg log -qr foo
+ 4:98d14f698afe
+
+ $ cat $branchcache
+ 98d14f698afeaff8cb612dcf215ce95e639effc3 4
+ 9d567d0b51f9e2068b054e1948e1a927f99b5874 default
+ 98d14f698afeaff8cb612dcf215ce95e639effc3 foo
+ ed2bbf4e01029020711be82ca905283e883f0e11 bar
+
+Push should update the branch cache:
+
+ $ hg init ../target
+
+Pushing just rev 0:
+
+ $ hg push -qr 0 ../target
+
+ $ cat ../target/$branchcache
+ db01e8ea3388fd3c7c94e1436ea2bd6a53d581c5 0
+ db01e8ea3388fd3c7c94e1436ea2bd6a53d581c5 default
+
+Pushing everything:
+
+ $ hg push -qf ../target
+
+ $ cat ../target/$branchcache
+ 98d14f698afeaff8cb612dcf215ce95e639effc3 4
+ 9d567d0b51f9e2068b054e1948e1a927f99b5874 default
+ 98d14f698afeaff8cb612dcf215ce95e639effc3 foo
+ ed2bbf4e01029020711be82ca905283e883f0e11 bar
+
+Update with no arguments: tipmost revision of the current branch:
+
+ $ hg up -q -C 0
+ $ hg up -q
+ $ hg id
+ 9d567d0b51f9
+
+ $ hg up -q 1
+ $ hg up -q
+ $ hg id
+ 98d14f698afe (foo) tip
+
+ $ hg branch foobar
+ marked working directory as branch foobar
+
+ $ hg up
+ abort: branch foobar not found
+
+Fastforward merge:
+
+ $ hg branch ff
+ marked working directory as branch ff
+
+ $ echo ff > ff
+ $ hg ci -Am'fast forward'
+ adding ff
+
+ $ hg up foo
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+ $ hg merge ff
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg branch
+ foo
+ $ hg commit -m'Merge ff into foo'
+ $ hg parents
+ changeset: 6:917eb54e1b4b
+ branch: foo
+ tag: tip
+ parent: 4:98d14f698afe
+ parent: 5:6683a60370cb
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: Merge ff into foo
+
+ $ hg manifest
+ a
+ ff
+
+
+Test merging, add 3 default heads and one test head:
+
+ $ cd ..
+ $ hg init merges
+ $ cd merges
+ $ echo a > a
+ $ hg ci -Ama
+ adding a
+
+ $ echo b > b
+ $ hg ci -Amb
+ adding b
+
+ $ hg up 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo c > c
+ $ hg ci -Amc
+ adding c
+ created new head
+
+ $ hg up 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo d > d
+ $ hg ci -Amd
+ adding d
+ created new head
+
+ $ hg up 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg branch test
+ marked working directory as branch test
+ $ echo e >> e
+ $ hg ci -Ame
+ adding e
+
+ $ hg log
+ changeset: 4:3a1e01ed1df4
+ branch: test
+ tag: tip
+ parent: 0:cb9a9f314b8b
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: e
+
+ changeset: 3:980f7dc84c29
+ parent: 0:cb9a9f314b8b
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: d
+
+ changeset: 2:d36c0562f908
+ parent: 0:cb9a9f314b8b
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: c
+
+ changeset: 1:d2ae7f538514
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: b
+
+ changeset: 0:cb9a9f314b8b
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: a
+
+Implicit merge with test branch as parent:
+
+ $ hg merge
+ abort: branch 'test' has one head - please merge with an explicit rev
+ (run 'hg heads' to see all heads)
+ $ hg up -C default
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+Implicit merge with default branch as parent:
+
+ $ hg merge
+ abort: branch 'default' has 3 heads - please merge with an explicit rev
+ (run 'hg heads .' to see heads)
+
+3 branch heads, explicit merge required:
+
+ $ hg merge 2
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg ci -m merge
+
+2 branch heads, implicit merge works:
+
+ $ hg merge
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
--- a/tests/test-permissions Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-#!/bin/sh
-
-echo '% hg init t'
-hg init t
-cd t
-echo foo > a
-echo '% hg add a'
-hg add a
-echo '% hg commit'
-hg commit -m "1"
-echo '% hg verify'
-hg verify
-chmod -r .hg/store/data/a.i
-echo '% hg verify'
-hg verify 2>/dev/null || echo verify failed
-chmod +r .hg/store/data/a.i
-echo '% hg verify'
-hg verify 2>/dev/null || echo verify failed
-chmod -w .hg/store/data/a.i
-echo barber > a
-echo '% hg commit'
-hg commit -m "2" 2>/dev/null || echo commit failed
-chmod -w .
-echo '% hg diff'
-hg diff --nodates
-chmod +w .
-
-chmod +w .hg/store/data/a.i
-mkdir dir
-touch dir/a
-echo '% hg status'
-hg status
-chmod -rx dir
-echo '% hg status'
-hg status
-# reenable perm to allow deletion
-chmod +rx dir
--- a/tests/test-permissions.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-% hg init t
-% hg add a
-% hg commit
-% hg verify
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 1 changesets, 1 total revisions
-% hg verify
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-verify failed
-% hg verify
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 1 changesets, 1 total revisions
-% hg commit
-commit failed
-% hg diff
-diff -r 2a18120dc1c9 a
---- a/a
-+++ b/a
-@@ -1,1 +1,1 @@
--foo
-+barber
-% hg status
-M a
-? dir/a
-% hg status
-dir: Permission denied
-M a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-permissions.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,69 @@
+ $ hg init t
+ $ cd t
+
+ $ echo foo > a
+ $ hg add a
+
+ $ hg commit -m "1"
+
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 1 changesets, 1 total revisions
+
+ $ chmod -r .hg/store/data/a.i
+
+ $ hg verify || echo %%% verify failed
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ abort: Permission denied: .*
+ %%% verify failed
+
+ $ chmod +r .hg/store/data/a.i
+
+ $ hg verify || echo %%% verify failed
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 1 changesets, 1 total revisions
+
+ $ chmod -w .hg/store/data/a.i
+
+ $ echo barber > a
+ $ hg commit -m "2" || echo %%% commit failed
+ trouble committing a!
+ abort: Permission denied: .*
+ %%% commit failed
+
+ $ chmod -w .
+
+ $ hg diff --nodates
+ diff -r 2a18120dc1c9 a
+ --- a/a
+ +++ b/a
+ @@ -1,1 +1,1 @@
+ -foo
+ +barber
+
+ $ chmod +w .
+
+ $ chmod +w .hg/store/data/a.i
+ $ mkdir dir
+ $ touch dir/a
+ $ hg status
+ M a
+ ? dir/a
+ $ chmod -rx dir
+ $ hg status
+ dir: Permission denied
+ M a
+
+Reenable perm to allow deletion:
+
+ $ chmod +rx dir
+
--- a/tests/test-pull Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-#!/bin/sh
-
-mkdir test
-cd test
-echo foo>foo
-hg init
-hg addremove
-hg commit -m 1
-hg verify
-hg serve -p $HGPORT -d --pid-file=hg.pid
-cat hg.pid >> $DAEMON_PIDS
-cd ..
-
-hg clone --pull http://foo:bar@localhost:$HGPORT/ copy | sed -e "s,:$HGPORT/,:\$HGPORT/,"
-cd copy
-hg verify
-hg co
-cat foo
-hg manifest --debug
-hg pull | sed -e "s,:$HGPORT/,:\$HGPORT/,"
-hg rollback --dry-run --verbose | sed -e "s,:$HGPORT/,:\$HGPORT/,"
-
-echo % issue 622
-cd ..
-hg init empty
-cd empty
-hg pull -u ../test
-
-echo % test file: uri handling
-hg pull -q file://../test-doesnt-exist 2>&1 \
- | sed 's%abort: repository.*/test-doesnt-exist%abort: repository /test-doesnt-exist%'
-hg pull -q file:../test
-# It's tricky to make file:// URLs working on every platforms
-# with regular shell commands.
-URL=`python -c "import os; print 'file://foobar' + ('/' + os.getcwd().replace(os.sep, '/')).replace('//', '/') + '/../test'"`
-hg pull -q "$URL"
--- a/tests/test-pull-branch Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-#!/bin/sh
-
-hg init t
-cd t
-echo 1 > foo
-hg ci -Am1 # 0
-hg branch branchA
-echo a1 > foo
-hg ci -ma1 # 1
-
-cd ..
-hg init tt
-cd tt
-hg pull ../t
-hg up branchA
-
-cd ../t
-echo a2 > foo
-hg ci -ma2 # 2
-echo % create branch B
-hg up 0
-hg branch branchB
-echo b1 > foo
-hg ci -mb1 # 3
-
-cd ../tt
-echo % a new branch is there
-hg pull -u ../t
-
-echo % develop both branch
-cd ../t
-hg up branchA
-echo a3 > foo
-hg ci -ma3 # 4
-hg up branchB
-echo b2 > foo
-hg ci -mb2 # 5
-
-cd ../tt
-echo % should succeed, no new heads
-hg pull -u ../t
-
-echo % add an head on other branch
-cd ../t
-hg up branchA
-echo a4 > foo
-hg ci -ma4 # 6
-hg up branchB
-echo b3.1 > foo
-hg ci -m b3.1 # 7
-hg up 5
-echo b3.2 > foo
-hg ci -m b3.2 # 8
-
-cd ../tt
-echo % should succeed only one head on our branch
-hg pull -u ../t
-
-cd ../t
-hg up -C branchA
-echo a5.1 > foo
-hg ci -ma5.1 # 9
-hg up 6
-echo a5.2 > foo
-hg ci -ma5.2 # 10
-hg up 7
-echo b4.1 > foo
-hg ci -m b4.1 # 11
-hg up -C 8
-echo b4.2 > foo
-hg ci -m b4.2 # 12
-
-cd ../tt
-echo % should fail new head in our branch
-hg pull -u ../t
--- a/tests/test-pull-branch.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-adding foo
-marked working directory as branch branchA
-pulling from ../t
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 2 changesets with 2 changes to 1 files
-(run 'hg update' to get a working copy)
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% create branch B
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-marked working directory as branch branchB
-% a new branch is there
-pulling from ../t
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 2 changesets with 2 changes to 1 files (+1 heads)
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% develop both branch
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% should succeed, no new heads
-pulling from ../t
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 2 changesets with 2 changes to 1 files
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% add an head on other branch
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-% should succeed only one head on our branch
-pulling from ../t
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 1 files (+1 heads)
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% should fail new head in our branch
-pulling from ../t
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 4 changesets with 4 changes to 1 files (+1 heads)
-not updating, since new heads added
-(run 'hg heads' to see heads, 'hg merge' to merge)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-pull-branch.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,136 @@
+ $ hg init t
+ $ cd t
+ $ echo 1 > foo
+ $ hg ci -Am1 # 0
+ adding foo
+ $ hg branch branchA
+ marked working directory as branch branchA
+ $ echo a1 > foo
+ $ hg ci -ma1 # 1
+
+ $ cd ..
+ $ hg init tt
+ $ cd tt
+ $ hg pull ../t
+ pulling from ../t
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 1 files
+ (run 'hg update' to get a working copy)
+ $ hg up branchA
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cd ../t
+ $ echo a2 > foo
+ $ hg ci -ma2 # 2
+
+Create branch B:
+
+ $ hg up 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg branch branchB
+ marked working directory as branch branchB
+ $ echo b1 > foo
+ $ hg ci -mb1 # 3
+
+ $ cd ../tt
+
+A new branch is there
+
+ $ hg pull -u ../t
+ pulling from ../t
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 1 files (+1 heads)
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Develop both branches:
+
+ $ cd ../t
+ $ hg up branchA
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo a3 > foo
+ $ hg ci -ma3 # 4
+ $ hg up branchB
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo b2 > foo
+ $ hg ci -mb2 # 5
+
+ $ cd ../tt
+
+Should succeed, no new heads:
+
+ $ hg pull -u ../t
+ pulling from ../t
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 1 files
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Add a head on other branch:
+
+ $ cd ../t
+ $ hg up branchA
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo a4 > foo
+ $ hg ci -ma4 # 6
+ $ hg up branchB
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo b3.1 > foo
+ $ hg ci -m b3.1 # 7
+ $ hg up 5
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo b3.2 > foo
+ $ hg ci -m b3.2 # 8
+ created new head
+
+ $ cd ../tt
+
+Should succeed because there is only one head on our branch:
+
+ $ hg pull -u ../t
+ pulling from ../t
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 1 files (+1 heads)
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cd ../t
+ $ hg up -C branchA
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo a5.1 > foo
+ $ hg ci -ma5.1 # 9
+ $ hg up 6
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo a5.2 > foo
+ $ hg ci -ma5.2 # 10
+ created new head
+ $ hg up 7
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo b4.1 > foo
+ $ hg ci -m b4.1 # 11
+ $ hg up -C 8
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo b4.2 > foo
+ $ hg ci -m b4.2 # 12
+
+ $ cd ../tt
+
+ $ hg pull -u ../t
+ pulling from ../t
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 4 changesets with 4 changes to 1 files (+1 heads)
+ not updating, since new heads added
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+
--- a/tests/test-pull-permission Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-#!/bin/sh
-
-mkdir a
-cd a
-hg init
-echo foo > b
-hg add b
-hg ci -m "b"
-
-chmod -w .hg/store
-
-cd ..
-
-hg clone a b
-
-chmod +w a/.hg/store # let test clean up
-
-cd b
-hg verify
--- a/tests/test-pull-permission.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 1 changesets, 1 total revisions
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-pull-permission.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,30 @@
+ $ mkdir a
+ $ cd a
+ $ hg init
+ $ echo foo > b
+ $ hg add b
+ $ hg ci -m "b"
+
+ $ chmod -w .hg/store
+
+ $ cd ..
+
+ $ hg clone a b
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ chmod +w a/.hg/store # let test clean up
+
+ $ cd b
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 1 changesets, 1 total revisions
+
--- a/tests/test-pull-r Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-#!/bin/sh
-
-hg init repo
-cd repo
-echo foo > foo
-hg ci -qAm 'add foo'
-echo >> foo
-hg ci -m 'change foo'
-hg up -qC 0
-echo bar > bar
-hg ci -qAm 'add bar'
-hg log
-cd ..
-hg init copy
-cd copy
-
-echo '% pull a missing revision'
-hg pull -qr missing ../repo
-
-echo '% pull multiple revisions with update'
-hg pull -qu -r 0 -r 1 ../repo
-hg -q parents
-hg rollback
-
-echo '% pull -r 0'
-hg pull -qr 0 ../repo
-hg log
-
-echo '% pull -r 1'
-hg pull -qr 1 ../repo
-hg log
-
-# this used to abort: received changelog group is empty
-echo '% pull -r 1 again'
-hg pull -qr 1 ../repo
--- a/tests/test-pull-r.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-changeset: 2:effea6de0384
-tag: tip
-parent: 0:bbd179dfa0a7
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: add bar
-
-changeset: 1:ed1b79f46b9a
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: change foo
-
-changeset: 0:bbd179dfa0a7
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: add foo
-
-% pull a missing revision
-abort: unknown revision 'missing'!
-% pull multiple revisions with update
-0:bbd179dfa0a7
-rolling back to revision -1 (undo pull)
-% pull -r 0
-changeset: 0:bbd179dfa0a7
-tag: tip
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: add foo
-
-% pull -r 1
-changeset: 1:ed1b79f46b9a
-tag: tip
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: change foo
-
-changeset: 0:bbd179dfa0a7
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: add foo
-
-% pull -r 1 again
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-pull-r.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,71 @@
+ $ hg init repo
+ $ cd repo
+ $ echo foo > foo
+ $ hg ci -qAm 'add foo'
+ $ echo >> foo
+ $ hg ci -m 'change foo'
+ $ hg up -qC 0
+ $ echo bar > bar
+ $ hg ci -qAm 'add bar'
+
+ $ hg log
+ changeset: 2:effea6de0384
+ tag: tip
+ parent: 0:bbd179dfa0a7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: add bar
+
+ changeset: 1:ed1b79f46b9a
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: change foo
+
+ changeset: 0:bbd179dfa0a7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: add foo
+
+ $ cd ..
+ $ hg init copy
+ $ cd copy
+
+Pull a missing revision:
+
+ $ hg pull -qr missing ../repo
+ abort: unknown revision 'missing'!
+
+Pull multiple revisions with update:
+
+ $ hg pull -qu -r 0 -r 1 ../repo
+ $ hg -q parents
+ 0:bbd179dfa0a7
+ $ hg rollback
+ rolling back to revision -1 (undo pull)
+
+ $ hg pull -qr 0 ../repo
+ $ hg log
+ changeset: 0:bbd179dfa0a7
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: add foo
+
+ $ hg pull -qr 1 ../repo
+ $ hg log
+ changeset: 1:ed1b79f46b9a
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: change foo
+
+ changeset: 0:bbd179dfa0a7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: add foo
+
+
+This used to abort: received changelog group is empty:
+
+ $ hg pull -qr 1 ../repo
+
--- a/tests/test-pull-update Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-#!/bin/sh
-#
-
-hg init t
-cd t
-echo 1 > foo
-hg ci -Am m
-
-cd ..
-hg clone t tt
-cd tt
-echo 1.1 > foo
-hg ci -Am m
-
-cd ../t
-echo 1.2 > foo
-hg ci -Am m
-echo % should fail
-hg pull -u ../tt
-
-cd ../tt
-echo % should fail
-hg pull -u ../t
-HGMERGE=true hg merge
-hg ci -mm
-
-cd ../t
-echo % should work
-hg pull -u ../tt
--- a/tests/test-pull-update.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-adding foo
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% should fail
-pulling from ../tt
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-not updating, since new heads added
-(run 'hg heads' to see heads, 'hg merge' to merge)
-% should fail
-pulling from ../t
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-not updating, since new heads added
-(run 'hg heads' to see heads, 'hg merge' to merge)
-merging foo
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% should work
-pulling from ../tt
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (-1 heads)
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-pull-update.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,63 @@
+ $ hg init t
+ $ cd t
+ $ echo 1 > foo
+ $ hg ci -Am m
+ adding foo
+
+ $ cd ..
+ $ hg clone t tt
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd tt
+ $ echo 1.1 > foo
+ $ hg ci -Am m
+
+ $ cd ../t
+ $ echo 1.2 > foo
+ $ hg ci -Am m
+
+Should not update:
+
+ $ hg pull -u ../tt
+ pulling from ../tt
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ not updating, since new heads added
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+
+ $ cd ../tt
+
+Should not update:
+
+ $ hg pull -u ../t
+ pulling from ../t
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ not updating, since new heads added
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+
+ $ HGMERGE=true hg merge
+ merging foo
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+ $ hg ci -mm
+
+ $ cd ../t
+
+Should work:
+
+ $ hg pull -u ../tt
+ pulling from ../tt
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (-1 heads)
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
--- a/tests/test-pull.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-adding foo
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 1 changesets, 1 total revisions
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 1 changesets, 1 total revisions
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-foo
-2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 foo
-pulling from http://foo:***@localhost:$HGPORT/
-searching for changes
-no changes found
-rolling back to revision -1 (undo pull: http://foo:***@localhost:$HGPORT/)
-% issue 622
-pulling from ../test
-requesting all changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-% test file: uri handling
-abort: repository /test-doesnt-exist not found!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-pull.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,80 @@
+ $ mkdir test
+ $ cd test
+
+ $ echo foo>foo
+ $ hg init
+ $ hg addremove
+ adding foo
+ $ hg commit -m 1
+
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 1 changesets, 1 total revisions
+
+ $ hg serve -p $HGPORT -d --pid-file=hg.pid
+ $ cat hg.pid >> $DAEMON_PIDS
+ $ cd ..
+
+ $ hg clone --pull http://foo:bar@localhost:$HGPORT/ copy | sed -e "s,:$HGPORT/,:\$HGPORT/,"
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cd copy
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 1 changesets, 1 total revisions
+
+ $ hg co
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cat foo
+ foo
+
+ $ hg manifest --debug
+ 2ed2a3912a0b24502043eae84ee4b279c18b90dd 644 foo
+
+ $ hg pull | sed -e "s,:$HGPORT/,:\$HGPORT/,"
+ pulling from http://foo:***@localhost:$HGPORT/
+ searching for changes
+ no changes found
+
+ $ hg rollback --dry-run --verbose | sed -e "s,:$HGPORT/,:\$HGPORT/,"
+ rolling back to revision -1 (undo pull: http://foo:***@localhost:$HGPORT/)
+
+Issue 622:
+
+ $ cd ..
+ $ hg init empty
+ $ cd empty
+ $ hg pull -u ../test
+ pulling from ../test
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+Test 'file:' uri handling:
+
+ $ hg pull -q file://../test-doesnt-exist
+ abort: repository /test-doesnt-exist not found!
+
+ $ hg pull -q file:../test
+
+# It's tricky to make file:// URLs working on every platforms
+# with regular shell commands.
+
+ $ URL=`python -c "import os; print 'file://foobar' + ('/' + os.getcwd().replace(os.sep, '/')).replace('//', '/') + '/../test'"`
+ $ hg pull -q "$URL"
+
--- a/tests/test-push-hook-lock Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-#!/bin/sh
-hg init 1
-echo '[ui]' >> 1/.hg/hgrc
-echo 'timeout = 10' >> 1/.hg/hgrc
-echo foo > 1/foo
-hg --cwd 1 ci -A -m foo
-hg clone 1 2
-hg clone 2 3
-echo '[hooks]' >> 2/.hg/hgrc
-echo 'changegroup.push = hg push -qf ../1' >> 2/.hg/hgrc
-echo bar >> 3/foo
-hg --cwd 3 ci -m bar
-hg --cwd 3 push ../2
--- a/tests/test-push-hook-lock.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-adding foo
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-pushing to ../2
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-push-hook-lock.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,31 @@
+ $ hg init 1
+
+ $ echo '[ui]' >> 1/.hg/hgrc
+ $ echo 'timeout = 10' >> 1/.hg/hgrc
+
+ $ echo foo > 1/foo
+ $ hg --cwd 1 ci -A -m foo
+ adding foo
+
+ $ hg clone 1 2
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg clone 2 3
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ echo '[hooks]' >> 2/.hg/hgrc
+ $ echo 'changegroup.push = hg push -qf ../1' >> 2/.hg/hgrc
+
+ $ echo bar >> 3/foo
+ $ hg --cwd 3 ci -m bar
+
+ $ hg --cwd 3 push ../2
+ pushing to ../2
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+
--- a/tests/test-push-r Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-#!/bin/sh
-
-hg init test
-cd test
-cat >>afile <<EOF
-0
-EOF
-hg add afile
-hg commit -m "0.0"
-cat >>afile <<EOF
-1
-EOF
-hg commit -m "0.1"
-cat >>afile <<EOF
-2
-EOF
-hg commit -m "0.2"
-cat >>afile <<EOF
-3
-EOF
-hg commit -m "0.3"
-hg update -C 0
-cat >>afile <<EOF
-1
-EOF
-hg commit -m "1.1"
-cat >>afile <<EOF
-2
-EOF
-hg commit -m "1.2"
-cat >fred <<EOF
-a line
-EOF
-cat >>afile <<EOF
-3
-EOF
-hg add fred
-hg commit -m "1.3"
-hg mv afile adifferentfile
-hg commit -m "1.3m"
-hg update -C 3
-hg mv afile anotherfile
-hg commit -m "0.3m"
-hg debugindex .hg/store/data/afile.i
-hg debugindex .hg/store/data/adifferentfile.i
-hg debugindex .hg/store/data/anotherfile.i
-hg debugindex .hg/store/data/fred.i
-hg debugindex .hg/store/00manifest.i
-hg verify
-cd ..
-for i in 0 1 2 3 4 5 6 7 8; do
- mkdir test-"$i"
- hg --cwd test-"$i" init
- hg -R test push -r "$i" test-"$i"
- cd test-"$i"
- hg verify
- cd ..
-done
-cd test-8
-hg pull ../test-7
-hg verify
--- a/tests/test-push-r.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,0 @@
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-1 files updated, 0 files merged, 2 files removed, 0 files unresolved
- rev offset length base linkrev nodeid p1 p2
- 0 0 3 0 0 362fef284ce2 000000000000 000000000000
- 1 3 5 1 1 125144f7e028 362fef284ce2 000000000000
- 2 8 7 2 2 4c982badb186 125144f7e028 000000000000
- 3 15 9 3 3 19b1fc555737 4c982badb186 000000000000
- rev offset length base linkrev nodeid p1 p2
- 0 0 75 0 7 2565f3199a74 000000000000 000000000000
- rev offset length base linkrev nodeid p1 p2
- 0 0 75 0 8 2565f3199a74 000000000000 000000000000
- rev offset length base linkrev nodeid p1 p2
- 0 0 8 0 6 12ab3bcc5ea4 000000000000 000000000000
- rev offset length base linkrev nodeid p1 p2
- 0 0 48 0 0 43eadb1d2d06 000000000000 000000000000
- 1 48 48 1 1 8b89697eba2c 43eadb1d2d06 000000000000
- 2 96 48 2 2 626a32663c2f 8b89697eba2c 000000000000
- 3 144 48 3 3 f54c32f13478 626a32663c2f 000000000000
- 4 192 58 3 6 de68e904d169 626a32663c2f 000000000000
- 5 250 68 3 7 09bb521d218d de68e904d169 000000000000
- 6 318 54 6 8 1fde233dfb0f f54c32f13478 000000000000
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-4 files, 9 changesets, 7 total revisions
-pushing to test-0
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 1 changesets, 1 total revisions
-pushing to test-1
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 2 changesets with 2 changes to 1 files
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 2 changesets, 2 total revisions
-pushing to test-2
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 1 files
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 3 changesets, 3 total revisions
-pushing to test-3
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 4 changesets with 4 changes to 1 files
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 4 changesets, 4 total revisions
-pushing to test-4
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 2 changesets with 2 changes to 1 files
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 2 changesets, 2 total revisions
-pushing to test-5
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 3 changesets with 3 changes to 1 files
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 3 changesets, 3 total revisions
-pushing to test-6
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 4 changesets with 5 changes to 2 files
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-2 files, 4 changesets, 5 total revisions
-pushing to test-7
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 5 changesets with 6 changes to 3 files
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-3 files, 5 changesets, 6 total revisions
-pushing to test-8
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 5 changesets with 5 changes to 2 files
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-2 files, 5 changesets, 5 total revisions
-pulling from ../test-7
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 4 changesets with 2 changes to 3 files (+1 heads)
-(run 'hg heads' to see heads, 'hg merge' to merge)
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-4 files, 9 changesets, 7 total revisions
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-push-r.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,230 @@
+ $ hg init test
+ $ cd test
+
+ $ cat >>afile <<EOF
+ > 0
+ > EOF
+ $ hg add afile
+ $ hg commit -m "0.0"
+
+ $ cat >>afile <<EOF
+ > 1
+ > EOF
+ $ hg commit -m "0.1"
+
+ $ cat >>afile <<EOF
+ > 2
+ > EOF
+ $ hg commit -m "0.2"
+
+ $ cat >>afile <<EOF
+ > 3
+ > EOF
+ $ hg commit -m "0.3"
+
+ $ hg update -C 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cat >>afile <<EOF
+ > 1
+ > EOF
+ $ hg commit -m "1.1"
+ created new head
+
+ $ cat >>afile <<EOF
+ > 2
+ > EOF
+ $ hg commit -m "1.2"
+
+ $ cat >fred <<EOF
+ > a line
+ > EOF
+ $ cat >>afile <<EOF
+ > 3
+ > EOF
+ $ hg add fred
+ $ hg commit -m "1.3"
+
+ $ hg mv afile adifferentfile
+ $ hg commit -m "1.3m"
+
+ $ hg update -C 3
+ 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
+
+ $ hg mv afile anotherfile
+ $ hg commit -m "0.3m"
+
+ $ hg debugindex .hg/store/data/afile.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 3 0 0 362fef284ce2 000000000000 000000000000
+ 1 3 5 1 1 125144f7e028 362fef284ce2 000000000000
+ 2 8 7 2 2 4c982badb186 125144f7e028 000000000000
+ 3 15 9 3 3 19b1fc555737 4c982badb186 000000000000
+
+ $ hg debugindex .hg/store/data/adifferentfile.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 75 0 7 2565f3199a74 000000000000 000000000000
+
+ $ hg debugindex .hg/store/data/anotherfile.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 75 0 8 2565f3199a74 000000000000 000000000000
+
+ $ hg debugindex .hg/store/data/fred.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 8 0 6 12ab3bcc5ea4 000000000000 000000000000
+
+ $ hg debugindex .hg/store/00manifest.i
+ rev offset length base linkrev nodeid p1 p2
+ 0 0 48 0 0 43eadb1d2d06 000000000000 000000000000
+ 1 48 48 1 1 8b89697eba2c 43eadb1d2d06 000000000000
+ 2 96 48 2 2 626a32663c2f 8b89697eba2c 000000000000
+ 3 144 48 3 3 f54c32f13478 626a32663c2f 000000000000
+ 4 192 58 3 6 de68e904d169 626a32663c2f 000000000000
+ 5 250 68 3 7 09bb521d218d de68e904d169 000000000000
+ 6 318 54 6 8 1fde233dfb0f f54c32f13478 000000000000
+
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 4 files, 9 changesets, 7 total revisions
+
+ $ cd ..
+
+ $ for i in 0 1 2 3 4 5 6 7 8; do
+ > echo
+ > mkdir test-"$i"
+ > hg --cwd test-"$i" init
+ > hg -R test push -r "$i" test-"$i"
+ > cd test-"$i"
+ > hg verify
+ > cd ..
+ > done
+
+ pushing to test-0
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 1 changesets, 1 total revisions
+
+ pushing to test-1
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 1 files
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 2 changesets, 2 total revisions
+
+ pushing to test-2
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 1 files
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 3 changesets, 3 total revisions
+
+ pushing to test-3
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 4 changesets with 4 changes to 1 files
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 4 changesets, 4 total revisions
+
+ pushing to test-4
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 1 files
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 2 changesets, 2 total revisions
+
+ pushing to test-5
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 1 files
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 3 changesets, 3 total revisions
+
+ pushing to test-6
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 4 changesets with 5 changes to 2 files
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 2 files, 4 changesets, 5 total revisions
+
+ pushing to test-7
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 5 changesets with 6 changes to 3 files
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 3 files, 5 changesets, 6 total revisions
+
+ pushing to test-8
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 5 changesets with 5 changes to 2 files
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 2 files, 5 changesets, 5 total revisions
+
+ $ cd test-8
+
+ $ hg pull ../test-7
+ pulling from ../test-7
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 4 changesets with 2 changes to 3 files (+1 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 4 files, 9 changesets, 7 total revisions
+
--- a/tests/test-push-validation Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-#!/bin/sh
-
-hg init test
-cd test
-cat > .hg/hgrc <<EOF
-[server]
-validate=1
-EOF
-echo alpha > alpha
-echo beta > beta
-hg addr
-hg ci -m 1
-
-cd ..
-hg clone test test-clone
-
-cd test-clone
-cp .hg/store/data/beta.i tmp
-echo blah >> beta
-hg ci -m '2 (corrupt)'
-mv tmp .hg/store/data/beta.i
-hg push 2>&1 | "$TESTDIR/filtertmp.py"
--- a/tests/test-push-validation.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-adding alpha
-adding beta
-updating to branch default
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-pushing to $HGTMP/test-push-validation/test
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-transaction abort!
-rollback completed
-abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-push-validation.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,52 @@
+ $ hg init test
+ $ cd test
+
+ $ cat > .hg/hgrc <<EOF
+ > [server]
+ > validate=1
+ > EOF
+
+ $ echo alpha > alpha
+ $ echo beta > beta
+ $ hg addr
+ adding alpha
+ adding beta
+ $ hg ci -m 1
+
+ $ cd ..
+ $ hg clone test test-clone
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cd test-clone
+ $ cp .hg/store/data/beta.i tmp
+ $ echo blah >> beta
+ $ hg ci -m '2 (corrupt)'
+ $ mv tmp .hg/store/data/beta.i
+
+Expected to fail:
+
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ beta@1: dddc47b3ba30 in manifests not found
+ 2 files, 2 changesets, 2 total revisions
+ 1 integrity errors encountered!
+ (first damaged changeset appears to be 1)
+
+Expected to fail:
+
+ $ hg push
+ pushing to .*
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ transaction abort!
+ rollback completed
+ abort: missing file data for beta:dddc47b3ba30e54484720ce0f4f768a0f4b6efb9 - run hg verify
+
+ $ true
+
--- a/tests/test-push-warn Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,317 +0,0 @@
-#!/bin/sh
-
-echo "[extensions]" >> $HGRCPATH
-echo "graphlog=" >> $HGRCPATH
-
-mkdir a
-cd a
-hg init
-echo foo > t1
-hg add t1
-hg commit -m "1"
-
-cd ..
-hg clone a b
-
-cd a
-echo foo > t2
-hg add t2
-hg commit -m "2"
-
-cd ../b
-echo foo > t3
-hg add t3
-hg commit -m "3"
-
-hg push ../a
-hg pull ../a
-hg push ../a
-hg merge
-hg commit -m "4"
-hg push ../a
-cd ..
-
-hg init c
-cd c
-for i in 0 1 2; do
- echo $i >> foo
- hg ci -Am $i
-done
-cd ..
-
-hg clone c d
-cd d
-for i in 0 1; do
- hg co -C $i
- echo d-$i >> foo
- hg ci -m d-$i
-done
-
-HGMERGE=true hg merge 3
-hg ci -m c-d
-
-hg push ../c; echo $?
-hg push -r 2 ../c; echo $?
-hg push -r 3 ../c; echo $?
-hg push -r 3 -r 4 ../c; echo $?
-hg push -f -r 3 -r 4 ../c; echo $?
-hg push -r 5 ../c; echo $?
-hg in ../c
-
-echo % issue 450
-hg init ../e
-hg push -r 0 ../e ; echo $?
-hg push -r 1 ../e ; echo $?
-
-cd ..
-
-echo % issue 736
-hg init f
-cd f
-hg -q branch a
-echo 0 > foo
-hg -q ci -Am 0
-echo 1 > foo
-hg -q ci -m 1
-hg -q up 0
-echo 2 > foo
-hg -q ci -m 2
-hg -q up 0
-hg -q branch b
-echo 3 > foo
-hg -q ci -m 3
-cd ..
-
-hg -q clone f g
-cd g
-
-echo % push on existing branch and new branch
-hg -q up 1
-echo 4 > foo
-hg -q ci -m 4
-hg -q up 0
-echo 5 > foo
-hg -q branch c
-hg -q ci -m 5
-hg push ../f; echo $?
-hg push -r 4 -r 5 ../f; echo $?
-
-echo % multiple new branches
-hg -q branch d
-echo 6 > foo
-hg -q ci -m 6
-hg push ../f; echo $?
-hg push -r 4 -r 6 ../f; echo $?
-cd ../g
-
-echo % fail on multiple head push
-hg -q up 1
-echo 7 > foo
-hg -q ci -m 7
-hg push -r 4 -r 7 ../f; echo $?
-
-echo % push replacement head on existing branches
-hg -q up 3
-echo 8 > foo
-hg -q ci -m 8
-hg push -r 7 -r 8 ../f; echo $?
-
-echo % merge of branch a to other branch b followed by unrelated push on branch a
-hg -q up 7
-HGMERGE=true hg -q merge 8
-hg -q ci -m 9
-hg -q up 8
-echo 10 > foo
-hg -q ci -m 10
-hg push -r 9 ../f; echo $?
-hg push -r 10 ../f; echo $?
-
-echo % cheating the counting algorithm
-hg -q up 9
-HGMERGE=true hg -q merge 2
-hg -q ci -m 11
-hg -q up 1
-echo 12 > foo
-hg -q ci -m 12
-hg push -r 11 -r 12 ../f; echo $?
-
-echo % failed push of new named branch
-echo 12 > foo
-hg -q ci -m 12a
-hg -q up 11
-echo 13 > foo
-hg -q branch e
-hg -q ci -m 13d
-hg push -r 12 -r 13 ../f; echo $?
-
-echo % using --new-branch to push new named branch
-hg push --new-branch -r 12 -r 13 ../f; echo $?
-
-echo % checking prepush logic does not allow silently pushing multiple new heads
-cd ..
-hg init h
-echo init > h/init
-hg -R h ci -Am init
-echo a > h/a
-hg -R h ci -Am a
-hg clone h i
-hg -R h up 0
-echo b > h/b
-hg -R h ci -Am b
-hg -R i up 0
-echo c > i/c
-hg -R i ci -Am c
-hg -R i push h
-echo
-
-echo % check prepush logic with merged branches
-hg init j
-hg -R j branch a
-echo init > j/foo
-hg -R j ci -Am init
-hg clone j k
-echo a1 > j/foo
-hg -R j ci -m a1
-hg -R k branch b
-echo b > k/foo
-hg -R k ci -m b
-hg -R k up 0
-hg -R k merge b
-hg -R k ci -m merge
-hg -R k push -r a j
-echo
-
-echo % prepush -r should not allow you to sneak in new heads
-hg init l
-cd l
-echo a >> foo
-hg -q add foo
-hg -q branch a
-hg -q ci -ma
-hg -q up null
-echo a >> foo
-hg -q add foo
-hg -q branch b
-hg -q ci -mb
-cd ..
-hg -q clone l m -u a
-cd m
-hg -q merge b
-hg -q ci -mmb
-hg -q up 0
-echo a >> foo
-hg -q ci -ma2
-hg -q up 2
-echo a >> foo
-hg -q branch -f b
-hg -q ci -mb2
-hg -q merge 3
-hg -q ci -mma
-hg push ../l -b b
-cd ..
-
-echo % check prepush with new branch head on former topo non-head
-hg init n
-cd n
-hg branch A
-echo a >a
-hg ci -Ama
-hg branch B
-echo b >b
-hg ci -Amb
-# b is now branch head of B, and a topological head
-# a is now branch head of A, but not a topological head
-hg clone . inner
-cd inner
-hg up B
-echo b1 >b1
-hg ci -Amb1
-# in the clone b1 is now the head of B
-cd ..
-hg up 0
-echo a2 >a2
-hg ci -Ama2
-# a2 is now the new branch head of A, and a new topological head
-# it replaces a former inner branch head, so it should at most warn about A, not B
-echo %% glog of local
-hg glog --template "{rev}: {branches} {desc}\n"
-echo %% glog of remote
-hg glog -R inner --template "{rev}: {branches} {desc}\n"
-echo %% outgoing
-hg out inner --template "{rev}: {branches} {desc}\n"
-hg push inner
-cd ..
-
-echo % check prepush with new branch head on former topo head
-hg init o
-cd o
-hg branch A
-echo a >a
-hg ci -Ama
-hg branch B
-echo b >b
-hg ci -Amb
-# b is now branch head of B, and a topological head
-hg up 0
-echo a1 >a1
-hg ci -Ama1
-# a1 is now branch head of A, and a topological head
-hg clone . inner
-cd inner
-hg up B
-echo b1 >b1
-hg ci -Amb1
-# in the clone b1 is now the head of B
-cd ..
-echo a2 >a2
-hg ci -Ama2
-# a2 is now the new branch head of A, and a topological head
-# it replaces a former topological and branch head, so this should not warn
-echo %% glog of local
-hg glog --template "{rev}: {branches} {desc}\n"
-echo %% glog of remote
-hg glog -R inner --template "{rev}: {branches} {desc}\n"
-echo %% outgoing
-hg out inner --template "{rev}: {branches} {desc}\n"
-hg push inner
-cd ..
-
-echo % check prepush with new branch head and new child of former branch head
-echo % but child is on different branch
-hg init p
-cd p
-hg branch A
-echo a0 >a
-hg ci -Ama0
-echo a1 >a
-hg ci -ma1
-hg up null
-hg branch B
-echo b0 >b
-hg ci -Amb0
-echo b1 >b
-hg ci -mb1
-
-hg clone . inner
-
-hg up A
-hg branch -f B
-echo a3 >a
-hg ci -ma3
-hg up 3
-hg branch -f A
-echo b3 >b
-hg ci -mb3
-
-echo %% glog of local
-hg glog --template "{rev}: {branches} {desc}\n"
-echo %% glog of remote
-hg glog -R inner --template "{rev}: {branches} {desc}\n"
-echo %% outgoing
-hg out inner --template "{rev}: {branches} {desc}\n"
-hg push inner
-hg push inner -r4 -r5
-hg in inner
-cd ..
-
-exit 0
--- a/tests/test-push-warn.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,323 +0,0 @@
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-pushing to ../a
-searching for changes
-abort: push creates new remote heads on branch 'default'!
-(you should pull and merge or use push -f to force)
-pulling from ../a
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-(run 'hg heads' to see heads, 'hg merge' to merge)
-pushing to ../a
-searching for changes
-abort: push creates new remote heads on branch 'default'!
-(did you forget to merge? use push -f to force)
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-pushing to ../a
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 2 changesets with 1 changes to 1 files
-adding foo
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-created new head
-merging foo
-0 files updated, 1 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-pushing to ../c
-searching for changes
-abort: push creates new remote heads on branch 'default'!
-(did you forget to merge? use push -f to force)
-255
-pushing to ../c
-searching for changes
-no changes found
-0
-pushing to ../c
-searching for changes
-abort: push creates new remote heads on branch 'default'!
-(did you forget to merge? use push -f to force)
-255
-pushing to ../c
-searching for changes
-abort: push creates new remote heads on branch 'default'!
-(did you forget to merge? use push -f to force)
-255
-pushing to ../c
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 2 changesets with 2 changes to 1 files (+2 heads)
-0
-pushing to ../c
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (-1 heads)
-0
-comparing with ../c
-searching for changes
-no changes found
-% issue 450
-pushing to ../e
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-0
-pushing to ../e
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-0
-% issue 736
-% push on existing branch and new branch
-pushing to ../f
-searching for changes
-abort: push creates new remote branches: c!
-(use 'hg push --new-branch' to create new remote branches)
-255
-pushing to ../f
-searching for changes
-abort: push creates new remote branches: c!
-(use 'hg push --new-branch' to create new remote branches)
-255
-% multiple new branches
-pushing to ../f
-searching for changes
-abort: push creates new remote branches: c, d!
-(use 'hg push --new-branch' to create new remote branches)
-255
-pushing to ../f
-searching for changes
-abort: push creates new remote branches: c, d!
-(use 'hg push --new-branch' to create new remote branches)
-255
-% fail on multiple head push
-pushing to ../f
-searching for changes
-abort: push creates new remote heads on branch 'a'!
-(did you forget to merge? use push -f to force)
-255
-% push replacement head on existing branches
-pushing to ../f
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 2 changesets with 2 changes to 1 files
-0
-% merge of branch a to other branch b followed by unrelated push on branch a
-pushing to ../f
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (-1 heads)
-0
-pushing to ../f
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-0
-% cheating the counting algorithm
-pushing to ../f
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 2 changesets with 2 changes to 1 files
-0
-% failed push of new named branch
-pushing to ../f
-searching for changes
-abort: push creates new remote branches: e!
-(use 'hg push --new-branch' to create new remote branches)
-255
-% using --new-branch to push new named branch
-pushing to ../f
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-0
-% checking prepush logic does not allow silently pushing multiple new heads
-adding init
-adding a
-updating to branch default
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-adding b
-created new head
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-adding c
-created new head
-pushing to h
-searching for changes
-abort: push creates new remote heads on branch 'default'!
-(you should pull and merge or use push -f to force)
-
-% check prepush logic with merged branches
-marked working directory as branch a
-adding foo
-updating to branch a
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-marked working directory as branch b
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-pushing to j
-searching for changes
-abort: push creates new remote branches: b!
-(use 'hg push --new-branch' to create new remote branches)
-
-% prepush -r should not allow you to sneak in new heads
-pushing to ../l
-searching for changes
-abort: push creates new remote heads on branch 'a'!
-(did you forget to merge? use push -f to force)
-% check prepush with new branch head on former topo non-head
-marked working directory as branch A
-adding a
-marked working directory as branch B
-adding b
-updating to branch B
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-adding b1
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-adding a2
-%% glog of local
-@ 2: A a2
-|
-| o 1: B b
-|/
-o 0: A a
-
-%% glog of remote
-@ 2: B b1
-|
-o 1: B b
-|
-o 0: A a
-
-%% outgoing
-comparing with inner
-searching for changes
-2: A a2
-pushing to inner
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-% check prepush with new branch head on former topo head
-marked working directory as branch A
-adding a
-marked working directory as branch B
-adding b
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-adding a1
-updating to branch A
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-adding b1
-adding a2
-%% glog of local
-@ 3: A a2
-|
-o 2: A a1
-|
-| o 1: B b
-|/
-o 0: A a
-
-%% glog of remote
-@ 3: B b1
-|
-| o 2: A a1
-| |
-o | 1: B b
-|/
-o 0: A a
-
-%% outgoing
-comparing with inner
-searching for changes
-3: A a2
-pushing to inner
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-% check prepush with new branch head and new child of former branch head
-% but child is on different branch
-marked working directory as branch A
-adding a
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-marked working directory as branch B
-adding b
-updating to branch B
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-marked working directory as branch B
-created new head
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-marked working directory as branch A
-created new head
-%% glog of local
-@ 5: A b3
-|
-| o 4: B a3
-| |
-o | 3: B b1
-| |
-o | 2: B b0
- /
-o 1: A a1
-|
-o 0: A a0
-
-%% glog of remote
-@ 3: B b1
-|
-o 2: B b0
-
-o 1: A a1
-|
-o 0: A a0
-
-%% outgoing
-comparing with inner
-searching for changes
-4: B a3
-5: A b3
-pushing to inner
-searching for changes
-abort: push creates new remote heads on branch 'A'!
-(did you forget to merge? use push -f to force)
-pushing to inner
-searching for changes
-abort: push creates new remote heads on branch 'A'!
-(did you forget to merge? use push -f to force)
-comparing with inner
-searching for changes
-no changes found
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-push-warn.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,701 @@
+ $ echo "[extensions]" >> $HGRCPATH
+ $ echo "graphlog=" >> $HGRCPATH
+
+ $ mkdir a
+ $ cd a
+ $ hg init
+ $ echo foo > t1
+ $ hg add t1
+ $ hg commit -m "1"
+
+ $ cd ..
+ $ hg clone a b
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cd a
+ $ echo foo > t2
+ $ hg add t2
+ $ hg commit -m "2"
+
+ $ cd ../b
+ $ echo foo > t3
+ $ hg add t3
+ $ hg commit -m "3"
+
+ $ hg push ../a
+ pushing to ../a
+ searching for changes
+ abort: push creates new remote heads on branch 'default'!
+ (you should pull and merge or use push -f to force)
+
+ $ hg pull ../a
+ pulling from ../a
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+
+ $ hg push ../a
+ pushing to ../a
+ searching for changes
+ abort: push creates new remote heads on branch 'default'!
+ (did you forget to merge? use push -f to force)
+
+ $ hg merge
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg commit -m "4"
+ $ hg push ../a
+ pushing to ../a
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 1 changes to 1 files
+
+ $ cd ..
+
+ $ hg init c
+ $ cd c
+ $ for i in 0 1 2; do
+ > echo $i >> foo
+ > hg ci -Am $i
+ > done
+ adding foo
+ $ cd ..
+
+ $ hg clone c d
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cd d
+ $ for i in 0 1; do
+ > hg co -C $i
+ > echo d-$i >> foo
+ > hg ci -m d-$i
+ > done
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ created new head
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ created new head
+
+ $ HGMERGE=true hg merge 3
+ merging foo
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg ci -m c-d
+
+ $ hg push ../c; echo $?
+ pushing to ../c
+ searching for changes
+ abort: push creates new remote heads on branch 'default'!
+ (did you forget to merge? use push -f to force)
+ 255
+
+ $ hg push -r 2 ../c; echo $?
+ pushing to ../c
+ searching for changes
+ no changes found
+ 0
+
+ $ hg push -r 3 ../c; echo $?
+ pushing to ../c
+ searching for changes
+ abort: push creates new remote heads on branch 'default'!
+ (did you forget to merge? use push -f to force)
+ 255
+
+ $ hg push -r 3 -r 4 ../c; echo $?
+ pushing to ../c
+ searching for changes
+ abort: push creates new remote heads on branch 'default'!
+ (did you forget to merge? use push -f to force)
+ 255
+
+ $ hg push -f -r 3 -r 4 ../c; echo $?
+ pushing to ../c
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 1 files (+2 heads)
+ 0
+
+ $ hg push -r 5 ../c; echo $?
+ pushing to ../c
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (-1 heads)
+ 0
+
+ $ hg in ../c
+ comparing with ../c
+ searching for changes
+ no changes found
+
+
+Issue 450:
+
+ $ hg init ../e
+ $ hg push -r 0 ../e ; echo $?
+ pushing to ../e
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ 0
+
+ $ hg push -r 1 ../e ; echo $?
+ pushing to ../e
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ 0
+
+ $ cd ..
+
+
+Issue 736:
+
+ $ hg init f
+ $ cd f
+ $ hg -q branch a
+ $ echo 0 > foo
+ $ hg -q ci -Am 0
+ $ echo 1 > foo
+ $ hg -q ci -m 1
+ $ hg -q up 0
+ $ echo 2 > foo
+ $ hg -q ci -m 2
+ $ hg -q up 0
+ $ hg -q branch b
+ $ echo 3 > foo
+ $ hg -q ci -m 3
+ $ cd ..
+
+ $ hg -q clone f g
+ $ cd g
+
+Push on existing branch and new branch:
+
+ $ hg -q up 1
+ $ echo 4 > foo
+ $ hg -q ci -m 4
+ $ hg -q up 0
+ $ echo 5 > foo
+ $ hg -q branch c
+ $ hg -q ci -m 5
+
+ $ hg push ../f; echo $?
+ pushing to ../f
+ searching for changes
+ abort: push creates new remote branches: c!
+ (use 'hg push --new-branch' to create new remote branches)
+ 255
+
+ $ hg push -r 4 -r 5 ../f; echo $?
+ pushing to ../f
+ searching for changes
+ abort: push creates new remote branches: c!
+ (use 'hg push --new-branch' to create new remote branches)
+ 255
+
+
+Multiple new branches:
+
+ $ hg -q branch d
+ $ echo 6 > foo
+ $ hg -q ci -m 6
+
+ $ hg push ../f; echo $?
+ pushing to ../f
+ searching for changes
+ abort: push creates new remote branches: c, d!
+ (use 'hg push --new-branch' to create new remote branches)
+ 255
+
+ $ hg push -r 4 -r 6 ../f; echo $?
+ pushing to ../f
+ searching for changes
+ abort: push creates new remote branches: c, d!
+ (use 'hg push --new-branch' to create new remote branches)
+ 255
+
+ $ cd ../g
+
+
+Fail on multiple head push:
+
+ $ hg -q up 1
+ $ echo 7 > foo
+ $ hg -q ci -m 7
+
+ $ hg push -r 4 -r 7 ../f; echo $?
+ pushing to ../f
+ searching for changes
+ abort: push creates new remote heads on branch 'a'!
+ (did you forget to merge? use push -f to force)
+ 255
+
+Push replacement head on existing branches:
+
+ $ hg -q up 3
+ $ echo 8 > foo
+ $ hg -q ci -m 8
+
+ $ hg push -r 7 -r 8 ../f; echo $?
+ pushing to ../f
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 1 files
+ 0
+
+
+Merge of branch a to other branch b followed by unrelated push
+on branch a:
+
+ $ hg -q up 7
+ $ HGMERGE=true hg -q merge 8
+ $ hg -q ci -m 9
+ $ hg -q up 8
+ $ echo 10 > foo
+ $ hg -q ci -m 10
+
+ $ hg push -r 9 ../f; echo $?
+ pushing to ../f
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (-1 heads)
+ 0
+
+ $ hg push -r 10 ../f; echo $?
+ pushing to ../f
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ 0
+
+
+Cheating the counting algorithm:
+
+ $ hg -q up 9
+ $ HGMERGE=true hg -q merge 2
+ $ hg -q ci -m 11
+ $ hg -q up 1
+ $ echo 12 > foo
+ $ hg -q ci -m 12
+
+ $ hg push -r 11 -r 12 ../f; echo $?
+ pushing to ../f
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 1 files
+ 0
+
+
+Failed push of new named branch:
+
+ $ echo 12 > foo
+ $ hg -q ci -m 12a
+ $ hg -q up 11
+ $ echo 13 > foo
+ $ hg -q branch e
+ $ hg -q ci -m 13d
+
+ $ hg push -r 12 -r 13 ../f; echo $?
+ pushing to ../f
+ searching for changes
+ abort: push creates new remote branches: e!
+ (use 'hg push --new-branch' to create new remote branches)
+ 255
+
+
+Using --new-branch to push new named branch:
+
+ $ hg push --new-branch -r 12 -r 13 ../f; echo $?
+ pushing to ../f
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ 0
+
+
+Checking prepush logic does not allow silently pushing
+multiple new heads:
+
+ $ cd ..
+ $ hg init h
+ $ echo init > h/init
+ $ hg -R h ci -Am init
+ adding init
+ $ echo a > h/a
+ $ hg -R h ci -Am a
+ adding a
+ $ hg clone h i
+ updating to branch default
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg -R h up 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo b > h/b
+ $ hg -R h ci -Am b
+ adding b
+ created new head
+ $ hg -R i up 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo c > i/c
+ $ hg -R i ci -Am c
+ adding c
+ created new head
+
+ $ hg -R i push h
+ pushing to h
+ searching for changes
+ abort: push creates new remote heads on branch 'default'!
+ (you should pull and merge or use push -f to force)
+
+
+Check prepush logic with merged branches:
+
+ $ hg init j
+ $ hg -R j branch a
+ marked working directory as branch a
+ $ echo init > j/foo
+ $ hg -R j ci -Am init
+ adding foo
+ $ hg clone j k
+ updating to branch a
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo a1 > j/foo
+ $ hg -R j ci -m a1
+ $ hg -R k branch b
+ marked working directory as branch b
+ $ echo b > k/foo
+ $ hg -R k ci -m b
+ $ hg -R k up 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg -R k merge b
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg -R k ci -m merge
+
+ $ hg -R k push -r a j
+ pushing to j
+ searching for changes
+ abort: push creates new remote branches: b!
+ (use 'hg push --new-branch' to create new remote branches)
+
+
+Prepush -r should not allow you to sneak in new heads:
+
+ $ hg init l
+ $ cd l
+ $ echo a >> foo
+ $ hg -q add foo
+ $ hg -q branch a
+ $ hg -q ci -ma
+ $ hg -q up null
+ $ echo a >> foo
+ $ hg -q add foo
+ $ hg -q branch b
+ $ hg -q ci -mb
+ $ cd ..
+ $ hg -q clone l m -u a
+ $ cd m
+ $ hg -q merge b
+ $ hg -q ci -mmb
+ $ hg -q up 0
+ $ echo a >> foo
+ $ hg -q ci -ma2
+ $ hg -q up 2
+ $ echo a >> foo
+ $ hg -q branch -f b
+ $ hg -q ci -mb2
+ $ hg -q merge 3
+ $ hg -q ci -mma
+
+ $ hg push ../l -b b
+ pushing to ../l
+ searching for changes
+ abort: push creates new remote heads on branch 'a'!
+ (did you forget to merge? use push -f to force)
+
+ $ cd ..
+
+
+Check prepush with new branch head on former topo non-head:
+
+ $ hg init n
+ $ cd n
+ $ hg branch A
+ marked working directory as branch A
+ $ echo a >a
+ $ hg ci -Ama
+ adding a
+ $ hg branch B
+ marked working directory as branch B
+ $ echo b >b
+ $ hg ci -Amb
+ adding b
+
+# b is now branch head of B, and a topological head
+# a is now branch head of A, but not a topological head
+
+ $ hg clone . inner
+ updating to branch B
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd inner
+ $ hg up B
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo b1 >b1
+ $ hg ci -Amb1
+ adding b1
+
+# in the clone b1 is now the head of B
+
+ $ cd ..
+ $ hg up 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo a2 >a2
+ $ hg ci -Ama2
+ adding a2
+
+# a2 is now the new branch head of A, and a new topological head
+# it replaces a former inner branch head, so it should at most warn about A, not B
+
+glog of local:
+
+ $ hg glog --template "{rev}: {branches} {desc}\n"
+ @ 2: A a2
+ |
+ | o 1: B b
+ |/
+ o 0: A a
+
+glog of remote:
+
+ $ hg glog -R inner --template "{rev}: {branches} {desc}\n"
+ @ 2: B b1
+ |
+ o 1: B b
+ |
+ o 0: A a
+
+outgoing:
+
+ $ hg out inner --template "{rev}: {branches} {desc}\n"
+ comparing with inner
+ searching for changes
+ 2: A a2
+
+ $ hg push inner
+ pushing to inner
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+
+ $ cd ..
+
+
+Check prepush with new branch head on former topo head:
+
+ $ hg init o
+ $ cd o
+ $ hg branch A
+ marked working directory as branch A
+ $ echo a >a
+ $ hg ci -Ama
+ adding a
+ $ hg branch B
+ marked working directory as branch B
+ $ echo b >b
+ $ hg ci -Amb
+ adding b
+
+# b is now branch head of B, and a topological head
+
+ $ hg up 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo a1 >a1
+ $ hg ci -Ama1
+ adding a1
+
+# a1 is now branch head of A, and a topological head
+
+ $ hg clone . inner
+ updating to branch A
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd inner
+ $ hg up B
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo b1 >b1
+ $ hg ci -Amb1
+ adding b1
+
+# in the clone b1 is now the head of B
+
+ $ cd ..
+ $ echo a2 >a2
+ $ hg ci -Ama2
+ adding a2
+
+# a2 is now the new branch head of A, and a topological head
+# it replaces a former topological and branch head, so this should not warn
+
+glog of local:
+
+ $ hg glog --template "{rev}: {branches} {desc}\n"
+ @ 3: A a2
+ |
+ o 2: A a1
+ |
+ | o 1: B b
+ |/
+ o 0: A a
+
+glog of remote:
+
+ $ hg glog -R inner --template "{rev}: {branches} {desc}\n"
+ @ 3: B b1
+ |
+ | o 2: A a1
+ | |
+ o | 1: B b
+ |/
+ o 0: A a
+
+outgoing:
+
+ $ hg out inner --template "{rev}: {branches} {desc}\n"
+ comparing with inner
+ searching for changes
+ 3: A a2
+
+ $ hg push inner
+ pushing to inner
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+
+ $ cd ..
+
+
+Check prepush with new branch head and new child of former branch head
+but child is on different branch:
+
+ $ hg init p
+ $ cd p
+ $ hg branch A
+ marked working directory as branch A
+ $ echo a0 >a
+ $ hg ci -Ama0
+ adding a
+ $ echo a1 >a
+ $ hg ci -ma1
+ $ hg up null
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg branch B
+ marked working directory as branch B
+ $ echo b0 >b
+ $ hg ci -Amb0
+ adding b
+ $ echo b1 >b
+ $ hg ci -mb1
+
+ $ hg clone . inner
+ updating to branch B
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ hg up A
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg branch -f B
+ marked working directory as branch B
+ $ echo a3 >a
+ $ hg ci -ma3
+ created new head
+ $ hg up 3
+ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ hg branch -f A
+ marked working directory as branch A
+ $ echo b3 >b
+ $ hg ci -mb3
+ created new head
+
+glog of local:
+
+ $ hg glog --template "{rev}: {branches} {desc}\n"
+ @ 5: A b3
+ |
+ | o 4: B a3
+ | |
+ o | 3: B b1
+ | |
+ o | 2: B b0
+ /
+ o 1: A a1
+ |
+ o 0: A a0
+
+glog of remote:
+
+ $ hg glog -R inner --template "{rev}: {branches} {desc}\n"
+ @ 3: B b1
+ |
+ o 2: B b0
+
+ o 1: A a1
+ |
+ o 0: A a0
+
+outgoing:
+
+ $ hg out inner --template "{rev}: {branches} {desc}\n"
+ comparing with inner
+ searching for changes
+ 4: B a3
+ 5: A b3
+
+ $ hg push inner
+ pushing to inner
+ searching for changes
+ abort: push creates new remote heads on branch 'A'!
+ (did you forget to merge? use push -f to force)
+
+ $ hg push inner -r4 -r5
+ pushing to inner
+ searching for changes
+ abort: push creates new remote heads on branch 'A'!
+ (did you forget to merge? use push -f to force)
+
+ $ hg in inner
+ comparing with inner
+ searching for changes
+ no changes found
+
+ $ cd ..
+
--- a/tests/test-race Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-mkdir t
-cd t
-hg init
-echo a > a
-hg add a
-hg commit -m test
-
-# do we ever miss a sub-second change?
-for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
- hg co -qC 0
- echo b > a
- hg st
-done
--- a/tests/test-race.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
-M a
--- a/tests/test-rename-after-merge Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-#!/bin/sh
-
-# Test issue 746: renaming files brought by the
-# second parent of a merge was broken.
-
-echo % create source repository
-hg init t
-cd t
-echo a > a
-hg ci -Am a
-cd ..
-
-echo % fork source repository
-hg clone t t2
-cd t2
-echo b > b
-hg ci -Am b
-
-echo % update source repository
-cd ../t
-echo a >> a
-hg ci -m a2
-
-echo % merge repositories
-hg pull ../t2
-hg merge
-hg st
-
-echo % rename b as c
-hg mv b c
-hg st
-echo % rename back c as b
-hg mv c b
-hg st
-cd ..
-
-# Test issue 1476: renaming a first parent file into
-# another first parent file while none of them belong to
-# the second parent was broken
-echo % test issue 1476
-hg init repo1476
-cd repo1476
-echo a > a
-hg ci -Am adda
-echo b1 > b1
-echo b2 > b2
-hg ci -Am changea
-hg up -C 0
-echo c1 > c1
-echo c2 > c2
-hg ci -Am addcandd
-echo % merge heads
-hg merge
-hg mv -Af c1 c2
-echo % commit issue 1476
-hg ci -m merge
-hg log -r tip -C -v | grep copies
-hg rollback
-hg up -C .
-echo % merge heads again
-hg merge
-hg mv -Af b1 b2
-echo % commit issue 1476 with a rename on the other side
-hg ci -m merge
-hg log -r tip -C -v | grep copies
-
-
-
--- a/tests/test-rename-after-merge.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-% create source repository
-adding a
-% fork source repository
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-adding b
-% update source repository
-% merge repositories
-pulling from ../t2
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-(run 'hg heads' to see heads, 'hg merge' to merge)
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-M b
-% rename b as c
-A c
-R b
-% rename back c as b
-M b
-% test issue 1476
-adding a
-adding b1
-adding b2
-0 files updated, 0 files merged, 2 files removed, 0 files unresolved
-adding c1
-adding c2
-created new head
-% merge heads
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% commit issue 1476
-copies: c2 (c1)
-rolling back to revision 2 (undo commit)
-2 files updated, 0 files merged, 2 files removed, 0 files unresolved
-% merge heads again
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-(branch merge, don't forget to commit)
-% commit issue 1476 with a rename on the other side
-copies: b2 (b1)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rename-after-merge.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,120 @@
+# Test issue 746: renaming files brought by the
+# second parent of a merge was broken.
+
+Create source repository:
+
+ $ hg init t
+ $ cd t
+ $ echo a > a
+ $ hg ci -Am a
+ adding a
+ $ cd ..
+
+Fork source repository:
+
+ $ hg clone t t2
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd t2
+ $ echo b > b
+ $ hg ci -Am b
+ adding b
+
+Update source repository:
+
+ $ cd ../t
+ $ echo a >> a
+ $ hg ci -m a2
+
+Merge repositories:
+
+ $ hg pull ../t2
+ pulling from ../t2
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+
+ $ hg merge
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg st
+ M b
+
+Rename b as c:
+
+ $ hg mv b c
+ $ hg st
+ A c
+ R b
+
+Rename back c as b:
+
+ $ hg mv c b
+ $ hg st
+ M b
+
+ $ cd ..
+
+# Test issue 1476: renaming a first parent file into
+# another first parent file while none of them belong to
+# the second parent was broken
+
+ $ hg init repo1476
+ $ cd repo1476
+ $ echo a > a
+ $ hg ci -Am adda
+ adding a
+ $ echo b1 > b1
+ $ echo b2 > b2
+ $ hg ci -Am changea
+ adding b1
+ adding b2
+ $ hg up -C 0
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ $ echo c1 > c1
+ $ echo c2 > c2
+ $ hg ci -Am addcandd
+ adding c1
+ adding c2
+ created new head
+
+Merge heads:
+
+ $ hg merge
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg mv -Af c1 c2
+
+Commit issue 1476:
+
+ $ hg ci -m merge
+
+ $ hg log -r tip -C -v | grep copies
+ copies: c2 (c1)
+
+ $ hg rollback
+ rolling back to revision 2 (undo commit)
+
+ $ hg up -C .
+ 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
+
+Merge heads again:
+
+ $ hg merge
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ (branch merge, don't forget to commit)
+
+ $ hg mv -Af b1 b2
+
+Commit issue 1476 with a rename on the other side:
+
+ $ hg ci -m merge
+
+ $ hg log -r tip -C -v | grep copies
+ copies: b2 (b1)
+
--- a/tests/test-simple-update Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-set -e
-
-mkdir test
-cd test
-echo foo>foo
-hg init
-hg addremove
-hg commit -m "1"
-hg verify
-
-hg clone . ../branch
-cd ../branch
-hg co
-echo bar>>foo
-hg commit -m "2"
-
-cd ../test
-hg pull ../branch
-hg verify
-hg co
-cat foo
-hg manifest --debug
--- a/tests/test-simple-update.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-adding foo
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 1 changesets, 1 total revisions
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-pulling from ../branch
-searching for changes
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files
-(run 'hg update' to get a working copy)
-checking changesets
-checking manifests
-crosschecking files in changesets and manifests
-checking files
-1 files, 2 changesets, 2 total revisions
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-foo
-bar
-6f4310b00b9a147241b071a60c28a650827fb03d 644 foo
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-simple-update.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,54 @@
+ $ set -e
+
+ $ mkdir test
+ $ cd test
+ $ echo foo>foo
+ $ hg init
+ $ hg addremove
+ adding foo
+ $ hg commit -m "1"
+
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 1 changesets, 1 total revisions
+
+ $ hg clone . ../branch
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd ../branch
+ $ hg co
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ echo bar>>foo
+ $ hg commit -m "2"
+
+ $ cd ../test
+
+ $ hg pull ../branch
+ pulling from ../branch
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ (run 'hg update' to get a working copy)
+
+ $ hg verify
+ checking changesets
+ checking manifests
+ crosschecking files in changesets and manifests
+ checking files
+ 1 files, 2 changesets, 2 total revisions
+
+ $ hg co
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+ $ cat foo
+ foo
+ bar
+
+ $ hg manifest --debug
+ 6f4310b00b9a147241b071a60c28a650827fb03d 644 foo
+
--- a/tests/test-subrepo-recursion.t Mon Sep 13 01:37:56 2010 +0000
+++ b/tests/test-subrepo-recursion.t Tue Sep 14 16:21:01 2010 -0500
@@ -6,27 +6,33 @@
Create test repository:
- $ hg init
+ $ hg init repo
+ $ cd repo
$ echo x1 > x.txt
- $ hg add x.txt
$ hg init foo
$ cd foo
$ echo y1 > y.txt
- $ hg add y.txt
$ hg init bar
$ cd bar
$ echo z1 > z.txt
- $ hg add z.txt
$ cd ..
$ echo 'bar = bar' > .hgsub
- $ hg add .hgsub
$ cd ..
$ echo 'foo = foo' > .hgsub
- $ hg add .hgsub
+
+Add files --- .hgsub files must go first to trigger subrepos:
+
+ $ hg add -S .hgsub
+ $ hg add -S foo/.hgsub
+ $ hg add -S foo/bar
+ adding foo/bar/z.txt
+ $ hg add -S
+ adding x.txt
+ adding foo/y.txt
Test recursive status without committing anything:
@@ -220,3 +226,98 @@
@@ -1,1 +1,2 @@
z1
+z2
+
+Clone and test outgoing:
+
+ $ cd ..
+ $ hg clone repo repo2
+ updating to branch default
+ pulling subrepo foo from .*/test-subrepo-recursion.t/repo/foo
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 4 changesets with 7 changes to 3 files
+ pulling subrepo foo/bar from .*/test-subrepo-recursion.t/repo/foo/bar
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 3 changesets with 3 changes to 1 files
+ 3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cd repo2
+ $ hg outgoing -S
+ comparing with .*/test-subrepo-recursion.t/repo
+ searching for changes
+ no changes found
+ comparing with .*/test-subrepo-recursion.t/repo/foo
+ searching for changes
+ no changes found
+ $ echo $?
+ 0
+
+Make nested change:
+
+ $ echo y4 >> foo/y.txt
+ $ hg diff
+ diff -r 65903cebad86 foo/y.txt
+ --- a/foo/y.txt
+ +++ b/foo/y.txt
+ @@ -1,3 +1,4 @@
+ y1
+ y2
+ y3
+ +y4
+ $ hg commit -m 3-4-2
+ committing subrepository foo
+ $ hg outgoing -S
+ comparing with .*/test-subrepo-recursion.t/repo
+ searching for changes
+ changeset: 3:2655b8ecc4ee
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: 3-4-2
+
+ comparing with .*/test-subrepo-recursion.t/repo/foo
+ searching for changes
+ changeset: 4:e96193d6cb36
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: 3-4-2
+
+
+Switch to original repo and setup default path:
+
+ $ cd ../repo
+ $ echo '[paths]' >> .hg/hgrc
+ $ echo 'default = ../repo2' >> .hg/hgrc
+
+Test incoming:
+
+ $ hg incoming -S
+ comparing with .*/test-subrepo-recursion.t/repo2
+ searching for changes
+ changeset: 3:2655b8ecc4ee
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: 3-4-2
+
+ comparing with .*/test-subrepo-recursion.t/repo2/foo
+ searching for changes
+ changeset: 4:e96193d6cb36
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: 3-4-2
+
+ $ hg incoming -S --bundle incoming.hg
+ abort: cannot combine --bundle and --subrepos
+
+Test missing subrepo:
+
+ $ rm -r foo
+ $ hg status
+ warning: unknown revision '65903cebad86f1a84bd4f1134f62fa7dcb7a1c98' in foo
--- a/tests/test-unrelated-pull Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-#!/bin/sh
-
-mkdir a
-cd a
-hg init
-echo 123 > a
-hg add a
-hg commit -m "a" -u a
-
-cd ..
-mkdir b
-cd b
-hg init
-echo 321 > b
-hg add b
-hg commit -m "b" -u b
-
-hg pull ../a
-hg pull -f ../a
-hg heads
--- a/tests/test-unrelated-pull.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-pulling from ../a
-searching for changes
-abort: repository is unrelated
-pulling from ../a
-searching for changes
-warning: repository is unrelated
-adding changesets
-adding manifests
-adding file changes
-added 1 changesets with 1 changes to 1 files (+1 heads)
-(run 'hg heads' to see heads, 'hg merge' to merge)
-changeset: 1:9a79c33a9db3
-tag: tip
-parent: -1:000000000000
-user: a
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: a
-
-changeset: 0:01f8062b2de5
-user: b
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: b
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-unrelated-pull.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,43 @@
+ $ mkdir a
+ $ cd a
+ $ hg init
+ $ echo 123 > a
+ $ hg add a
+ $ hg commit -m "a" -u a
+
+ $ cd ..
+ $ mkdir b
+ $ cd b
+ $ hg init
+ $ echo 321 > b
+ $ hg add b
+ $ hg commit -m "b" -u b
+
+ $ hg pull ../a
+ pulling from ../a
+ searching for changes
+ abort: repository is unrelated
+
+ $ hg pull -f ../a
+ pulling from ../a
+ searching for changes
+ warning: repository is unrelated
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files (+1 heads)
+ (run 'hg heads' to see heads, 'hg merge' to merge)
+
+ $ hg heads
+ changeset: 1:9a79c33a9db3
+ tag: tip
+ parent: -1:000000000000
+ user: a
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: a
+
+ changeset: 0:01f8062b2de5
+ user: b
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: b
+
--- a/tests/test-up-issue1456 Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-rm -rf a
-hg init a
-cd a
-
-echo foo > foo
-hg ci -qAm0
-chmod +x foo
-hg ci -m1
-hg co -q 0
-echo dirty > foo
-hg up -c
-hg up -q
-cat foo
-hg st -A
-
-echo '% validate update of standalone execute bit change'
-hg up -C 0
-chmod -x foo
-hg ci -m removeexec
-hg up -C 0
-hg up
-hg st
--- a/tests/test-up-issue1456.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-abort: uncommitted local changes
-dirty
-M foo
-% validate update of standalone execute bit change
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-nothing changed
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
-0 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-update-branches Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-#!/bin/sh
-
-# Construct the following history tree:
-#
-# @ 5:e1bb631146ca b1
-# |
-# o 4:a4fdb3b883c4 0:b608b9236435 b1
-# |
-# | o 3:4b57d2520816 1:44592833ba9f
-# | |
-# | | o 2:063f31070f65
-# | |/
-# | o 1:44592833ba9f
-# |/
-# o 0:b608b9236435
-
-hg init
-echo foo > foo
-echo zero > a
-hg ci -qAm0
-echo one > a ; hg ci -m1
-echo two > a ; hg ci -m2
-hg up -q 1
-echo three > a ; hg ci -qm3
-hg up -q 0
-hg branch -q b1
-echo four > a ; hg ci -qm4
-echo five > a ; hg ci -qm5
-
-echo % initial repo state
-echo
-hg --config 'extensions.graphlog=' \
- glog --template '{rev}:{node|short} {parents} {branches}\n'
-
-# Test helper functions.
-
-revtest () {
- msg=$1
- dirtyflag=$2 # 'clean' or 'dirty'
- startrev=$3
- targetrev=$4
- opt=$5
- echo % revtest $msg $startrev $targetrev
- hg up -qC $startrev
- test $dirtyflag = dirty && echo dirty > foo
- hg up $opt $targetrev
- hg parent --template 'parent={rev}\n'
- hg stat
-}
-
-norevtest () {
- msg=$1
- dirtyflag=$2 # 'clean' or 'dirty'
- startrev=$3
- opt=$4
- echo % norevtest $msg $startrev
- hg up -qC $startrev
- test $dirtyflag = dirty && echo dirty > foo
- hg up $opt
- hg parent --template 'parent={rev}\n'
- hg stat
-}
-
-# Test cases are documented in a table in the update function of merge.py.
-# Cases are run as shown in that table, row by row.
-
-norevtest 'none clean linear' clean 4
-norevtest 'none clean same' clean 2
-
-revtest 'none clean linear' clean 1 2
-revtest 'none clean same' clean 2 3
-revtest 'none clean cross' clean 3 4
-
-revtest 'none dirty linear' dirty 1 2
-revtest 'none dirty same' dirty 2 3
-revtest 'none dirty cross' dirty 3 4
-
-revtest '-C dirty linear' dirty 1 2 -C
-revtest '-c dirty linear' dirty 1 2 -c
-norevtest '-c clean same' clean 2 -c
-revtest '-cC dirty linear' dirty 1 2 -cC
--- a/tests/test-update-branches.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-% initial repo state
-
-@ 5:e1bb631146ca b1
-|
-o 4:a4fdb3b883c4 0:b608b9236435 b1
-|
-| o 3:4b57d2520816 1:44592833ba9f
-| |
-| | o 2:063f31070f65
-| |/
-| o 1:44592833ba9f
-|/
-o 0:b608b9236435
-
-% norevtest none clean linear 4
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-parent=5
-% norevtest none clean same 2
-abort: crosses branches (use 'hg merge' or use 'hg update -c')
-parent=2
-% revtest none clean linear 1 2
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-parent=2
-% revtest none clean same 2 3
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-parent=3
-% revtest none clean cross 3 4
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-parent=4
-% revtest none dirty linear 1 2
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-parent=2
-M foo
-% revtest none dirty same 2 3
-abort: crosses branches (use 'hg merge' to merge or use 'hg update -C' to discard changes)
-parent=2
-M foo
-% revtest none dirty cross 3 4
-abort: crosses branches (use 'hg merge' to merge or use 'hg update -C' to discard changes)
-parent=3
-M foo
-% revtest -C dirty linear 1 2
-2 files updated, 0 files merged, 0 files removed, 0 files unresolved
-parent=2
-% revtest -c dirty linear 1 2
-abort: uncommitted local changes
-parent=1
-M foo
-% norevtest -c clean same 2
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-parent=3
-% revtest -cC dirty linear 1 2
-abort: cannot specify both -c/--check and -C/--clean
-parent=1
-M foo
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-update-branches.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,130 @@
+# Construct the following history tree:
+#
+# @ 5:e1bb631146ca b1
+# |
+# o 4:a4fdb3b883c4 0:b608b9236435 b1
+# |
+# | o 3:4b57d2520816 1:44592833ba9f
+# | |
+# | | o 2:063f31070f65
+# | |/
+# | o 1:44592833ba9f
+# |/
+# o 0:b608b9236435
+
+ $ hg init
+ $ echo foo > foo
+ $ echo zero > a
+ $ hg ci -qAm0
+ $ echo one > a ; hg ci -m1
+ $ echo two > a ; hg ci -m2
+ $ hg up -q 1
+ $ echo three > a ; hg ci -qm3
+ $ hg up -q 0
+ $ hg branch -q b1
+ $ echo four > a ; hg ci -qm4
+ $ echo five > a ; hg ci -qm5
+
+Initial repo state:
+
+ $ hg --config 'extensions.graphlog=' \
+ > glog --template '{rev}:{node|short} {parents} {branches}\n'
+ @ 5:e1bb631146ca b1
+ |
+ o 4:a4fdb3b883c4 0:b608b9236435 b1
+ |
+ | o 3:4b57d2520816 1:44592833ba9f
+ | |
+ | | o 2:063f31070f65
+ | |/
+ | o 1:44592833ba9f
+ |/
+ o 0:b608b9236435
+
+
+Test helper functions:
+
+ $ revtest () {
+ > msg=$1
+ > dirtyflag=$2 # 'clean' or 'dirty'
+ > startrev=$3
+ > targetrev=$4
+ > opt=$5
+ > hg up -qC $startrev
+ > test $dirtyflag = dirty && echo dirty > foo
+ > hg up $opt $targetrev
+ > hg parent --template 'parent={rev}\n'
+ > hg stat
+ > }
+
+ $ norevtest () {
+ > msg=$1
+ > dirtyflag=$2 # 'clean' or 'dirty'
+ > startrev=$3
+ > opt=$4
+ > hg up -qC $startrev
+ > test $dirtyflag = dirty && echo dirty > foo
+ > hg up $opt
+ > hg parent --template 'parent={rev}\n'
+ > hg stat
+ > }
+
+# Test cases are documented in a table in the update function of merge.py.
+# Cases are run as shown in that table, row by row.
+
+ $ norevtest 'none clean linear' clean 4
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ parent=5
+
+ $ norevtest 'none clean same' clean 2
+ abort: crosses branches (use 'hg merge' or use 'hg update -c')
+ parent=2
+
+
+ $ revtest 'none clean linear' clean 1 2
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ parent=2
+
+ $ revtest 'none clean same' clean 2 3
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ parent=3
+
+ $ revtest 'none clean cross' clean 3 4
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ parent=4
+
+
+ $ revtest 'none dirty linear' dirty 1 2
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ parent=2
+ M foo
+
+ $ revtest 'none dirty same' dirty 2 3
+ abort: crosses branches (use 'hg merge' to merge or use 'hg update -C' to discard changes)
+ parent=2
+ M foo
+
+ $ revtest 'none dirty cross' dirty 3 4
+ abort: crosses branches (use 'hg merge' to merge or use 'hg update -C' to discard changes)
+ parent=3
+ M foo
+
+
+ $ revtest '-C dirty linear' dirty 1 2 -C
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ parent=2
+
+ $ revtest '-c dirty linear' dirty 1 2 -c
+ abort: uncommitted local changes
+ parent=1
+ M foo
+
+ $ norevtest '-c clean same' clean 2 -c
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ parent=3
+
+ $ revtest '-cC dirty linear' dirty 1 2 -cC
+ abort: cannot specify both -c/--check and -C/--clean
+ parent=1
+ M foo
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-update-issue1456.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,31 @@
+ $ rm -rf a
+ $ hg init a
+ $ cd a
+
+ $ echo foo > foo
+ $ hg ci -qAm0
+ $ chmod +x foo
+ $ hg ci -m1
+ $ hg co -q 0
+ $ echo dirty > foo
+ $ hg up -c
+ abort: uncommitted local changes
+ $ hg up -q
+ $ cat foo
+ dirty
+ $ hg st -A
+ M foo
+
+Validate update of standalone execute bit change:
+
+ $ hg up -C 0
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ chmod -x foo
+ $ hg ci -m removeexec
+ nothing changed
+ $ hg up -C 0
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg up
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg st
+
--- a/tests/test-update-reverse Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-#!/bin/sh
-
-hg init
-touch a
-hg add a
-hg commit -m "Added a"
-
-touch main
-hg add main
-hg commit -m "Added main"
-hg checkout 0
-
-echo Main should be gone
-ls
-
-touch side1
-hg add side1
-hg commit -m "Added side1"
-touch side2
-hg add side2
-hg commit -m "Added side2"
-
-hg log
-
-echo Should have two heads, side2 and main
-hg heads
-
-echo Should show "a side1 side2"
-ls
-
-hg update --debug -C 1
-echo Should only show "a main"
-ls
-
--- a/tests/test-update-reverse.out Mon Sep 13 01:37:56 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-Main should be gone
-a
-created new head
-changeset: 3:91ebc10ed028
-tag: tip
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: Added side2
-
-changeset: 2:b932d7dbb1e1
-parent: 0:c2eda428b523
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: Added side1
-
-changeset: 1:71a760306caf
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: Added main
-
-changeset: 0:c2eda428b523
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: Added a
-
-Should have two heads, side2 and main
-changeset: 3:91ebc10ed028
-tag: tip
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: Added side2
-
-changeset: 1:71a760306caf
-user: test
-date: Thu Jan 01 00:00:00 1970 +0000
-summary: Added main
-
-Should show a side1 side2
-a
-side1
-side2
-resolving manifests
- overwrite True partial False
- ancestor 91ebc10ed028+ local 91ebc10ed028+ remote 71a760306caf
- side2: other deleted -> r
- side1: other deleted -> r
- main: remote created -> g
-updating: side1 1/3 files (33.33%)
-removing side1
-updating: side2 2/3 files (66.67%)
-removing side2
-updating: main 3/3 files (100.00%)
-getting main
-1 files updated, 0 files merged, 2 files removed, 0 files unresolved
-Should only show a main
-a
-main
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-update-reverse.t Tue Sep 14 16:21:01 2010 -0500
@@ -0,0 +1,85 @@
+ $ hg init
+
+ $ touch a
+ $ hg add a
+ $ hg commit -m "Added a"
+
+ $ touch main
+ $ hg add main
+ $ hg commit -m "Added main"
+ $ hg checkout 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+'main' should be gone:
+
+ $ ls
+ a
+
+ $ touch side1
+ $ hg add side1
+ $ hg commit -m "Added side1"
+ created new head
+ $ touch side2
+ $ hg add side2
+ $ hg commit -m "Added side2"
+
+ $ hg log
+ changeset: 3:91ebc10ed028
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: Added side2
+
+ changeset: 2:b932d7dbb1e1
+ parent: 0:c2eda428b523
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: Added side1
+
+ changeset: 1:71a760306caf
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: Added main
+
+ changeset: 0:c2eda428b523
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: Added a
+
+
+ $ hg heads
+ changeset: 3:91ebc10ed028
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: Added side2
+
+ changeset: 1:71a760306caf
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: Added main
+
+ $ ls
+ a
+ side1
+ side2
+
+ $ hg update --debug -C 1
+ resolving manifests
+ overwrite True partial False
+ ancestor 91ebc10ed028+ local 91ebc10ed028+ remote 71a760306caf
+ side2: other deleted -> r
+ side1: other deleted -> r
+ main: remote created -> g
+ updating: side1 1/3 files (33.33%)
+ removing side1
+ updating: side2 2/3 files (66.67%)
+ removing side2
+ updating: main 3/3 files (100.00%)
+ getting main
+ 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
+
+ $ ls
+ a
+ main
+