--- a/contrib/hgk Wed May 10 17:05:43 2006 -0500
+++ b/contrib/hgk Wed May 17 13:21:36 2006 -0500
@@ -196,6 +196,7 @@
}
foreach line [split $contents "\n"] {
if {$inhdr} {
+ set line [split $line]
if {$line == {}} {
set inhdr 0
} else {
@@ -203,11 +204,11 @@
if {$tag == "author"} {
set x [expr {[llength $line] - 2}]
set audate [lindex $line $x]
- set auname [lrange $line 1 [expr {$x - 1}]]
+ set auname [join [lrange $line 1 [expr {$x - 1}]]]
} elseif {$tag == "committer"} {
set x [expr {[llength $line] - 2}]
set comdate [lindex $line $x]
- set comname [lrange $line 1 [expr {$x - 1}]]
+ set comname [join [lrange $line 1 [expr {$x - 1}]]]
}
}
} else {
--- a/contrib/win32/ReadMe.html Wed May 10 17:05:43 2006 -0500
+++ b/contrib/win32/ReadMe.html Wed May 17 13:21:36 2006 -0500
@@ -14,7 +14,7 @@
</head>
<body>
- <h1>Mercurial version 0.8.1 for Windows</h1>
+ <h1>Mercurial version 0.9 for Windows</h1>
<p>Welcome to Mercurial for Windows!</p>
--- a/contrib/win32/mercurial.iss Wed May 10 17:05:43 2006 -0500
+++ b/contrib/win32/mercurial.iss Wed May 17 13:21:36 2006 -0500
@@ -4,7 +4,7 @@
[Setup]
AppCopyright=Copyright 2005, 2006 Matt Mackall and others
AppName=Mercurial
-AppVerName=Mercurial version 0.8.1
+AppVerName=Mercurial version 0.9
InfoAfterFile=contrib/win32/postinstall.txt
LicenseFile=COPYING
ShowLanguageDialog=yes
@@ -14,10 +14,10 @@
AppUpdatesURL=http://www.selenic.com/mercurial
AppID={{4B95A5F1-EF59-4B08-BED8-C891C46121B3}
AppContact=mercurial@selenic.com
-OutputBaseFilename=Mercurial-0.8.1
+OutputBaseFilename=Mercurial-0.9
DefaultDirName={sd}\Mercurial
SourceDir=C:\hg\hg-release
-VersionInfoVersion=0.8.1
+VersionInfoVersion=0.9
VersionInfoDescription=Mercurial distributed SCM
VersionInfoCopyright=Copyright 2005, 2006 Matt Mackall and others
VersionInfoCompany=Matt Mackall and others
--- a/contrib/win32/postinstall.txt Wed May 10 17:05:43 2006 -0500
+++ b/contrib/win32/postinstall.txt Wed May 17 13:21:36 2006 -0500
@@ -4,10 +4,47 @@
For configuration and usage directions, please read the ReadMe.html
file that comes with this package.
-
Release Notes
-------------
+2006-05-10 v0.9
+
+* Major changes between Mercurial 0.8.1 and 0.9:
+
+ - The repository file format has been improved.
+ - This has resulted in an average 40% reduction in disk space usage.
+ - The new format (called RevlogNG) is now the default.
+ - Mercurial works perfectly with both the old and new repository
+ file formats. It can transfer changes transparently between
+ repositories of either format.
+ - To use the new repository format, simply use `hg clone --pull` to
+ clone an existing repository.
+ - Note: Versions 0.8.1 and earlier of Mercurial cannot read
+ RevlogNG repositories directly, but they can `clone`, `pull`
+ from, and `push` to servers that are serving RevlogNG
+ repositories.
+ - Memory usage has been improved by over 50% for many common operations.
+ - Substantial performance improvements on large repositories.
+ - New commands:
+ - 'archive' - generate a directory tree snapshot, tarball, or zip
+ file of a revision
+ - Deprecated commands:
+ - 'addremove' - replaced by 'add' and 'remove --after'
+ - 'forget' - replaced by 'revert'
+ - 'undo' - replaced by 'rollback'
+ - New extensions:
+ - Bugzilla integration hook
+ - Email notification hook
+ - Nested repositories are now supported. Mercurial will not recurse
+ into a subdirectory that contains a '.hg' directory. It is treated
+ as a separate repository.
+ - The standalone web server, 'hg serve', is now threaded, so it can
+ talk to multiple clients at a time.
+ - The web server can now display a "message of the day".
+ - Support added for hooks written in Python.
+ - Many improvements and clarifications to built-in help.
+
+
2006-04-07 v0.8.1
* Major changes from 0.8 to 0.8.1:
--- a/doc/hgrc.5.txt Wed May 10 17:05:43 2006 -0500
+++ b/doc/hgrc.5.txt Wed May 17 13:21:36 2006 -0500
@@ -135,6 +135,20 @@
from;;
Optional. Email address to use in "From" header and SMTP envelope
of outgoing messages.
+ method;;
+ Optional. Method to use to send email messages. If value is
+ "smtp" (default), use SMTP (see section "[mail]" for
+ configuration). Otherwise, use as name of program to run that
+ acts like sendmail (takes "-f" option for sender, list of
+ recipients on command line, message on stdin). Normally, setting
+ this to "sendmail" or "/usr/sbin/sendmail" is enough to use
+ sendmail to send messages.
+
+ Email example:
+
+ [email]
+ from = Joseph User <joe.user@example.com>
+ method = /usr/sbin/sendmail
extensions::
Mercurial has an extension mechanism for adding new features. To
@@ -219,15 +233,24 @@
commit to proceed. Non-zero status will cause the transaction to
be rolled back. ID of changeset is in $HG_NODE. Parent changeset
IDs are in $HG_PARENT1 and $HG_PARENT2.
+ preupdate;;
+ Run before updating the working directory. Exit status 0 allows
+ the update to proceed. Non-zero status will prevent the update.
+ Changeset ID of first new parent is in $HG_PARENT1. If merge, ID
+ of second new parent is in $HG_PARENT2.
tag;;
Run after a tag is created. ID of tagged changeset is in
$HG_NODE. Name of tag is in $HG_TAG. Tag is local if
$HG_LOCAL=1, in repo if $HG_LOCAL=0.
+ update;;
+ Run after updating the working directory. Changeset ID of first
+ new parent is in $HG_PARENT1. If merge, ID of second new parent
+ is in $HG_PARENT2. If update succeeded, $HG_ERROR=0. If update
+ failed (e.g. because conflicts not resolved), $HG_ERROR=1.
- In earlier releases, the names of hook environment variables did not
- have a "HG_" prefix. These unprefixed names are still provided in
- the environment for backwards compatibility, but their use is
- deprecated, and they will be removed in a future release.
+ Note: In earlier releases, the names of hook environment variables
+ did not have a "HG_" prefix. The old unprefixed names are no longer
+ provided in the environment.
The syntax for Python hooks is as follows:
@@ -279,7 +302,15 @@
paths::
Assigns symbolic names to repositories. The left side is the
symbolic name, and the right gives the directory or URL that is the
- location of the repository.
+ location of the repository. Default paths can be declared by
+ setting the following entries.
+ default;;
+ Directory or URL to use when pulling if no source is specified.
+ Default is set to repository from which the current repository
+ was cloned.
+ default-push;;
+ Optional. Directory or URL to use when pushing if no destination
+ is specified.
ui::
User interface controls.
--- a/hgext/mq.py Wed May 10 17:05:43 2006 -0500
+++ b/hgext/mq.py Wed May 17 13:21:36 2006 -0500
@@ -281,7 +281,8 @@
message = '\n'.join(message)
try:
- f = os.popen("patch -p1 --no-backup-if-mismatch < '%s'" % (pf))
+ pp = util.find_in_path('gpatch', os.environ.get('PATH', ''), 'patch')
+ f = os.popen("%s -p1 --no-backup-if-mismatch < '%s'" % (pp, pf))
except:
self.ui.warn("patch failed, unable to continue (try -v)\n")
err = 1
--- a/hgext/notify.py Wed May 10 17:05:43 2006 -0500
+++ b/hgext/notify.py Wed May 17 13:21:36 2006 -0500
@@ -228,14 +228,13 @@
mail = self.ui.sendmail()
mail.sendmail(templater.email(msg['From']), self.subs, msgtext)
- def diff(self, node):
+ def diff(self, node, ref):
maxdiff = int(self.ui.config('notify', 'maxdiff', 300))
if maxdiff == 0:
return
fp = templater.stringio()
prev = self.repo.changelog.parents(node)[0]
- commands.dodiff(fp, self.ui, self.repo, prev,
- self.repo.changelog.tip())
+ commands.dodiff(fp, self.ui, self.repo, prev, ref)
difflines = fp.getvalue().splitlines(1)
if maxdiff > 0 and len(difflines) > maxdiff:
self.sio.write(_('\ndiffs (truncated from %d to %d lines):\n\n') %
@@ -260,8 +259,9 @@
count = end - start
for rev in xrange(start, end):
n.node(repo.changelog.node(rev))
+ n.diff(node, repo.changelog.tip())
else:
count = 1
n.node(node)
- n.diff(node)
+ n.diff(node, node)
n.send(node, count)
--- a/hgext/patchbomb.py Wed May 10 17:05:43 2006 -0500
+++ b/hgext/patchbomb.py Wed May 17 13:21:36 2006 -0500
@@ -254,8 +254,6 @@
else:
ui.status('Sending ', m['Subject'], ' ...\n')
mail.sendmail(sender, to + cc, m.as_string(0))
- if not opts['test'] and not opts['mbox']:
- mail.close()
cmdtable = {
'email':
--- a/mercurial/bundlerepo.py Wed May 10 17:05:43 2006 -0500
+++ b/mercurial/bundlerepo.py Wed May 17 13:21:36 2006 -0500
@@ -13,7 +13,7 @@
from node import *
from i18n import gettext as _
from demandload import demandload
-demandload(globals(), "changegroup util os struct")
+demandload(globals(), "changegroup util os struct bz2 tempfile")
import localrepo, changelog, manifest, filelog, revlog
@@ -50,7 +50,7 @@
continue
for p in (p1, p2):
if not p in self.nodemap:
- raise RevlogError(_("unknown parent %s") % short(p1))
+ raise revlog.RevlogError(_("unknown parent %s") % short(p1))
if linkmapper is None:
link = n
else:
@@ -76,12 +76,12 @@
return False
return rev in self.basemap
def bundlebase(self, rev): return self.basemap[rev]
- def chunk(self, rev, df=None):
+ def chunk(self, rev, df=None, cachelen=4096):
# Warning: in case of bundle, the diff is against bundlebase,
# not against rev - 1
# XXX: could use some caching
if not self.bundle(rev):
- return revlog.revlog.chunk(self, rev)
+ return revlog.revlog.chunk(self, rev, df, cachelen)
self.bundlefile.seek(self.start(rev))
return self.bundlefile.read(self.length(rev))
@@ -123,8 +123,8 @@
p1, p2 = self.parents(node)
if node != revlog.hash(text, p1, p2):
- raise RevlogError(_("integrity check failed on %s:%d")
- % (self.datafile, self.rev(node)))
+ raise revlog.RevlogError(_("integrity check failed on %s:%d")
+ % (self.datafile, self.rev(node)))
self.cache = (node, self.rev(node), text)
return text
@@ -159,19 +159,38 @@
class bundlerepository(localrepo.localrepository):
def __init__(self, ui, path, bundlename):
localrepo.localrepository.__init__(self, ui, path)
- f = open(bundlename, "rb")
- s = util.fstat(f)
- self.bundlefile = f
+ self.tempfile = None
+ self.bundlefile = open(bundlename, "rb")
header = self.bundlefile.read(6)
if not header.startswith("HG"):
raise util.Abort(_("%s: not a Mercurial bundle file") % bundlename)
elif not header.startswith("HG10"):
raise util.Abort(_("%s: unknown bundle version") % bundlename)
elif header == "HG10BZ":
- raise util.Abort(_("%s: compressed bundle not supported")
- % bundlename)
+ fdtemp, temp = tempfile.mkstemp(prefix="hg-bundle-",
+ suffix=".hg10un", dir=self.path)
+ self.tempfile = temp
+ fptemp = os.fdopen(fdtemp, 'wb')
+ def generator(f):
+ zd = bz2.BZ2Decompressor()
+ zd.decompress("BZ")
+ for chunk in f:
+ yield zd.decompress(chunk)
+ gen = generator(util.filechunkiter(self.bundlefile, 4096))
+
+ try:
+ fptemp.write("HG10UN")
+ for chunk in gen:
+ fptemp.write(chunk)
+ finally:
+ fptemp.close()
+ self.bundlefile.close()
+
+ self.bundlefile = open(self.tempfile, "rb")
+ # seek right after the header
+ self.bundlefile.seek(6)
elif header == "HG10UN":
- # uncompressed bundle supported
+ # nothing to do
pass
else:
raise util.Abort(_("%s: unknown bundle compression type")
@@ -205,3 +224,9 @@
def close(self):
"""Close assigned bundle file immediately."""
self.bundlefile.close()
+
+ def __del__(self):
+ if not self.bundlefile.closed:
+ self.bundlefile.close()
+ if self.tempfile is not None:
+ os.unlink(self.tempfile)
--- a/mercurial/commands.py Wed May 10 17:05:43 2006 -0500
+++ b/mercurial/commands.py Wed May 17 13:21:36 2006 -0500
@@ -756,13 +756,20 @@
def backout(ui, repo, rev, **opts):
'''reverse effect of earlier changeset
- Commit the backed out changes as a new changeset.
+ Commit the backed out changes as a new changeset. The new
+ changeset is a child of the backed out changeset.
If you back out a changeset other than the tip, a new head is
- created. The --merge option remembers the parent of the working
- directory before starting the backout, then merges the new head
- with it afterwards, to save you from doing this by hand. The
- result of this merge is not committed, as for a normal merge.'''
+ created. This head is the parent of the working directory. If
+ you back out an old changeset, your working directory will appear
+ old after the backout. You should merge the backout changeset
+ with another head.
+
+ The --merge option remembers the parent of the working directory
+ before starting the backout, then merges the new head with that
+ changeset afterwards. This saves you from doing the merge by
+ hand. The result of this merge is not committed, as for a normal
+ merge.'''
bail_if_changed(repo)
op1, op2 = repo.dirstate.parents()
@@ -782,6 +789,7 @@
commit_opts['addremove'] = False
if not commit_opts['message'] and not commit_opts['logfile']:
commit_opts['message'] = _("Backed out changeset %s") % (hex(node))
+ commit_opts['force_editor'] = True
commit(ui, repo, **commit_opts)
def nice(node):
return '%d:%s' % (repo.changelog.rev(node), short(node))
@@ -789,7 +797,7 @@
(nice(repo.changelog.tip()), nice(node)))
if opts['merge'] and op1 != node:
ui.status(_('merging with changeset %s\n') % nice(op1))
- update(ui, repo, hex(op1), **opts)
+ doupdate(ui, repo, hex(op1), **opts)
def bundle(ui, repo, fname, dest="default-push", **opts):
"""create a changegroup file
@@ -939,7 +947,7 @@
f.close()
if not opts['noupdate']:
- update(repo.ui, repo)
+ doupdate(repo.ui, repo)
d.close()
@@ -980,7 +988,8 @@
else:
files = []
try:
- repo.commit(files, message, opts['user'], opts['date'], match)
+ repo.commit(files, message, opts['user'], opts['date'], match,
+ force_editor=opts.get('force_editor'))
except ValueError, inst:
raise util.Abort(str(inst))
@@ -1296,10 +1305,11 @@
r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_, "", 0)
ui.write("digraph G {\n")
for i in range(r.count()):
- e = r.index[i]
- ui.write("\t%d -> %d\n" % (r.rev(e[4]), i))
- if e[5] != nullid:
- ui.write("\t%d -> %d\n" % (r.rev(e[5]), i))
+ node = r.node(i)
+ pp = r.parents(node)
+ ui.write("\t%d -> %d\n" % (r.rev(pp[0]), i))
+ if pp[1] != nullid:
+ ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i))
ui.write("}\n")
def debugrename(ui, repo, file, rev=None):
@@ -1947,7 +1957,7 @@
marked as changed for the next commit and a commit must be
performed before any further updates are allowed.
"""
- return update(ui, repo, node=node, merge=True, **opts)
+ return doupdate(ui, repo, node=node, merge=True, **opts)
def outgoing(ui, repo, dest="default-push", **opts):
"""show changesets not found in destination
@@ -2026,7 +2036,7 @@
return
if optupdate:
if modheads == 1:
- return update(ui, repo)
+ return doupdate(ui, repo)
else:
ui.status(_("not updating, since new heads added\n"))
if modheads > 1:
@@ -2268,6 +2278,7 @@
'you must specify the revision to revert to'))
else:
node = parent
+ pmf = None
mf = repo.manifest.read(repo.changelog.read(node)[0])
wlock = repo.wlock()
@@ -2350,7 +2361,12 @@
if exact: ui.warn(_('no changes needed to %s\n' % rel))
continue
if not in_mf:
- handle(remove, False)
+ if pmf is None:
+ # only need parent manifest in this unlikely case,
+ # so do not read by default
+ pmf = repo.manifest.read(repo.changelog.read(parent)[0])
+ if abs in pmf:
+ handle(remove, False)
update[abs] = True
repo.dirstate.forget(forget[0])
@@ -2725,15 +2741,19 @@
there is a linear relationship between the current version and the
requested version, the result is the requested version.
- Otherwise the result is a merge between the contents of the
- current working directory and the requested version. Files that
- changed between either parent are marked as changed for the next
- commit and a commit must be performed before any further updates
- are allowed.
+ To merge the working directory with another revision, use the
+ merge command.
By default, update will refuse to run if doing so would require
merging or discarding local changes.
"""
+ if merge:
+ ui.warn(_('(the -m/--merge option is deprecated; '
+ 'use the merge command instead)\n'))
+ return doupdate(ui, repo, node, merge, clean, force, branch, **opts)
+
+def doupdate(ui, repo, node=None, merge=False, clean=False, force=None,
+ branch=None, **opts):
if branch:
br = repo.branchlookup(branch=branch)
found = []
@@ -3100,7 +3120,7 @@
"^update|up|checkout|co":
(update,
[('b', 'branch', '', _('checkout the head of a specific branch')),
- ('m', 'merge', None, _('allow merging of branches')),
+ ('m', 'merge', None, _('allow merging of branches (DEPRECATED)')),
('C', 'clean', None, _('overwrite locally modified files')),
('f', 'force', None, _('force a merge with outstanding changes'))],
_('hg update [-b TAG] [-m] [-C] [-f] [REV]')),
@@ -3116,6 +3136,7 @@
_('do not prompt, assume \'yes\' for any required answers')),
('q', 'quiet', None, _('suppress output')),
('v', 'verbose', None, _('enable additional output')),
+ ('', 'config', [], _('set/override config option')),
('', 'debug', None, _('enable debugging output')),
('', 'debugger', None, _('start debugger')),
('', 'traceback', None, _('print traceback on exception')),
@@ -3280,7 +3301,8 @@
atexit.register(print_time)
u.updateopts(options["verbose"], options["debug"], options["quiet"],
- not options["noninteractive"], options["traceback"])
+ not options["noninteractive"], options["traceback"],
+ options["config"])
# enter the debugger before command execution
if options['debugger']:
--- a/mercurial/hgweb.py Wed May 10 17:05:43 2006 -0500
+++ b/mercurial/hgweb.py Wed May 17 13:21:36 2006 -0500
@@ -684,7 +684,7 @@
mf = self.repo.manifest.read(cs[0])
def diff(**map):
- yield self.diff(p1, n, file)
+ yield self.diff(p1, n, [file])
yield self.t("filediff",
file=file,
--- a/mercurial/httprepo.py Wed May 10 17:05:43 2006 -0500
+++ b/mercurial/httprepo.py Wed May 17 13:21:36 2006 -0500
@@ -11,6 +11,25 @@
from demandload import *
demandload(globals(), "hg os urllib urllib2 urlparse zlib util httplib")
+class passwordmgr(urllib2.HTTPPasswordMgr):
+ def __init__(self, ui):
+ urllib2.HTTPPasswordMgr.__init__(self)
+ self.ui = ui
+
+ def find_user_password(self, realm, authuri):
+ authinfo = urllib2.HTTPPasswordMgr.find_user_password(
+ self, realm, authuri)
+ if authinfo != (None, None):
+ return authinfo
+
+ self.ui.write(_("http authorization required\n"))
+ self.ui.status(_("realm: %s\n") % realm)
+ user = self.ui.prompt(_("user:"), default=None)
+ passwd = self.ui.getpass()
+
+ self.add_password(realm, authuri, user, passwd)
+ return (user, passwd)
+
class httprepository(remoterepository):
def __init__(self, ui, path):
# fix missing / after hostname
@@ -53,13 +72,21 @@
if host and not no_proxy:
proxy_handler = urllib2.ProxyHandler({"http" : "http://" + host})
- authinfo = None
+ proxyauthinfo = None
if user and passwd:
passmgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
passmgr.add_password(None, host, user, passwd)
- authinfo = urllib2.ProxyBasicAuthHandler(passmgr)
+ proxyauthinfo = urllib2.ProxyBasicAuthHandler(passmgr)
- opener = urllib2.build_opener(proxy_handler, authinfo)
+ if ui.interactive:
+ passmgr = passwordmgr(ui)
+ opener = urllib2.build_opener(
+ proxy_handler, proxyauthinfo,
+ urllib2.HTTPBasicAuthHandler(passmgr),
+ urllib2.HTTPDigestAuthHandler(passmgr))
+ else:
+ opener = urllib2.build_opener(proxy_handler, proxyauthinfo)
+
# 1.0 here is the _protocol_ version
opener.addheaders = [('User-agent', 'mercurial/proto-1.0')]
urllib2.install_opener(opener)
@@ -76,7 +103,10 @@
q.update(args)
qs = urllib.urlencode(q)
cu = "%s?%s" % (self.url, qs)
- resp = urllib2.urlopen(cu)
+ try:
+ resp = urllib2.urlopen(cu)
+ except httplib.HTTPException, inst:
+ raise IOError(None, _('http error while sending %s command') % cmd)
proto = resp.headers['content-type']
# accept old "text/plain" and "application/hg-changegroup" for now
--- a/mercurial/localrepo.py Wed May 10 17:05:43 2006 -0500
+++ b/mercurial/localrepo.py Wed May 17 13:21:36 2006 -0500
@@ -136,8 +136,7 @@
def runhook(name, cmd):
self.ui.note(_("running hook %s: %s\n") % (name, cmd))
- env = dict([('HG_' + k.upper(), v) for k, v in args.iteritems()] +
- [(k.upper(), v) for k, v in args.iteritems()])
+ env = dict([('HG_' + k.upper(), v) for k, v in args.iteritems()])
r = util.system(cmd, environ=env, cwd=self.root)
if r:
desc, r = util.explain_exit(r)
@@ -446,7 +445,8 @@
self.dirstate.setparents(n, nullid)
def commit(self, files=None, text="", user=None, date=None,
- match=util.always, force=False, lock=None, wlock=None):
+ match=util.always, force=False, lock=None, wlock=None,
+ force_editor=False):
commit = []
remove = []
changed = []
@@ -535,8 +535,11 @@
new.sort()
user = user or self.ui.username()
- if not text:
- edittext = [""]
+ if not text or force_editor:
+ edittext = []
+ if text:
+ edittext.append(text)
+ edittext.append("")
if p2 != nullid:
edittext.append("HG: branch merge")
edittext.extend(["HG: changed %s" % f for f in changed])
@@ -1544,8 +1547,9 @@
" with %d changes to %d files%s\n")
% (changesets, revisions, files, heads))
- self.hook('pretxnchangegroup', throw=True,
- node=hex(self.changelog.node(cor+1)), source=srctype)
+ if changesets > 0:
+ self.hook('pretxnchangegroup', throw=True,
+ node=hex(self.changelog.node(cor+1)), source=srctype)
tr.close()
@@ -1563,8 +1567,7 @@
moddirstate=True, forcemerge=False, wlock=None, show_stats=True):
pl = self.dirstate.parents()
if not force and pl[1] != nullid:
- self.ui.warn(_("aborting: outstanding uncommitted merges\n"))
- return 1
+ raise util.Abort(_("outstanding uncommitted merges"))
err = False
@@ -1592,6 +1595,7 @@
if allow and not forcemerge:
if modified or added or removed:
raise util.Abort(_("outstanding uncommitted changes"))
+
if not forcemerge and not force:
for f in unknown:
if f in m2:
@@ -1765,6 +1769,13 @@
return 1
branch_merge = True
+ xp1 = hex(p1)
+ xp2 = hex(p2)
+ if p2 == nullid: xxp2 = ''
+ else: xxp2 = xp2
+
+ self.hook('preupdate', throw=True, parent1=xp1, parent2=xxp2)
+
# get the files we don't need to change
files = get.keys()
files.sort()
@@ -1785,8 +1796,6 @@
failedmerge = []
files = merge.keys()
files.sort()
- xp1 = hex(p1)
- xp2 = hex(p2)
for f in files:
self.ui.status(_("merging %s\n") % f)
my, other, flag = merge[f]
@@ -1850,6 +1859,7 @@
self.ui.status(_("There are unresolved merges with"
" locally modified files.\n"))
+ self.hook('update', parent1=xp1, parent2=xxp2, error=int(err))
return err
def merge3(self, fn, my, other, p1, p2):
--- a/mercurial/revlog.py Wed May 10 17:05:43 2006 -0500
+++ b/mercurial/revlog.py Wed May 17 13:21:36 2006 -0500
@@ -376,12 +376,7 @@
self.index = lazyindex(parser)
self.nodemap = lazymap(parser)
else:
- i = f.read()
- self.parseindex(i)
- if self.inlinedata():
- # we've already got the entire data file read in, save it
- # in the chunk data
- self.chunkcache = (0, i)
+ self.parseindex(f, st)
if self.version != REVLOGV0:
e = list(self.index[0])
type = self.ngtype(e[0])
@@ -392,22 +387,47 @@
self.index = []
- def parseindex(self, data):
+ def parseindex(self, fp, st):
s = struct.calcsize(self.indexformat)
- l = len(data)
self.index = []
self.nodemap = {nullid: -1}
inline = self.inlinedata()
- off = 0
n = 0
- while off < l:
- e = struct.unpack(self.indexformat, data[off:off + s])
- self.index.append(e)
- self.nodemap[e[-1]] = n
- n += 1
- off += s
- if inline:
- off += e[1]
+ leftover = None
+ while True:
+ if st:
+ data = fp.read(65536)
+ else:
+ # hack for httprangereader, it doesn't do partial reads well
+ data = fp.read()
+ if not data:
+ break
+ if n == 0 and self.inlinedata():
+ # cache the first chunk
+ self.chunkcache = (0, data)
+ if leftover:
+ data = leftover + data
+ leftover = None
+ off = 0
+ l = len(data)
+ while off < l:
+ if l - off < s:
+ leftover = data[off:]
+ break
+ cur = data[off:off + s]
+ off += s
+ e = struct.unpack(self.indexformat, cur)
+ self.index.append(e)
+ self.nodemap[e[-1]] = n
+ n += 1
+ if inline:
+ off += e[1]
+ if off > l:
+ # some things don't seek well, just read it
+ fp.read(off - l)
+ if not st:
+ break
+
def ngoffset(self, q):
if q & 0xFFFF:
@@ -1117,7 +1137,7 @@
for p in (p1, p2):
if not p in self.nodemap:
- raise RevlogError(_("unknown parent %s") % short(p1))
+ raise RevlogError(_("unknown parent %s") % short(p))
if not chain:
# retrieve the parent revision of the delta chain
--- a/mercurial/ui.py Wed May 10 17:05:43 2006 -0500
+++ b/mercurial/ui.py Wed May 17 13:21:36 2006 -0500
@@ -8,7 +8,8 @@
import ConfigParser
from i18n import gettext as _
from demandload import *
-demandload(globals(), "errno os re smtplib socket sys tempfile util")
+demandload(globals(), "errno getpass os re smtplib socket sys tempfile")
+demandload(globals(), "templater util")
class ui(object):
def __init__(self, verbose=False, debug=False, quiet=False,
@@ -46,12 +47,23 @@
return getattr(self.parentui, key)
def updateopts(self, verbose=False, debug=False, quiet=False,
- interactive=True, traceback=False):
+ interactive=True, traceback=False, config=[]):
self.quiet = (self.quiet or quiet) and not verbose and not debug
self.verbose = (self.verbose or verbose) or debug
self.debugflag = (self.debugflag or debug)
self.interactive = (self.interactive and interactive)
self.traceback = self.traceback or traceback
+ for cfg in config:
+ try:
+ name, value = cfg.split('=', 1)
+ section, name = name.split('.', 1)
+ if not self.cdata.has_section(section):
+ self.cdata.add_section(section)
+ if not section or not name:
+ raise IndexError
+ self.cdata.set(section, name, value)
+ except (IndexError, ValueError):
+ raise util.Abort(_('malformed --config option: %s') % cfg)
def readconfig(self, fn, root=None):
if isinstance(fn, basestring):
@@ -224,15 +236,18 @@
def readline(self):
return sys.stdin.readline()[:-1]
- def prompt(self, msg, pat, default="y"):
+ def prompt(self, msg, pat=None, default="y"):
if not self.interactive: return default
while 1:
self.write(msg, " ")
r = self.readline()
- if re.match(pat, r):
+ if not pat or re.match(pat, r):
return r
else:
self.write(_("unrecognized response\n"))
+ def getpass(self, prompt=None, default=None):
+ if not self.interactive: return default
+ return getpass.getpass(prompt or _('password: '))
def status(self, *msg):
if not self.quiet: self.write(*msg)
def warn(self, *msg):
@@ -267,15 +282,56 @@
return t
def sendmail(self):
- s = smtplib.SMTP()
- s.connect(host = self.config('smtp', 'host', 'mail'),
- port = int(self.config('smtp', 'port', 25)))
- if self.configbool('smtp', 'tls'):
- s.ehlo()
- s.starttls()
- s.ehlo()
- username = self.config('smtp', 'username')
- password = self.config('smtp', 'password')
- if username and password:
- s.login(username, password)
- return s
+ '''send mail message. object returned has one method, sendmail.
+ call as sendmail(sender, list-of-recipients, msg).'''
+
+ def smtp():
+ '''send mail using smtp.'''
+
+ s = smtplib.SMTP()
+ mailhost = self.config('smtp', 'host')
+ if not mailhost:
+ raise util.Abort(_('no [smtp]host in hgrc - cannot send mail'))
+ mailport = int(self.config('smtp', 'port', 25))
+ self.note(_('sending mail: smtp host %s, port %s\n') %
+ (mailhost, mailport))
+ s.connect(host=mailhost, port=mailport)
+ if self.configbool('smtp', 'tls'):
+ self.note(_('(using tls)\n'))
+ s.ehlo()
+ s.starttls()
+ s.ehlo()
+ username = self.config('smtp', 'username')
+ password = self.config('smtp', 'password')
+ if username and password:
+ self.note(_('(authenticating to mail server as %s)\n') %
+ (username))
+ s.login(username, password)
+ return s
+
+ class sendmail(object):
+ '''send mail using sendmail.'''
+
+ def __init__(self, ui, program):
+ self.ui = ui
+ self.program = program
+
+ def sendmail(self, sender, recipients, msg):
+ cmdline = '%s -f %s %s' % (
+ self.program, templater.email(sender),
+ ' '.join(map(templater.email, recipients)))
+ self.ui.note(_('sending mail: %s\n') % cmdline)
+ fp = os.popen(cmdline, 'w')
+ fp.write(msg)
+ ret = fp.close()
+ if ret:
+ raise util.Abort('%s %s' % (
+ os.path.basename(self.program.split(None, 1)[0]),
+ util.explain_exit(ret)[0]))
+
+ method = self.config('email', 'method', 'smtp')
+ if method == 'smtp':
+ mail = smtp()
+ else:
+ mail = sendmail(self, method)
+ return mail
--- a/mercurial/util.py Wed May 10 17:05:43 2006 -0500
+++ b/mercurial/util.py Wed May 17 13:21:36 2006 -0500
@@ -205,13 +205,15 @@
"""return the canonical path of myname, given cwd and root"""
if root == os.sep:
rootsep = os.sep
+ elif root.endswith(os.sep):
+ rootsep = root
else:
rootsep = root + os.sep
name = myname
if not os.path.isabs(name):
name = os.path.join(root, cwd, name)
name = os.path.normpath(name)
- if name.startswith(rootsep):
+ if name != rootsep and name.startswith(rootsep):
name = name[len(rootsep):]
audit_path(name)
return pconvert(name)
@@ -533,8 +535,16 @@
def os_rcpath():
'''return default os-specific hgrc search path'''
- return system_rcpath() + [os.path.join(os.path.expanduser('~'),
- 'mercurial.ini')]
+ path = system_rcpath()
+ path.append(user_rcpath())
+ userprofile = os.environ.get('USERPROFILE')
+ if userprofile:
+ path.append(os.path.join(userprofile, 'mercurial.ini'))
+ return path
+
+ def user_rcpath():
+ '''return os-specific hgrc search path to the user dir'''
+ return os.path.join(os.path.expanduser('~'), 'mercurial.ini')
def parse_patch_output(output_line):
"""parses the output produced by patch and returns the file name"""
@@ -597,7 +607,8 @@
def os_rcpath():
'''return default os-specific hgrc search path'''
path = []
- if len(sys.argv) > 0:
+ # old mod_python does not set sys.argv
+ if len(getattr(sys, 'argv', [])) > 0:
path.extend(rcfiles(os.path.dirname(sys.argv[0]) +
'/../etc/mercurial'))
path.extend(rcfiles('/etc/mercurial'))
--- a/mercurial/util_win32.py Wed May 10 17:05:43 2006 -0500
+++ b/mercurial/util_win32.py Wed May 17 13:21:36 2006 -0500
@@ -16,7 +16,7 @@
from demandload import *
from i18n import gettext as _
demandload(globals(), 'errno os pywintypes win32con win32file win32process')
-demandload(globals(), 'cStringIO winerror')
+demandload(globals(), 'cStringIO win32com.shell:shell,shellcon winerror')
class WinError:
winerror_map = {
@@ -180,9 +180,24 @@
def system_rcpath_win32():
'''return default os-specific hgrc search path'''
proc = win32api.GetCurrentProcess()
- filename = win32process.GetModuleFileNameEx(proc, 0)
+ try:
+ # This will fail on windows < NT
+ filename = win32process.GetModuleFileNameEx(proc, 0)
+ except:
+ filename = win32api.GetModuleFileName(0)
return [os.path.join(os.path.dirname(filename), 'mercurial.ini')]
+def user_rcpath():
+ '''return os-specific hgrc search path to the user dir'''
+ userdir = os.path.expanduser('~')
+ if userdir == '~':
+ # We are on win < nt: fetch the APPDATA directory location and use
+ # the parent directory as the user home dir.
+ appdir = shell.SHGetPathFromIDList(
+ qshell.SHGetSpecialFolderLocation(0, shellcon.CSIDL_APPDATA))
+ userdir = os.path.dirname(appdir)
+ return os.path.join(userdir, 'mercurial.ini')
+
class posixfile_nt(object):
'''file object with posix-like semantics. on windows, normal
files can not be deleted or renamed if they are open. must open
--- a/tests/README Wed May 10 17:05:43 2006 -0500
+++ b/tests/README Wed May 17 13:21:36 2006 -0500
@@ -16,10 +16,10 @@
There are some tricky points here that you should be aware of when
writing tests:
-- hg commit and hg up -m want user interaction
+- hg commit and hg merge want user interaction
for commit use -m "text"
- for hg up -m, set HGMERGE to something noninteractive (like true or merge)
+ for hg merge, set HGMERGE to something noninteractive (like true or merge)
- changeset hashes will change based on user and date which make
things like hg history output change
--- a/tests/run-tests.py Wed May 10 17:05:43 2006 -0500
+++ b/tests/run-tests.py Wed May 17 13:21:36 2006 -0500
@@ -242,24 +242,28 @@
COVERAGE_FILE = os.path.join(TESTDIR, ".coverage")
try:
- install_hg()
+ try:
+ install_hg()
- tests = 0
- failed = 0
+ tests = 0
+ failed = 0
- if len(args) == 0:
- args = os.listdir(".")
- for test in args:
- if test.startswith("test-"):
- if '~' in test or re.search(r'\.(out|err)$', test):
- continue
- if not run_one(test):
- failed += 1
- tests += 1
+ if len(args) == 0:
+ args = os.listdir(".")
+ for test in args:
+ if test.startswith("test-"):
+ if '~' in test or re.search(r'\.(out|err)$', test):
+ continue
+ if not run_one(test):
+ failed += 1
+ tests += 1
- print "\n# Ran %d tests, %d failed." % (tests, failed)
- if coverage:
- output_coverage()
+ print "\n# Ran %d tests, %d failed." % (tests, failed)
+ if coverage:
+ output_coverage()
+ except KeyboardInterrupt:
+ failed = True
+ print "\ninterrupted!"
finally:
cleanup_exit()
--- a/tests/test-backout.out Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-backout.out Wed May 17 13:21:36 2006 -0500
@@ -1,19 +1,19 @@
# basic operation
adding a
-changeset 2:b38a34ddfd9f backs out changeset 1:a820f4f40a57
+changeset 2:c86754337410 backs out changeset 1:a820f4f40a57
a
# file that was removed is recreated
adding a
adding a
-changeset 2:44cd84c7349a backs out changeset 1:76862dcce372
+changeset 2:d2d961bd79f2 backs out changeset 1:76862dcce372
content
# backout of backout is as if nothing happened
removing a
-changeset 3:0dd8a0ed5e99 backs out changeset 2:44cd84c7349a
+changeset 3:8a7eeb5ab5ce backs out changeset 2:d2d961bd79f2
cat: a: No such file or directory
# backout with merge
adding a
-changeset 3:6c77ecc28460 backs out changeset 1:314f55b1bf23
+changeset 3:3c9e845b409c backs out changeset 1:314f55b1bf23
merging with changeset 2:b66ea5b77abb
merging a
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-bundle Wed May 17 13:21:36 2006 -0500
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+hg init test
+cd test
+echo 0 > afile
+hg add afile
+hg commit -m "0.0" -d "1000000 0"
+echo 1 >> afile
+hg commit -m "0.1" -d "1000000 0"
+echo 2 >> afile
+hg commit -m "0.2" -d "1000000 0"
+echo 3 >> afile
+hg commit -m "0.3" -d "1000000 0"
+hg update -C 0
+echo 1 >> afile
+hg commit -m "1.1" -d "1000000 0"
+echo 2 >> afile
+hg commit -m "1.2" -d "1000000 0"
+echo "a line" > fred
+echo 3 >> afile
+hg add fred
+hg commit -m "1.3" -d "1000000 0"
+hg mv afile adifferentfile
+hg commit -m "1.3m" -d "1000000 0"
+hg update -C 3
+hg mv afile anotherfile
+hg commit -m "0.3m" -d "1000000 0"
+hg verify
+cd ..
+hg init empty
+hg -R test bundle full.hg empty
+hg -R test unbundle full.hg
+hg -R empty unbundle full.hg
+hg -R empty heads
+hg -R empty verify
+
+rm -rf empty
+hg init empty
+cd empty
+hg -R bundle://../full.hg log
+#doesn't work (yet ?)
+#hg -R bundle://../full.hg verify
+hg pull bundle://../full.hg
+cd ..
+
+rm -rf empty
+hg init empty
+hg clone -r 3 test partial
+hg clone partial partial2
+cd partial
+hg -R bundle://../full.hg log
+hg incoming bundle://../full.hg
+hg -R bundle://../full.hg outgoing ../partial2
+cd ..
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-bundle.out Wed May 17 13:21:36 2006 -0500
@@ -0,0 +1,203 @@
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+1 files updated, 0 files merged, 2 files removed, 0 files unresolved
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+4 files, 9 changesets, 7 total revisions
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 0 changesets with 0 changes to 4 files
+(run 'hg update' to get a working copy)
+adding changesets
+adding manifests
+adding file changes
+added 9 changesets with 7 changes to 4 files (+1 heads)
+(run 'hg heads' to see heads, 'hg merge' to merge)
+changeset: 8:836ac62537ab
+tag: tip
+parent: 3:ac69c658229d
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.3m
+
+changeset: 7:80fe151401c2
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.3m
+
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+4 files, 9 changesets, 7 total revisions
+changeset: 8:836ac62537ab
+tag: tip
+parent: 3:ac69c658229d
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.3m
+
+changeset: 7:80fe151401c2
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.3m
+
+changeset: 6:1e3f6b843bd6
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.3
+
+changeset: 5:024e4e7df376
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.2
+
+changeset: 4:5f4f3ceb285e
+parent: 0:5649c9d34dd8
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.1
+
+changeset: 3:ac69c658229d
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.3
+
+changeset: 2:d62976ca1e50
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.2
+
+changeset: 1:10b2180f755b
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.1
+
+changeset: 0:5649c9d34dd8
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.0
+
+pulling from bundle://../full.hg
+requesting all changes
+adding changesets
+adding manifests
+adding file changes
+added 9 changesets with 7 changes to 4 files (+1 heads)
+(run 'hg heads' to see heads, 'hg merge' to merge)
+requesting all changes
+adding changesets
+adding manifests
+adding file changes
+added 4 changesets with 4 changes to 1 files
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+changeset: 8:836ac62537ab
+tag: tip
+parent: 3:ac69c658229d
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.3m
+
+changeset: 7:80fe151401c2
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.3m
+
+changeset: 6:1e3f6b843bd6
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.3
+
+changeset: 5:024e4e7df376
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.2
+
+changeset: 4:5f4f3ceb285e
+parent: 0:5649c9d34dd8
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.1
+
+changeset: 3:ac69c658229d
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.3
+
+changeset: 2:d62976ca1e50
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.2
+
+changeset: 1:10b2180f755b
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.1
+
+changeset: 0:5649c9d34dd8
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.0
+
+searching for changes
+changeset: 4:5f4f3ceb285e
+parent: 0:5649c9d34dd8
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.1
+
+changeset: 5:024e4e7df376
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.2
+
+changeset: 6:1e3f6b843bd6
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.3
+
+changeset: 7:80fe151401c2
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.3m
+
+changeset: 8:836ac62537ab
+tag: tip
+parent: 3:ac69c658229d
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.3m
+
+searching for changes
+changeset: 4:5f4f3ceb285e
+parent: 0:5649c9d34dd8
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.1
+
+changeset: 5:024e4e7df376
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.2
+
+changeset: 6:1e3f6b843bd6
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.3
+
+changeset: 7:80fe151401c2
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1.3m
+
+changeset: 8:836ac62537ab
+tag: tip
+parent: 3:ac69c658229d
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0.3m
+
--- a/tests/test-conflict Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-conflict Wed May 17 13:21:36 2006 -0500
@@ -10,7 +10,7 @@
echo "something else" > a
hg commit -m branch2 -d "1000000 0"
HGMERGE=merge; export HGMERGE
-hg up -m 1
+hg merge 1
hg id
egrep -v ">>>|<<<" a
hg status
--- a/tests/test-confused-revert Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-confused-revert Wed May 17 13:21:36 2006 -0500
@@ -28,7 +28,7 @@
echo foo-b > a
hg commit -m "2b" -d "1000000 0"
-HGMERGE=true hg update -m 1
+HGMERGE=true hg merge 1
echo "%%% should show foo-b"
cat a
--- a/tests/test-excessive-merge Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-excessive-merge Wed May 17 13:21:36 2006 -0500
@@ -17,12 +17,12 @@
echo blah > b
hg ci -m "branch b" -d "1000000 0"
-HGMERGE=true hg up -m 1
+HGMERGE=true hg merge 1
hg ci -m "merge b/a -> blah" -d "1000000 0"
hg co 1
-HGMERGE=true hg up -m 2
+HGMERGE=true hg merge 2
hg ci -m "merge a/b -> blah" -d "1000000 0"
hg log
@@ -43,4 +43,4 @@
hg debugindex .hg/data/a.i
-hg verify
\ No newline at end of file
+hg verify
--- a/tests/test-filebranch Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-filebranch Wed May 17 13:21:36 2006 -0500
@@ -41,7 +41,7 @@
echo merging
hg pull ../a
-env HGMERGE=../merge hg update -vm
+env HGMERGE=../merge hg merge -v
echo 2m > foo
echo 2b > baz
--- a/tests/test-flags Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-flags Wed May 17 13:21:36 2006 -0500
@@ -27,7 +27,7 @@
hg heads
hg history
-hg -v co -m
+hg -v merge
ls -l ../test[12]/a > foo
cut -b 1-10 < foo
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-globalopts Wed May 17 13:21:36 2006 -0500
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+hg init a
+cd a
+echo a > a
+hg ci -A -d'1 0' -m a
+
+cd ..
+
+hg init b
+cd b
+echo b > b
+hg ci -A -d'1 0' -m b
+
+cd ..
+
+hg clone a c
+cd c
+hg pull -f ../b
+HGMERGE=merge hg merge
+
+cd ..
+
+echo %% -R/--repository
+hg -R a tip
+hg --repository b tip
+
+echo %% abbrev of long option
+hg --repo c tip
+
+echo %% --cwd
+hg --cwd a parents
+
+echo %% -y/--noninteractive - just be sure it is parsed
+hg --cwd a tip -q --noninteractive
+hg --cwd a tip -q -y
+
+echo %% -q/--quiet
+hg -R a -q tip
+hg -R b -q tip
+hg -R c --quiet parents
+
+echo %% -v/--verbose
+hg --cwd c head -v
+hg --cwd b tip --verbose
+
+echo %% --config
+hg --cwd c --config paths.quuxfoo=bar paths | grep -q quuxfoo && echo quuxfoo
+hg --cwd c --config '' tip -q
+hg --cwd c --config a.b tip -q
+hg --cwd c --config a tip -q
+hg --cwd c --config a.= tip -q
+hg --cwd c --config .b= tip -q
+
+echo %% --debug
+hg --cwd c log --debug
+
+echo %% --traceback
+hg --cwd c --config x --traceback tip 2>&1 | grep -i 'traceback'
+
+echo %% --time
+hg --cwd a --time tip 2>&1 | grep '^Time:' | sed 's/[0-9][0-9]*/x/g'
+
+echo %% --version
+hg --version -q | sed 's/version [a-f0-9+]*/version xxx/'
+
+echo %% -h/--help
+hg -h
+hg --help
+
+echo %% not tested: --debugger
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-globalopts.out Wed May 17 13:21:36 2006 -0500
@@ -0,0 +1,205 @@
+adding a
+adding b
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+pulling from ../b
+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)
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+%% -R/--repository
+changeset: 0:8580ff50825a
+tag: tip
+user: test
+date: Thu Jan 01 00:00:01 1970 +0000
+summary: a
+
+changeset: 0:b6c483daf290
+tag: tip
+user: test
+date: Thu Jan 01 00:00:01 1970 +0000
+summary: b
+
+%% abbrev of long option
+changeset: 1:b6c483daf290
+tag: tip
+user: test
+date: Thu Jan 01 00:00:01 1970 +0000
+summary: b
+
+%% --cwd
+changeset: 0:8580ff50825a
+tag: tip
+user: test
+date: Thu Jan 01 00:00:01 1970 +0000
+summary: a
+
+%% -y/--noninteractive - just be sure it is parsed
+0:8580ff50825a
+0:8580ff50825a
+%% -q/--quiet
+0:8580ff50825a
+0:b6c483daf290
+0:8580ff50825a
+1:b6c483daf290
+%% -v/--verbose
+changeset: 1:b6c483daf2907ce5825c0bb50f5716226281cc1a
+tag: tip
+user: test
+date: Thu Jan 01 00:00:01 1970 +0000
+files: b
+description:
+b
+
+
+changeset: 0:8580ff50825a50c8f716709acdf8de0deddcd6ab
+user: test
+date: Thu Jan 01 00:00:01 1970 +0000
+files: a
+description:
+a
+
+
+changeset: 0:b6c483daf2907ce5825c0bb50f5716226281cc1a
+tag: tip
+user: test
+date: Thu Jan 01 00:00:01 1970 +0000
+files: b
+description:
+b
+
+
+%% --config
+quuxfoo
+abort: malformed --config option:
+abort: malformed --config option: a.b
+abort: malformed --config option: a
+abort: malformed --config option: a.=
+abort: malformed --config option: .b=
+%% --debug
+changeset: 1:b6c483daf2907ce5825c0bb50f5716226281cc1a
+tag: tip
+parent: -1:0000000000000000000000000000000000000000
+parent: -1:0000000000000000000000000000000000000000
+manifest: 1:23226e7a252cacdc2d99e4fbdc3653441056de49
+user: test
+date: Thu Jan 01 00:00:01 1970 +0000
+files+: b
+description:
+b
+
+
+changeset: 0:8580ff50825a50c8f716709acdf8de0deddcd6ab
+parent: -1:0000000000000000000000000000000000000000
+parent: -1:0000000000000000000000000000000000000000
+manifest: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
+user: test
+date: Thu Jan 01 00:00:01 1970 +0000
+files+: a
+description:
+a
+
+
+%% --traceback
+%% --time
+Time: real x.x secs (user x.x+x.x sys x.x+x.x)
+%% --version
+Mercurial Distributed SCM (version xxx)
+%% -h/--help
+Mercurial Distributed SCM
+
+list of commands (use "hg help -v" to show aliases and global options):
+
+ add add the specified files on the next commit
+ annotate show changeset information per file line
+ archive create unversioned archive of a repository revision
+ backout reverse effect of earlier changeset
+ bundle create a changegroup file
+ cat output the latest or given revisions of files
+ clone make a copy of an existing repository
+ commit commit the specified files or all outstanding changes
+ copy mark files as copied for the next commit
+ diff diff repository (or selected files)
+ export dump the header and diffs for one or more changesets
+ grep search for a pattern in specified files and revisions
+ heads show current repository heads
+ help show help for a given command or all commands
+ identify print information about the working copy
+ import import an ordered set of patches
+ incoming show new changesets found in source
+ init create a new repository in the given directory
+ locate locate files matching specific patterns
+ log show revision history of entire repository or files
+ manifest output the latest or given revision of the project manifest
+ merge Merge working directory with another revision
+ outgoing show changesets not found in destination
+ parents show the parents of the working dir or revision
+ paths show definition of symbolic path names
+ pull pull changes from the specified source
+ push push changes to the specified destination
+ recover roll back an interrupted transaction
+ remove remove the specified files on the next commit
+ rename rename files; equivalent of copy + remove
+ revert revert files or dirs to their states as of some revision
+ rollback roll back the last transaction in this repository
+ root print the root (top) of the current working dir
+ serve export the repository via HTTP
+ status show changed files in the working directory
+ tag add a tag for the current tip or a given revision
+ tags list repository tags
+ tip show the tip revision
+ unbundle apply a changegroup file
+ update update or merge working directory
+ verify verify the integrity of the repository
+ version output version and copyright information
+Mercurial Distributed SCM
+
+list of commands (use "hg help -v" to show aliases and global options):
+
+ add add the specified files on the next commit
+ annotate show changeset information per file line
+ archive create unversioned archive of a repository revision
+ backout reverse effect of earlier changeset
+ bundle create a changegroup file
+ cat output the latest or given revisions of files
+ clone make a copy of an existing repository
+ commit commit the specified files or all outstanding changes
+ copy mark files as copied for the next commit
+ diff diff repository (or selected files)
+ export dump the header and diffs for one or more changesets
+ grep search for a pattern in specified files and revisions
+ heads show current repository heads
+ help show help for a given command or all commands
+ identify print information about the working copy
+ import import an ordered set of patches
+ incoming show new changesets found in source
+ init create a new repository in the given directory
+ locate locate files matching specific patterns
+ log show revision history of entire repository or files
+ manifest output the latest or given revision of the project manifest
+ merge Merge working directory with another revision
+ outgoing show changesets not found in destination
+ parents show the parents of the working dir or revision
+ paths show definition of symbolic path names
+ pull pull changes from the specified source
+ push push changes to the specified destination
+ recover roll back an interrupted transaction
+ remove remove the specified files on the next commit
+ rename rename files; equivalent of copy + remove
+ revert revert files or dirs to their states as of some revision
+ rollback roll back the last transaction in this repository
+ root print the root (top) of the current working dir
+ serve export the repository via HTTP
+ status show changed files in the working directory
+ tag add a tag for the current tip or a given revision
+ tags list repository tags
+ tip show the tip revision
+ unbundle apply a changegroup file
+ update update or merge working directory
+ verify verify the integrity of the repository
+ version output version and copyright information
+%% not tested: --debugger
--- a/tests/test-hook Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-hook Wed May 17 13:21:36 2006 -0500
@@ -29,7 +29,7 @@
echo b > b
hg add b
hg commit -m b -d '1 0'
-hg update -m 1
+hg merge 1
hg commit -m merge -d '2 0'
cd ../b
@@ -61,6 +61,14 @@
hg commit -m 'fail' -d '4 0'
hg -q tip
+# preupdate hook can prevent update
+echo 'preupdate = echo preupdate hook: p1=$HG_PARENT1 p2=$HG_PARENT2' >> .hg/hgrc
+hg update 1
+
+# update hook
+echo 'update = echo update hook: p1=$HG_PARENT1 p2=$HG_PARENT2 err=$HG_ERROR' >> .hg/hgrc
+hg update
+
# prechangegroup hook can prevent incoming changes
cd ../b
hg -q tip
--- a/tests/test-hook.out Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-hook.out Wed May 17 13:21:36 2006 -0500
@@ -62,6 +62,11 @@
precommit.forbid hook
abort: precommit.forbid hook exited with status 1
4:4f92e785b90a
+preupdate hook: p1=b702efe9688826e3a91283852b328b84dbf37bc2 p2=
+0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+preupdate hook: p1=4f92e785b90ae8995dfe156e39dd4fbc3b346a24 p2=
+update hook: p1=4f92e785b90ae8995dfe156e39dd4fbc3b346a24 p2= err=0
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
3:4c52fb2e4022
prechangegroup.forbid hook
pulling from ../a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-incoming-outgoing Wed May 17 13:21:36 2006 -0500
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+mkdir test
+cd test
+hg init
+for i in 0 1 2 3 4 5 6 7 8; do
+ echo $i >> foo
+ hg commit -A -m $i -d "1000000 0"
+done
+hg verify
+hg serve -p 20059 -d --pid-file=hg.pid
+cd ..
+
+hg init new
+# http incoming
+http_proxy= hg -R new incoming http://localhost:20059/
+# local incoming
+hg -R new incoming test
+
+# test with --bundle
+http_proxy= hg -R new incoming --bundle test.hg http://localhost:20059/
+hg -R new incoming --bundle test2.hg test
+
+# test the resulting bundles
+hg init temp
+hg init temp2
+hg -R temp unbundle test.hg
+hg -R temp2 unbundle test2.hg
+hg -R temp tip
+hg -R temp2 tip
+
+rm -rf temp temp2 new
+
+# test outgoing
+hg clone test test-dev
+cd test-dev
+for i in 9 10 11 12 13; do
+ echo $i >> foo
+ hg commit -A -m $i -d "1000000 0"
+done
+hg verify
+cd ..
+hg -R test-dev outgoing test
+http_proxy= hg -R test-dev outgoing http://localhost:20059/
+
+kill `cat test/hg.pid`
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-incoming-outgoing.out Wed May 17 13:21:36 2006 -0500
@@ -0,0 +1,272 @@
+adding foo
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+1 files, 9 changesets, 9 total revisions
+changeset: 0:9cb21d99fe27
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0
+
+changeset: 1:d717f5dfad6a
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1
+
+changeset: 2:c0d6b86da426
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 2
+
+changeset: 3:dfacbd43b3fe
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 3
+
+changeset: 4:1f3a964b6022
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 4
+
+changeset: 5:c028bcc7a28a
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 5
+
+changeset: 6:a0c0095f3389
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 6
+
+changeset: 7:d4be65f4e891
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 7
+
+changeset: 8:92b83e334ef8
+tag: tip
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 8
+
+changeset: 0:9cb21d99fe27
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0
+
+changeset: 1:d717f5dfad6a
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1
+
+changeset: 2:c0d6b86da426
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 2
+
+changeset: 3:dfacbd43b3fe
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 3
+
+changeset: 4:1f3a964b6022
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 4
+
+changeset: 5:c028bcc7a28a
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 5
+
+changeset: 6:a0c0095f3389
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 6
+
+changeset: 7:d4be65f4e891
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 7
+
+changeset: 8:92b83e334ef8
+tag: tip
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 8
+
+changeset: 0:9cb21d99fe27
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0
+
+changeset: 1:d717f5dfad6a
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1
+
+changeset: 2:c0d6b86da426
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 2
+
+changeset: 3:dfacbd43b3fe
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 3
+
+changeset: 4:1f3a964b6022
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 4
+
+changeset: 5:c028bcc7a28a
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 5
+
+changeset: 6:a0c0095f3389
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 6
+
+changeset: 7:d4be65f4e891
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 7
+
+changeset: 8:92b83e334ef8
+tag: tip
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 8
+
+changeset: 0:9cb21d99fe27
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 0
+
+changeset: 1:d717f5dfad6a
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 1
+
+changeset: 2:c0d6b86da426
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 2
+
+changeset: 3:dfacbd43b3fe
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 3
+
+changeset: 4:1f3a964b6022
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 4
+
+changeset: 5:c028bcc7a28a
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 5
+
+changeset: 6:a0c0095f3389
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 6
+
+changeset: 7:d4be65f4e891
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 7
+
+changeset: 8:92b83e334ef8
+tag: tip
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 8
+
+adding changesets
+adding manifests
+adding file changes
+added 9 changesets with 9 changes to 1 files
+(run 'hg update' to get a working copy)
+adding changesets
+adding manifests
+adding file changes
+added 9 changesets with 9 changes to 1 files
+(run 'hg update' to get a working copy)
+changeset: 8:92b83e334ef8
+tag: tip
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 8
+
+changeset: 8:92b83e334ef8
+tag: tip
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 8
+
+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, 14 changesets, 14 total revisions
+searching for changes
+changeset: 9:3741c3ad1096
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 9
+
+changeset: 10:de4143c8d9a5
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 10
+
+changeset: 11:0e1c188b9a7a
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 11
+
+changeset: 12:251354d0fdd3
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 12
+
+changeset: 13:bdaadd969642
+tag: tip
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 13
+
+searching for changes
+changeset: 9:3741c3ad1096
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 9
+
+changeset: 10:de4143c8d9a5
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 10
+
+changeset: 11:0e1c188b9a7a
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 11
+
+changeset: 12:251354d0fdd3
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 12
+
+changeset: 13:bdaadd969642
+tag: tip
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: 13
+
--- a/tests/test-merge1 Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-merge1 Wed May 17 13:21:36 2006 -0500
@@ -22,7 +22,7 @@
hg commit -m "commit #2" -d "1000000 0"
echo This is file b1 > b
echo %% no merges expected
-env HGMERGE=../merge hg update -m 1
+env HGMERGE=../merge hg merge 1
cd ..; /bin/rm -rf t
mkdir t
@@ -41,9 +41,9 @@
hg commit -m "commit #2" -d "1000000 0"
echo This is file b2 > b
echo %% merge should fail
-env HGMERGE=../merge hg update -m 1
+env HGMERGE=../merge hg merge 1
echo %% merge of b expected
-env HGMERGE=../merge hg update -f -m 1
+env HGMERGE=../merge hg merge -f 1
cd ..; /bin/rm -rf t
echo %%
@@ -68,9 +68,9 @@
echo This is file b22 > b
echo %% merge fails
-env HGMERGE=../merge hg update -m 2
+env HGMERGE=../merge hg merge 2
echo %% merge expected!
-env HGMERGE=../merge hg update -f -m 2
+env HGMERGE=../merge hg merge -f 2
cd ..; /bin/rm -rf t
mkdir t
@@ -90,7 +90,7 @@
hg commit -m "commit #3" -d "1000000 0"
echo This is file b33 > b
echo %% merge of b should fail
-env HGMERGE=../merge hg update -m 2
+env HGMERGE=../merge hg merge 2
echo %% merge of b expected
-env HGMERGE=../merge hg update -f -m 2
+env HGMERGE=../merge hg merge -f 2
cd ..; /bin/rm -rf t
--- a/tests/test-merge4 Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-merge4 Wed May 17 13:21:36 2006 -0500
@@ -11,7 +11,7 @@
echo This is file c1 > c
hg add c
hg commit -m "commit #2" -d "1000000 0"
-hg update -m 1
+hg merge 1
rm b
echo This is file c22 > c
hg commit -m "commit #3" -d "1000000 0"
--- a/tests/test-merge6 Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-merge6 Wed May 17 13:21:36 2006 -0500
@@ -33,14 +33,14 @@
cd A1
hg pull ../B1
-hg update -m
+hg merge
hg commit -m "commit test" -d "1000000 0"
echo bar should remain deleted.
hg manifest
cd ../B2
hg pull ../A2
-hg update -m
+hg merge
hg commit -m "commit test" -d "1000000 0"
echo bar should remain deleted.
hg manifest
--- a/tests/test-merge7 Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-merge7 Wed May 17 13:21:36 2006 -0500
@@ -35,7 +35,7 @@
# now pull and merge from test-a
hg pull ../test-a
-HGMERGE=merge hg update -m
+HGMERGE=merge hg merge
# resolve conflict
cat >test.txt <<"EOF"
one
@@ -57,7 +57,7 @@
# pull and merge from test-a again
cd ../test-b
hg pull ../test-a
-HGMERGE=merge hg update --debug -m
+HGMERGE=merge hg merge --debug
cat test.txt | sed "s% .*%%"
--- a/tests/test-merge7.out Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-merge7.out Wed May 17 13:21:36 2006 -0500
@@ -22,7 +22,7 @@
(run 'hg heads' to see heads, 'hg merge' to merge)
merge: warning: conflicts during merge
resolving manifests
- force None allow 1 moddirstate True linear False
+ force False allow True moddirstate True linear False
ancestor 055d847dd401 local 2eded9ab0a5c remote 84cf5750dd20
test.txt versions differ, resolve
merging test.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-parseindex Wed May 17 13:21:36 2006 -0500
@@ -0,0 +1,52 @@
+#!/bin/sh
+#
+# revlog.parseindex must be able to parse the index file even if
+# an index entry is split between two 64k blocks. The ideal test
+# would be to create an index file with inline data where
+# 64k < size < 64k + 64 (64k is the size of the read buffer, 64 is
+# the size of an index entry) and with an index entry starting right
+# before the 64k block boundary, and try to read it.
+#
+# We approximate that by reducing the read buffer to 1 byte.
+#
+
+hg init a
+cd a
+echo abc > foo
+hg add foo
+hg commit -m 'add foo' -d '1000000 0'
+
+echo >> foo
+hg commit -m 'change foo' -d '1000001 0'
+hg log -r 0:
+
+cat >> test.py << EOF
+from mercurial import changelog, util
+from mercurial.node import *
+
+class singlebyteread(object):
+ def __init__(self, real):
+ self.real = real
+
+ def read(self, size=-1):
+ if size == 65536:
+ size = 1
+ return self.real.read(size)
+
+ def __getattr__(self, key):
+ return getattr(self.real, key)
+
+def opener(*args):
+ o = util.opener(*args)
+ def wrapper(*a):
+ f = o(*a)
+ return singlebyteread(f)
+ return wrapper
+
+cl = changelog.changelog(opener('.hg'))
+print cl.count(), 'revisions:'
+for r in xrange(cl.count()):
+ print short(cl.node(r))
+EOF
+
+python test.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-parseindex.out Wed May 17 13:21:36 2006 -0500
@@ -0,0 +1,14 @@
+changeset: 0:9c2cf2b35aa7
+user: test
+date: Mon Jan 12 13:46:40 1970 +0000
+summary: add foo
+
+changeset: 1:3756a9556b89
+tag: tip
+user: test
+date: Mon Jan 12 13:46:41 1970 +0000
+summary: change foo
+
+2 revisions:
+9c2cf2b35aa7
+3756a9556b89
--- a/tests/test-push-warn Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-push-warn Wed May 17 13:21:36 2006 -0500
@@ -23,7 +23,7 @@
hg push ../a
hg pull ../a
hg push ../a
-hg up -m
+hg merge
hg commit -m "4" -d "1000000 0"
hg push ../a
cd ..
@@ -44,7 +44,7 @@
hg ci -m d-$i -d "1000000 0"
done
-HGMERGE=true hg co -m 3
+HGMERGE=true hg merge 3
hg ci -m c-d -d "1000000 0"
hg push ../c
--- a/tests/test-revert Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-revert Wed May 17 13:21:36 2006 -0500
@@ -68,4 +68,16 @@
echo %% should print executable
test -x c && echo executable
+echo %% issue 241
+hg init a
+cd a
+echo a >> a
+hg commit -A -d '1 0' -m a
+echo a >> a
+hg commit -d '2 0' -m a
+hg update 0
+mkdir b
+echo b > b/b
+hg revert -rtip
+
true
--- a/tests/test-revert.out Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-revert.out Wed May 17 13:21:36 2006 -0500
@@ -51,3 +51,6 @@
reverting c
%% should print executable
executable
+%% issue 241
+adding a
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-ro-message Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-ro-message Wed May 17 13:21:36 2006 -0500
@@ -14,4 +14,4 @@
"$HG" commit -m 'Clarifying the vehicle.'
"$HG" update -C 1
chmod a-w b/vehicle
-"$HG" update -m 2 2>&1 | sed 's|^\(.*[ ]\).*/\([^/]*/[^/]*/[^/]*\)$|\1\2|g'
+"$HG" merge 2 2>&1 | sed 's|^\(.*[ ]\).*/\([^/]*/[^/]*/[^/]*\)$|\1\2|g'
--- a/tests/test-tags Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-tags Wed May 17 13:21:36 2006 -0500
@@ -27,7 +27,7 @@
hg add b
hg commit -m "branch" -d "1000000 0"
hg id
-hg co -m 1
+hg merge 1
hg id
hg status
--- a/tests/test-up-local-change Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-up-local-change Wed May 17 13:21:36 2006 -0500
@@ -29,7 +29,7 @@
hg parents
hg --debug up 0
hg parents
-hg --debug up -m || echo failed
+hg --debug merge || echo failed
hg parents
hg --debug up
hg parents
@@ -50,8 +50,8 @@
hg status
hg parents
hg --debug up || echo failed
-hg --debug up -m || echo failed
-hg --debug up -f -m
+hg --debug merge || echo failed
+hg --debug merge -f
hg parents
hg diff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
-e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
--- a/tests/test-up-local-change.out Wed May 10 17:05:43 2006 -0500
+++ b/tests/test-up-local-change.out Wed May 17 13:21:36 2006 -0500
@@ -112,7 +112,7 @@
abort: outstanding uncommitted changes
failed
resolving manifests
- force None allow 1 moddirstate True linear False
+ force False allow True moddirstate True linear False
ancestor a0c8bcbbb45c local 1165e8bd193e remote 4096f2872392
a versions differ, resolve
b versions differ, resolve