--- a/contrib/hgk Wed Dec 19 19:21:30 2007 -0800
+++ b/contrib/hgk Wed Dec 19 19:23:18 2007 -0800
@@ -3844,7 +3844,7 @@
set colors {green red blue magenta darkgrey brown orange}
set authorcolors {
- deeppink mediumorchid blue burlywood4 goldenrod slateblue red2 navy dimgrey
+ black blue deeppink mediumorchid blue burlywood4 goldenrod slateblue red2 navy dimgrey
}
catch {source ~/.hgk}
--- a/contrib/macosx/Readme.html Wed Dec 19 19:21:30 2007 -0800
+++ b/contrib/macosx/Readme.html Wed Dec 19 19:23:18 2007 -0800
@@ -17,20 +17,11 @@
<body>
<p class="p1"><b>Before you install</b></p>
<p class="p2"><br></p>
-<p class="p3">This is <i>not</i> a stand-alone version of Mercurial.</p>
-<p class="p2"><br></p>
-<p class="p3">To use it, you must have the appropriate version of Universal MacPython from <a href="http://www.python.org">www.python.org</a> installed.</p>
-<p class="p2"><br></p>
-<p class="p3">You can find more information and download MacPython from here:</p>
-<p class="p4"><span class="s1"><a href="http://www.python.org/download">http://www.python.org/download</a></span></p>
-<p class="p2"><br></p>
-<p class="p3">Or direct links to the latest version are:</p>
-<p class="p4"><span class="s1"><a href="http://www.python.org/ftp/python/2.5.1/python-2.5.1-macosx.dmg">Python 2.5.1 for Macintosh OS X</a></span></p>
-<p class="p4"><span class="s1"><a href="http://www.python.org/ftp/python/2.4.4/python-2.4.4-macosx2006-10-18.dmg">Python 2.4.4 for Macintosh OS X</a></span></p>
+<p class="p3">This is an OS X 10.5 version of Mercurial that depends on the default Python 2.5 installation.</p>
<p class="p2"><br></p>
<p class="p1"><b>After you install</b></p>
<p class="p2"><br></p>
-<p class="p3">This package installs the <span class="s2">hg</span> executable in <span class="s2">/Library/Frameworks/Python.framework/Versions/Current/bin</span>. This directory may not be in your shell's search path. The MacPython installer will have created an entry in <span class="s2">.profile</span> for it but if your shell doesn't use <span class="s2">.profile</span> you'll need configure it yourself or create a symlink from a directory already in your path.</p>
+<p class="p3">This package installs the <span class="s2">hg</span> executable in <span class="s2">/usr/local/bin</span> and the Mercurial files in </span class="s2">/Library/Python/2.5/site-packages/mercurial.</span></p>
<p class="p2"><br></p>
<p class="p1"><b>Documentation</b></p>
<p class="p2"><br></p>
--- a/doc/hg.1.txt Wed Dec 19 19:21:30 2007 -0800
+++ b/doc/hg.1.txt Wed Dec 19 19:23:18 2007 -0800
@@ -89,8 +89,6 @@
A range acts as a closed interval. This means that a range of 3:5
gives 3, 4 and 5. Similarly, a range of 4:2 gives 4, 3, and 2.
-dot=.
-
FILES
-----
repo/.hgignore::
--- a/hgext/convert/convcmd.py Wed Dec 19 19:21:30 2007 -0800
+++ b/hgext/convert/convcmd.py Wed Dec 19 19:23:18 2007 -0800
@@ -145,7 +145,8 @@
if pl:
depth[n] = max([depth[p] for p in pl]) + 1
- s = [(depth[n], self.commitcache[n].date, n) for n in s]
+ s = [(depth[n], util.parsedate(self.commitcache[n].date), n)
+ for n in s]
s.sort()
s = [e[2] for e in s]
--- a/hgext/highlight.py Wed Dec 19 19:21:30 2007 -0800
+++ b/hgext/highlight.py Wed Dec 19 19:23:18 2007 -0800
@@ -66,20 +66,22 @@
yield 0, "</div>"
-def pygments_format(filename, rawtext, forcetext=False, stripecount=1,
- style='colorful'):
+def pygments_format(filename, rawtext, forcetext, encoding,
+ stripecount, style):
+ etext = util.tolocal(rawtext)
if not forcetext:
try:
- lexer = guess_lexer_for_filename(filename, rawtext)
+ lexer = guess_lexer_for_filename(filename, etext,
+ encoding=util._encoding)
except ClassNotFound:
- lexer = TextLexer()
+ lexer = TextLexer(encoding=util._encoding)
else:
- lexer = TextLexer()
+ lexer = TextLexer(encoding=util._encoding)
formatter = StripedHtmlFormatter(stripecount, style=style,
- linenos='inline')
+ linenos='inline', encoding=encoding)
- return highlight(rawtext, lexer, formatter)
+ return highlight(etext, lexer, formatter)
def filerevision_pygments(self, tmpl, fctx):
@@ -110,10 +112,8 @@
style = self.config("web", "pygments_style", "colorful")
- text_formatted = lines(pygments_format(f, text,
- forcetext=forcetext,
- stripecount=self.stripecount,
- style=style))
+ text_formatted = lines(pygments_format(f, text, forcetext, self.encoding,
+ self.stripecount, style))
# override per-line template
tmpl.cache['fileline'] = '#line#'
--- a/hgmerge Wed Dec 19 19:21:30 2007 -0800
+++ b/hgmerge Wed Dec 19 19:23:18 2007 -0800
@@ -17,8 +17,12 @@
BASE="$2"
OTHER="$3"
-if [ -z "$EDITOR" ]; then
- EDITOR="vi"
+if [ -n "$VISUAL" ]; then
+ EDIT_PROG="$VISUAL"
+elif [ -n "$EDITOR" ]; then
+ EDIT_PROG="$EDITOR"
+else
+ EDIT_PROG="vi"
fi
# find decent versions of our utilities, insisting on the GNU versions where we
@@ -165,16 +169,16 @@
fi
fi
-# Attempt to do a merge with $EDITOR
+# Attempt to do a merge with $EDIT_PROG
if [ -n "$MERGE" -o -n "$DIFF3" ]; then
echo "conflicts detected in $LOCAL"
cp "$BACKUP" "$CHGTEST"
- case "$EDITOR" in
+ case "$EDIT_PROG" in
"emacs")
- $EDITOR "$LOCAL" --eval '(condition-case nil (smerge-mode 1) (error nil))' || failure
+ $EDIT_PROG "$LOCAL" --eval '(condition-case nil (smerge-mode 1) (error nil))' || failure
;;
*)
- $EDITOR "$LOCAL" || failure
+ $EDIT_PROG "$LOCAL" || failure
;;
esac
# Some editors do not return meaningful error codes
@@ -195,7 +199,7 @@
success
else
# If rejects are empty after using the editor, merge was ok
- $EDITOR "$LOCAL" "$LOCAL.rej" || failure
+ $EDIT_PROG "$LOCAL" "$LOCAL.rej" || failure
$TEST -s "$LOCAL.rej" || success
fi
failure
--- a/mercurial/bundlerepo.py Wed Dec 19 19:21:30 2007 -0800
+++ b/mercurial/bundlerepo.py Wed Dec 19 19:23:18 2007 -0800
@@ -256,14 +256,25 @@
def instance(ui, path, create):
if create:
raise util.Abort(_('cannot create new bundle repository'))
+ parentpath = ui.config("bundle", "mainreporoot", "")
+ if parentpath:
+ # Try to make the full path relative so we get a nice, short URL.
+ # In particular, we don't want temp dir names in test outputs.
+ cwd = os.getcwd()
+ if parentpath == cwd:
+ parentpath = ''
+ else:
+ cwd = os.path.join(cwd,'')
+ if parentpath.startswith(cwd):
+ parentpath = parentpath[len(cwd):]
path = util.drop_scheme('file', path)
if path.startswith('bundle:'):
path = util.drop_scheme('bundle', path)
s = path.split("+", 1)
if len(s) == 1:
- repopath, bundlename = "", s[0]
+ repopath, bundlename = parentpath, s[0]
else:
repopath, bundlename = s
else:
- repopath, bundlename = '', path
+ repopath, bundlename = parentpath, path
return bundlerepository(ui, repopath, bundlename)
--- a/mercurial/commands.py Wed Dec 19 19:21:30 2007 -0800
+++ b/mercurial/commands.py Wed Dec 19 19:23:18 2007 -0800
@@ -430,8 +430,8 @@
If a list of files is omitted, all changes reported by "hg status"
will be committed.
- If no commit message is specified, the editor configured in your hgrc
- or in the EDITOR environment variable is started to enter a message.
+ If no commit message is specified, the configured editor is started to
+ enter a message.
"""
def commitfunc(ui, repo, files, message, match, opts):
return repo.commit(files, message, opts['user'], opts['date'], match,
@@ -748,9 +748,7 @@
# editor
ui.status(_("Checking commit editor...\n"))
- editor = (os.environ.get("HGEDITOR") or
- ui.config("ui", "editor") or
- os.environ.get("EDITOR", "vi"))
+ editor = ui.geteditor()
cmdpath = util.find_exe(editor) or util.find_exe(editor.split()[0])
if not cmdpath:
if editor == 'vi':
@@ -2428,8 +2426,15 @@
rev_ = opts['rev']
message = opts['message']
if opts['remove']:
- if not name in repo.tags():
+ tagtype = repo.tagtype(name)
+
+ if not tagtype:
raise util.Abort(_('tag %s does not exist') % name)
+ if opts['local'] and tagtype == 'global':
+ raise util.Abort(_('%s tag is global') % name)
+ if not opts['local'] and tagtype == 'local':
+ raise util.Abort(_('%s tag is local') % name)
+
rev_ = nullid
if not message:
message = _('Removed tag %s') % name
@@ -2451,23 +2456,33 @@
List the repository tags.
- This lists both regular and local tags.
+ This lists both regular and local tags. When the -v/--verbose switch
+ is used, a third column "local" is printed for local tags.
"""
l = repo.tagslist()
l.reverse()
hexfunc = ui.debugflag and hex or short
+ tagtype = ""
+
for t, n in l:
+ if ui.quiet:
+ ui.write("%s\n" % t)
+ continue
+
try:
hn = hexfunc(n)
- r = "%5d:%s" % (repo.changelog.rev(n), hexfunc(n))
+ r = "%5d:%s" % (repo.changelog.rev(n), hn)
except revlog.LookupError:
r = " ?:%s" % hn
- if ui.quiet:
- ui.write("%s\n" % t)
else:
spaces = " " * (30 - util.locallen(t))
- ui.write("%s%s %s\n" % (t, spaces, r))
+ if ui.verbose:
+ if repo.tagtype(t) == 'local':
+ tagtype = " local"
+ else:
+ tagtype = ""
+ ui.write("%s%s %s%s\n" % (t, spaces, r, tagtype))
def tip(ui, repo, **opts):
"""show the tip revision
--- a/mercurial/dispatch.py Wed Dec 19 19:21:30 2007 -0800
+++ b/mercurial/dispatch.py Wed Dec 19 19:23:18 2007 -0800
@@ -331,6 +331,7 @@
try:
repo = hg.repository(ui, path=path)
ui = repo.ui
+ ui.setconfig("bundle", "mainreporoot", repo.root)
if not repo.local():
raise util.Abort(_("repository '%s' is not local") % path)
except hg.RepoError:
--- a/mercurial/help.py Wed Dec 19 19:21:30 2007 -0800
+++ b/mercurial/help.py Wed Dec 19 19:23:18 2007 -0800
@@ -43,8 +43,7 @@
'hg' (with com/exe/bat/cmd extension on Windows) is searched.
HGEDITOR::
- This is the name of the editor to use when committing. Defaults to the
- value of EDITOR.
+ This is the name of the editor to use when committing. See EDITOR.
(deprecated, use .hgrc)
@@ -94,9 +93,16 @@
If neither HGUSER nor EMAIL is set, LOGNAME will be used (with
'@hostname' appended) as the author value for a commit.
+VISUAL::
+ This is the name of the editor to use when committing. See EDITOR.
+
EDITOR::
- This is the name of the editor used in the hgmerge script. It will be
- used for commit messages if HGEDITOR isn't set. Defaults to 'vi'.
+ Sometimes Mercurial needs to open a text file in an editor for a user
+ to modify, for example when writing commit messages or when using the
+ hgmerge script. The editor it uses is determined by looking at the
+ environment variables HGEDITOR, VISUAL and EDITOR, in that order. The
+ first non-empty one is chosen. If all of them are empty, the editor
+ defaults to 'vi'.
PYTHONPATH::
This is used by Python to find imported modules and may need to be set
--- a/mercurial/localrepo.py Wed Dec 19 19:21:30 2007 -0800
+++ b/mercurial/localrepo.py Wed Dec 19 19:23:18 2007 -0800
@@ -79,6 +79,7 @@
pass
self.tagscache = None
+ self._tagstypecache = None
self.branchcache = None
self.nodetagscache = None
self.filterpats = {}
@@ -198,8 +199,9 @@
return self.tagscache
globaltags = {}
+ tagtypes = {}
- def readtags(lines, fn):
+ def readtags(lines, fn, tagtype):
filetags = {}
count = 0
@@ -234,7 +236,9 @@
for k, nh in filetags.items():
if k not in globaltags:
globaltags[k] = nh
+ tagtypes[k] = tagtype
continue
+
# we prefer the global tag if:
# it supercedes us OR
# mutual supercedes and it has a higher rank
@@ -246,31 +250,47 @@
an = bn
ah.extend([n for n in bh if n not in ah])
globaltags[k] = an, ah
+ tagtypes[k] = tagtype
# read the tags file from each head, ending with the tip
f = None
for rev, node, fnode in self._hgtagsnodes():
f = (f and f.filectx(fnode) or
self.filectx('.hgtags', fileid=fnode))
- readtags(f.data().splitlines(), f)
+ readtags(f.data().splitlines(), f, "global")
try:
data = util.fromlocal(self.opener("localtags").read())
# localtags are stored in the local character set
# while the internal tag table is stored in UTF-8
- readtags(data.splitlines(), "localtags")
+ readtags(data.splitlines(), "localtags", "local")
except IOError:
pass
self.tagscache = {}
+ self._tagstypecache = {}
for k,nh in globaltags.items():
n = nh[0]
if n != nullid:
self.tagscache[k] = n
+ self._tagstypecache[k] = tagtypes[k]
self.tagscache['tip'] = self.changelog.tip()
return self.tagscache
+ def tagtype(self, tagname):
+ '''
+ return the type of the given tag. result can be:
+
+ 'local' : a local tag
+ 'global' : a global tag
+ None : tag does not exist
+ '''
+
+ self.tags()
+
+ return self._tagstypecache.get(tagname)
+
def _hgtagsnodes(self):
heads = self.heads()
heads.reverse()
@@ -553,6 +573,7 @@
if hasattr(self, a):
self.__delattr__(a)
self.tagscache = None
+ self._tagstypecache = None
self.nodetagscache = None
def _lock(self, lockname, wait, releasefn, acquirefn, desc):
@@ -1716,7 +1737,7 @@
for fname in changedfiles:
filerevlog = self.file(fname)
if filerevlog.count() == 0:
- raise util.abort(_("empty or missing revlog for %s") % fname)
+ raise util.Abort(_("empty or missing revlog for %s") % fname)
# Toss out the filenodes that the recipient isn't really
# missing.
if msng_filenode_set.has_key(fname):
@@ -1802,7 +1823,7 @@
for fname in changedfiles:
filerevlog = self.file(fname)
if filerevlog.count() == 0:
- raise util.abort(_("empty or missing revlog for %s") % fname)
+ raise util.Abort(_("empty or missing revlog for %s") % fname)
nodeiter = gennodelst(filerevlog)
nodeiter = list(nodeiter)
if nodeiter:
--- a/mercurial/revlog.py Wed Dec 19 19:21:30 2007 -0800
+++ b/mercurial/revlog.py Wed Dec 19 19:23:18 2007 -0800
@@ -112,8 +112,6 @@
# lazyparser is not safe to use on windows if win32 extensions not
# available. it keeps file handle open, which make it not possible
# to break hardlinks on local cloned repos.
- safe_to_use = os.name != 'nt' or (not util.is_win_9x() and
- hasattr(util, 'win32api'))
def __init__(self, dataf, size):
self.dataf = dataf
@@ -362,7 +360,7 @@
except AttributeError:
size = 0
- if lazyparser.safe_to_use and not inline and size > 1000000:
+ if util.openhardlinks() and not inline and size > 1000000:
# big index, let's parse it on demand
parser = lazyparser(fp, size)
index = lazyindex(parser)
--- a/mercurial/ui.py Wed Dec 19 19:21:30 2007 -0800
+++ b/mercurial/ui.py Wed Dec 19 19:23:18 2007 -0800
@@ -440,9 +440,7 @@
f.write(text)
f.close()
- editor = (os.environ.get("HGEDITOR") or
- self.config("ui", "editor") or
- os.environ.get("EDITOR", "vi"))
+ editor = self.geteditor()
util.system("%s \"%s\"" % (editor, name),
environ={'HGUSER': user},
@@ -464,3 +462,11 @@
if self.traceback:
traceback.print_exc()
return self.traceback
+
+ def geteditor(self):
+ '''return editor to use'''
+ return (os.environ.get("HGEDITOR") or
+ self.config("ui", "editor") or
+ os.environ.get("VISUAL") or
+ os.environ.get("EDITOR", "vi"))
+
--- a/mercurial/util.py Wed Dec 19 19:21:30 2007 -0800
+++ b/mercurial/util.py Wed Dec 19 19:23:18 2007 -0800
@@ -772,12 +772,9 @@
posixfile = file
-def is_win_9x():
- '''return true if run on windows 95, 98 or me.'''
- try:
- return sys.getwindowsversion()[3] == 1
- except AttributeError:
- return os.name == 'nt' and 'command' in os.environ.get('comspec', '')
+def openhardlinks():
+ '''return true if it is safe to hold open file handles to hardlinks'''
+ return True
getuser_fallback = None
@@ -943,6 +940,16 @@
sys.stdout = winstdout(sys.stdout)
+ def _is_win_9x():
+ '''return true if run on windows 95, 98 or me.'''
+ try:
+ return sys.getwindowsversion()[3] == 1
+ except AttributeError:
+ return 'command' in os.environ.get('comspec', '')
+
+ def openhardlinks():
+ return not _is_win_9x and "win32api" in locals()
+
def system_rcpath():
try:
return system_rcpath_win32()
@@ -1074,7 +1081,7 @@
try:
# override functions with win32 versions if possible
from util_win32 import *
- if not is_win_9x():
+ if not _is_win_9x():
posixfile = posixfile_nt
except ImportError:
pass
--- a/tests/test-bundle Wed Dec 19 19:21:30 2007 -0800
+++ b/tests/test-bundle Wed Dec 19 19:23:18 2007 -0800
@@ -2,6 +2,7 @@
cp "$TESTDIR"/printenv.py .
+echo "====== Setting up test"
hg init test
cd test
echo 0 > afile
@@ -30,20 +31,40 @@
hg verify
cd ..
hg init empty
+
+echo "====== Bundle test to full.hg"
hg -R test bundle full.hg empty
+echo "====== Unbundle full.hg in test"
hg -R test unbundle full.hg
+echo "====== Verify empty"
hg -R empty heads
hg -R empty verify
+echo "====== Pull full.hg into test (using --cwd)"
hg --cwd test pull ../full.hg
+echo "====== Pull full.hg into empty (using --cwd)"
hg --cwd empty pull ../full.hg
+echo "====== Rollback empty"
hg -R empty rollback
+echo "====== Pull full.hg into empty again (using --cwd)"
hg --cwd empty pull ../full.hg
+echo "====== Pull full.hg into test (using -R)"
+hg -R test pull full.hg
+echo "====== Pull full.hg into empty (using -R)"
+hg -R empty pull full.hg
+echo "====== Rollback empty"
+hg -R empty rollback
+echo "====== Pull full.hg into empty again (using -R)"
+hg -R empty pull full.hg
+
+echo "====== Log -R full.hg in fresh empty"
rm -r empty
hg init empty
cd empty
hg -R bundle://../full.hg log
+
+echo "====== Pull ../full.hg into empty (with hook)"
echo '[hooks]' >> .hg/hgrc
echo 'changegroup = python ../printenv.py changegroup' >> .hg/hgrc
#doesn't work (yet ?)
@@ -51,18 +72,24 @@
hg pull bundle://../full.hg
cd ..
+echo "====== Create partial clones"
rm -r empty
hg init empty
hg clone -r 3 test partial
hg clone partial partial2
cd partial
+echo "====== Log -R full.hg in partial"
hg -R bundle://../full.hg log
+echo "====== Incoming full.hg in partial"
hg incoming bundle://../full.hg
+echo "====== Outgoing -R full.hg vs partial2 in partial"
hg -R bundle://../full.hg outgoing ../partial2
+echo "====== Outgoing -R does-not-exist.hg vs partial2 in partial"
hg -R bundle://../does-not-exist.hg outgoing ../partial2
cd ..
# test for http://www.selenic.com/mercurial/bts/issue216
+echo "====== Unbundle incremental bundles into fresh empty in one go"
rm -r empty
hg init empty
hg -R test bundle --base null -r 0 ../0.hg
@@ -70,6 +97,7 @@
hg -R empty unbundle -u ../0.hg ../1.hg
# test for 540d1059c802
+echo "====== test for 540d1059c802"
hg init orig
cd orig
echo foo > foo
--- a/tests/test-bundle.out Wed Dec 19 19:21:30 2007 -0800
+++ b/tests/test-bundle.out Wed Dec 19 19:23:18 2007 -0800
@@ -1,3 +1,4 @@
+====== Setting up test
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
@@ -5,12 +6,15 @@
crosschecking files in changesets and manifests
checking files
4 files, 9 changesets, 7 total revisions
+====== Bundle test to full.hg
searching for changes
+====== Unbundle full.hg in test
adding changesets
adding manifests
adding file changes
added 0 changesets with 0 changes to 4 files
(run 'hg update' to get a working copy)
+====== Verify empty
changeset: -1:000000000000
tag: tip
user:
@@ -21,9 +25,11 @@
crosschecking files in changesets and manifests
checking files
0 files, 0 changesets, 0 total revisions
+====== Pull full.hg into test (using --cwd)
pulling from ../full.hg
searching for changes
no changes found
+====== Pull full.hg into empty (using --cwd)
pulling from ../full.hg
requesting all changes
adding changesets
@@ -31,7 +37,9 @@
adding file changes
added 9 changesets with 7 changes to 4 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
+====== Rollback empty
rolling back last transaction
+====== Pull full.hg into empty again (using --cwd)
pulling from ../full.hg
requesting all changes
adding changesets
@@ -39,6 +47,25 @@
adding file changes
added 9 changesets with 7 changes to 4 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
+====== Pull full.hg into test (using -R)
+pulling from full.hg
+searching for changes
+no changes found
+====== Pull full.hg into empty (using -R)
+pulling from full.hg
+searching for changes
+no changes found
+====== Rollback empty
+rolling back last transaction
+====== Pull full.hg into empty again (using -R)
+pulling from 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)
+====== Log -R full.hg in fresh empty
changeset: 8:836ac62537ab
tag: tip
parent: 3:ac69c658229d
@@ -87,6 +114,7 @@
date: Mon Jan 12 13:46:40 1970 +0000
summary: 0.0
+====== Pull ../full.hg into empty (with hook)
changegroup hook: HG_NODE=5649c9d34dd87d0ecb5fd39672128376e83b22e1 HG_SOURCE=pull HG_URL=bundle:../full.hg
pulling from bundle://../full.hg
requesting all changes
@@ -95,6 +123,7 @@
adding file changes
added 9 changesets with 7 changes to 4 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
+====== Create partial clones
requesting all changes
adding changesets
adding manifests
@@ -102,6 +131,7 @@
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
+====== Log -R full.hg in partial
changeset: 8:836ac62537ab
tag: tip
parent: 3:ac69c658229d
@@ -150,6 +180,7 @@
date: Mon Jan 12 13:46:40 1970 +0000
summary: 0.0
+====== Incoming full.hg in partial
comparing with bundle://../full.hg
searching for changes
changeset: 4:5f4f3ceb285e
@@ -180,6 +211,7 @@
date: Mon Jan 12 13:46:40 1970 +0000
summary: 0.3m
+====== Outgoing -R full.hg vs partial2 in partial
comparing with ../partial2
searching for changes
changeset: 4:5f4f3ceb285e
@@ -210,7 +242,9 @@
date: Mon Jan 12 13:46:40 1970 +0000
summary: 0.3m
+====== Outgoing -R does-not-exist.hg vs partial2 in partial
abort: No such file or directory: ../does-not-exist.hg
+====== Unbundle incremental bundles into fresh empty in one go
adding changesets
adding manifests
adding file changes
@@ -220,6 +254,7 @@
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 for 540d1059c802
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
searching for changes
comparing with ../bundle.hg
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-pull-from-bundle Wed Dec 19 19:23:18 2007 -0800
@@ -0,0 +1,84 @@
+#!/bin/sh
+
+echo "[extensions]" >> $HGRCPATH
+echo "mq=" >> $HGRCPATH
+echo "[defaults]" >> $HGRCPATH
+echo "log = --template \"{rev}: {desc}\\n\"" >> $HGRCPATH
+echo "heads = --template \"{rev}: {desc}\\n\"" >> $HGRCPATH
+echo "incoming = --template \"{rev}: {desc}\\n\"" >> $HGRCPATH
+
+echo "====== .hgrc"
+cat $HGRCPATH
+
+echo "====== Setup main"
+hg init base
+cd base
+echo "One" > one
+hg add
+hg ci -m "main: one added."
+echo "++" >> one
+hg ci -m "main: one updated."
+
+echo "====== Bundle main"
+hg bundle --base=null ../main.hg
+cd ..
+
+echo "====== Incoming to fresh repo"
+hg init fresh
+echo ">> hg -R fresh incoming main.hg"
+hg -R fresh incoming main.hg
+echo ">> hg -R fresh incoming bundle:fresh+main.hg"
+hg -R fresh incoming bundle:fresh+main.hg
+
+
+echo "====== Setup queue"
+cd base
+hg qinit -c
+hg qnew -m "patch: two added." two.patch
+echo two > two
+hg add
+hg qrefresh
+hg qcommit -m "queue: two.patch added."
+hg qpop -a
+
+echo "====== Bundle queue"
+hg -R .hg/patches bundle --base=null ../queue.hgq
+cd ..
+
+
+echo "====== Clone base"
+hg clone base copy
+cd copy
+hg qinit -c
+
+echo "====== Incoming queue bundle"
+echo ">> hg -R .hg/patches incoming ../queue.hgq"
+hg -R .hg/patches incoming ../queue.hgq
+
+echo "====== Pull queue bundle"
+echo ">> hg -R .hg/patches pull --update ../queue.hgq"
+hg -R .hg/patches pull --update ../queue.hgq
+echo ">> hg -R .hg/patches heads"
+hg -R .hg/patches heads
+echo ">> hg -R .hg/patches log"
+hg -R .hg/patches log
+echo ">> hg qseries"
+hg qseries
+cd ..
+
+
+echo "====== Clone base again"
+hg clone base copy2
+cd copy2
+hg qinit -c
+
+echo "====== Unbundle queue bundle"
+echo ">> hg -R .hg/patches unbundle --update ../queue.hgq"
+hg -R .hg/patches unbundle --update ../queue.hgq
+echo ">> hg -R .hg/patches heads"
+hg -R .hg/patches heads
+echo ">> hg -R .hg/patches log"
+hg -R .hg/patches log
+echo ">> hg qseries"
+hg qseries
+cd ..
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-pull-from-bundle.out Wed Dec 19 19:23:18 2007 -0800
@@ -0,0 +1,68 @@
+====== .hgrc
+[ui]
+slash = True
+[defaults]
+backout = -d "0 0"
+commit = -d "0 0"
+debugrawcommit = -d "0 0"
+tag = -d "0 0"
+[extensions]
+mq=
+[defaults]
+log = --template "{rev}: {desc}\n"
+heads = --template "{rev}: {desc}\n"
+incoming = --template "{rev}: {desc}\n"
+====== Setup main
+adding one
+====== Bundle main
+====== Incoming to fresh repo
+>> hg -R fresh incoming main.hg
+comparing with main.hg
+0: main: one added.
+1: main: one updated.
+>> hg -R fresh incoming bundle:fresh+main.hg
+comparing with bundle:fresh+main.hg
+0: main: one added.
+1: main: one updated.
+====== Setup queue
+adding two
+Patch queue now empty
+====== Bundle queue
+====== Clone base
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+====== Incoming queue bundle
+>> hg -R .hg/patches incoming ../queue.hgq
+comparing with ../queue.hgq
+0: queue: two.patch added.
+====== Pull queue bundle
+>> hg -R .hg/patches pull --update ../queue.hgq
+pulling from ../queue.hgq
+requesting all changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 3 changes to 3 files
+merging series
+2 files updated, 1 files merged, 0 files removed, 0 files unresolved
+>> hg -R .hg/patches heads
+0: queue: two.patch added.
+>> hg -R .hg/patches log
+0: queue: two.patch added.
+>> hg qseries
+two.patch
+====== Clone base again
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+====== Unbundle queue bundle
+>> hg -R .hg/patches unbundle --update ../queue.hgq
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 3 changes to 3 files
+merging series
+2 files updated, 1 files merged, 0 files removed, 0 files unresolved
+>> hg -R .hg/patches heads
+0: queue: two.patch added.
+>> hg -R .hg/patches log
+0: queue: two.patch added.
+>> hg qseries
+two.patch
--- a/tests/test-tags Wed Dec 19 19:21:30 2007 -0800
+++ b/tests/test-tags Wed Dec 19 19:23:18 2007 -0800
@@ -126,3 +126,21 @@
hg tag -m 'retag rev 0' -fr 0 bar # rev 4 bar -> 0, but bar stays at 2
echo % bar should still point to rev 2
hg tags
+
+
+# test that removing global/local tags does not get confused when trying
+# to remove a tag of type X which actually only exists as a type Y
+cd ..
+hg init t5
+cd t5
+echo foo > foo
+hg add
+hg ci -m 'add foo' # rev 0
+
+hg tag -r 0 -l localtag
+hg tag --remove localtag
+
+hg tag -r 0 globaltag
+hg tag --remove -l globaltag
+hg tags -v
+exit 0
--- a/tests/test-tags.out Wed Dec 19 19:21:30 2007 -0800
+++ b/tests/test-tags.out Wed Dec 19 19:23:18 2007 -0800
@@ -71,3 +71,9 @@
% bar should still point to rev 2
tip 4:40af5d225513
bar 2:72b852876a42
+adding foo
+abort: localtag tag is local
+abort: globaltag tag is global
+tip 1:a0b6fe111088
+localtag 0:bbd179dfa0a7 local
+globaltag 0:bbd179dfa0a7