--- a/contrib/bash_completion Thu Dec 15 18:04:05 2005 +0100
+++ b/contrib/bash_completion Thu Dec 15 18:04:39 2005 +0100
@@ -29,6 +29,14 @@
COMPREPLY=(${COMPREPLY[@]:-} $( compgen -W "$paths" -- "$cur" ))
}
+_hg_repos()
+{
+ local i
+ for i in $( compgen -d -- "$cur" ); do
+ test ! -d "$i"/.hg || COMPREPLY=(${COMPREPLY[@]:-} "$i")
+ done
+}
+
_hg_status()
{
local files="$( hg status -$1 | cut -b 3- )"
@@ -92,11 +100,11 @@
# global options
case "$prev" in
-R|--repository)
- COMPREPLY=(${COMPREPLY[@]:-} $( compgen -d -- "$cur" ))
+ _hg_repos
return
;;
--cwd)
- COMPREPLY=(${COMPREPLY[@]:-} $( compgen -d -- "$cur" ))
+ # Stick with default bash completion
return
;;
esac
@@ -123,7 +131,7 @@
;;
pull|push|outgoing|incoming)
_hg_paths
- COMPREPLY=(${COMPREPLY[@]:-} $( compgen -d -- "$cur" ))
+ _hg_repos
;;
paths)
_hg_paths
@@ -151,7 +159,7 @@
if [ $count = 1 ]; then
_hg_paths
fi
- COMPREPLY=(${COMPREPLY[@]:-} $( compgen -d -- "$cur" ))
+ _hg_repos
;;
debugindex|debugindexdot)
COMPREPLY=(${COMPREPLY[@]:-} $( compgen -f -X "!*.i" -- "$cur" ))
--- a/doc/hgrc.5.txt Thu Dec 15 18:04:05 2005 +0100
+++ b/doc/hgrc.5.txt Thu Dec 15 18:04:39 2005 +0100
@@ -15,26 +15,38 @@
FILES
-----
-Mercurial reads configuration data from up to three files, if they
-exist. The names of these files depend on the system on which
-Mercurial is installed.
+Mercurial reads configuration data from several files, if they exist.
+The names of these files depend on the system on which Mercurial is
+installed.
+(Unix) <install-root>/etc/mercurial/hgrc.d/*.rc::
+(Unix) <install-root>/etc/mercurial/hgrc::
+ Per-installation configuration files, searched for in the
+ directory where Mercurial is installed. For example, if installed
+ in /shared/tools, Mercurial will look in
+ /shared/tools/etc/mercurial/hgrc. Options in these files apply to
+ all Mercurial commands executed by any user in any directory.
+
+(Unix) /etc/mercurial/hgrc.d/*.rc::
(Unix) /etc/mercurial/hgrc::
(Windows) C:\Mercurial\Mercurial.ini::
- Options in this global configuration file apply to all Mercurial
- commands executed by any user in any directory.
+ Per-system configuration files, for the system on which Mercurial
+ is running. Options in these files apply to all Mercurial
+ commands executed by any user in any directory. Options in these
+ files override per-installation options.
(Unix) $HOME/.hgrc::
(Windows) C:\Documents and Settings\USERNAME\Mercurial.ini
- Per-user configuration options that apply to all Mercurial commands,
- no matter from which directory they are run. Values in this file
- override global settings.
+ Per-user configuration file, for the user running Mercurial.
+ Options in this file apply to all Mercurial commands executed by
+ any user in any directory. Options in this file override
+ per-installation and per-system options.
(Unix, Windows) <repo>/.hg/hgrc::
Per-repository configuration options that only apply in a
particular repository. This file is not version-controlled, and
- will not get transferred during a "clone" operation. Values in
- this file override global and per-user settings.
+ will not get transferred during a "clone" operation. Options in
+ this file override options in all other configuration files.
SYNTAX
------
--- a/mercurial/commands.py Thu Dec 15 18:04:05 2005 +0100
+++ b/mercurial/commands.py Thu Dec 15 18:04:39 2005 +0100
@@ -66,7 +66,7 @@
window, we first walk forwards to gather data, then in the desired
order (usually backwards) to display it.
- This function returns an (iterator, getchange) pair. The
+ This function returns an (iterator, getchange, matchfn) tuple. The
getchange function returns the changelog entry for a numeric
revision. The iterator yields 3-tuples. They will be of one of
the following forms:
@@ -82,10 +82,11 @@
"iter", rev, None: in-order traversal of the revs earlier iterated
over with "add" - use to display data'''
+ files, matchfn, anypats, cwd = matchpats(repo, pats, opts)
+
if repo.changelog.count() == 0:
- return [], False
+ return [], False, matchfn
- files, matchfn, anypats, cwd = matchpats(repo, pats, opts)
revs = map(int, revrange(ui, repo, opts['rev'] or ['tip:0']))
wanted = {}
slowpath = anypats
@@ -153,7 +154,7 @@
yield 'add', rev, fns
for rev in nrevs:
yield 'iter', rev, None
- return iterate(), getchange
+ return iterate(), getchange, matchfn
revrangesep = ':'
@@ -1117,9 +1118,12 @@
def doexport(ui, repo, changeset, seqno, total, revwidth, opts):
node = repo.lookup(changeset)
- prev, other = repo.changelog.parents(node)
+ parents = [p for p in repo.changelog.parents(node) if p != nullid]
+ prev = (parents and parents[0]) or nullid
change = repo.changelog.read(node)
+ if opts['switch_parent']:
+ parents.reverse()
fp = make_file(repo, repo.changelog, opts['output'],
node=node, total=total, seqno=seqno,
revwidth=revwidth)
@@ -1130,8 +1134,8 @@
fp.write("# User %s\n" % change[1])
fp.write("# Node ID %s\n" % hex(node))
fp.write("# Parent %s\n" % hex(prev))
- if other != nullid:
- fp.write("# Parent %s\n" % hex(other))
+ if len(parents) > 1:
+ fp.write("# Parent %s\n" % hex(parents[1]))
fp.write(change[4].rstrip())
fp.write("\n\n")
@@ -1162,6 +1166,9 @@
Without the -a option, export will avoid generating diffs of files
it detects as binary. With -a, export will generate a diff anyway,
probably with undesirable results.
+
+ With the --switch-parent option, the diff will be against the second
+ parent. It can be useful to review a merge.
"""
if not changesets:
raise util.Abort(_("export requires at least one changeset"))
@@ -1281,7 +1288,7 @@
fstate = {}
skip = {}
- changeiter, getchange = walkchangerevs(ui, repo, pats, opts)
+ changeiter, getchange, matchfn = walkchangerevs(ui, repo, pats, opts)
count = 0
incrementing = False
for st, rev, fns in changeiter:
@@ -1544,7 +1551,7 @@
self.write(*args)
def __getattr__(self, key):
return getattr(self.ui, key)
- changeiter, getchange = walkchangerevs(ui, repo, pats, opts)
+ changeiter, getchange, matchfn = walkchangerevs(ui, repo, pats, opts)
for st, rev, fns in changeiter:
if st == 'window':
du = dui(ui)
@@ -1560,7 +1567,7 @@
br = None
if opts['keyword']:
- changes = repo.changelog.read(repo.changelog.node(rev))
+ changes = getchange(rev)
miss = 0
for k in [kw.lower() for kw in opts['keyword']]:
if not (k in changes[1].lower() or
@@ -1577,7 +1584,7 @@
show_changeset(du, repo, rev, brinfo=br)
if opts['patch']:
prev = (parents and parents[0]) or nullid
- dodiff(du, du, repo, prev, changenode, fns)
+ dodiff(du, du, repo, prev, changenode, match=matchfn)
du.write("\n\n")
elif st == 'iter':
for args in du.hunk[rev]:
@@ -2122,7 +2129,8 @@
"""
repo.undo()
-def update(ui, repo, node=None, merge=False, clean=False, branch=None):
+def update(ui, repo, node=None, merge=False, clean=False, force=None,
+ branch=None):
"""update or merge working directory
Update the working directory to the specified revision.
@@ -2159,7 +2167,7 @@
return 1
else:
node = node and repo.lookup(node) or repo.changelog.tip()
- return repo.update(node, allow=merge, force=clean)
+ return repo.update(node, allow=merge, force=clean, forcemerge=force)
def verify(ui, repo):
"""verify the integrity of the repository
@@ -2256,7 +2264,8 @@
"^export":
(export,
[('o', 'output', "", _('print output to file with formatted name')),
- ('a', 'text', None, _('treat all files as text'))],
+ ('a', 'text', None, _('treat all files as text')),
+ ('', 'switch-parent', None, _('diff against the second parent'))],
"hg export [-a] [-o OUTFILE] REV..."),
"forget":
(forget,
@@ -2404,8 +2413,9 @@
(update,
[('b', 'branch', "", _('checkout the head of a specific branch')),
('m', 'merge', None, _('allow merging of branches')),
- ('C', 'clean', None, _('overwrite locally modified files'))],
- _('hg update [-b TAG] [-m] [-C] [REV]')),
+ ('C', 'clean', None, _('overwrite locally modified files')),
+ ('f', 'force', None, _('force a merge with outstanding changes'))],
+ _('hg update [-b TAG] [-m] [-C] [-f] [REV]')),
"verify": (verify, [], _('hg verify')),
"version": (show_version, [], _('hg version')),
}
--- a/mercurial/hgweb.py Thu Dec 15 18:04:05 2005 +0100
+++ b/mercurial/hgweb.py Thu Dec 15 18:04:39 2005 +0100
@@ -632,6 +632,8 @@
for k,n in i:
yield {"parity": parity,
"tag": k,
+ "tagmanifest": hex(cl.read(n)[0]),
+ "date": cl.read(n)[2],
"node": hex(n)}
parity = 1 - parity
@@ -639,6 +641,76 @@
manifest=hex(mf),
entries=entries)
+ def summary(self):
+ cl = self.repo.changelog
+ mf = cl.read(cl.tip())[0]
+
+ i = self.repo.tagslist()
+ i.reverse()
+
+ def tagentries(**map):
+ parity = 0
+ count = 0
+ for k,n in i:
+ if k == "tip": # skip tip
+ continue;
+
+ count += 1
+ if count > 10: # limit to 10 tags
+ break;
+
+ c = cl.read(n)
+ m = c[0]
+ t = c[2]
+
+ yield self.t("tagentry",
+ parity = parity,
+ tag = k,
+ node = hex(n),
+ date = t,
+ tagmanifest = hex(m))
+ parity = 1 - parity
+
+ def changelist(**map):
+ parity = 0
+ cl = self.repo.changelog
+ l = [] # build a list in forward order for efficiency
+ for i in range(start, end):
+ n = cl.node(i)
+ changes = cl.read(n)
+ hn = hex(n)
+ t = changes[2]
+
+ l.insert(0, self.t(
+ 'shortlogentry',
+ parity = parity,
+ author = changes[1],
+ manifest = hex(changes[0]),
+ desc = changes[4],
+ date = t,
+ rev = i,
+ node = hn))
+ parity = 1 - parity
+
+ yield l
+
+ cl = self.repo.changelog
+ mf = cl.read(cl.tip())[0]
+ count = cl.count()
+ start = max(0, count - self.maxchanges)
+ end = min(count, start + self.maxchanges)
+ pos = end - 1
+
+ yield self.t("summary",
+ desc = self.repo.ui.config("web", "description", "unknown"),
+ owner = (self.repo.ui.config("ui", "username") or # preferred
+ self.repo.ui.config("web", "contact") or # deprecated
+ self.repo.ui.config("web", "author", "unknown")), # also
+ lastchange = (0, 0), # FIXME
+ manifest = hex(mf),
+ tags = tagentries,
+ shortlog = changelist)
+
def filediff(self, file, changeset):
cl = self.repo.changelog
n = self.repo.lookup(changeset)
@@ -798,6 +870,9 @@
elif req.form['cmd'][0] == 'tags':
req.write(self.tags())
+ elif req.form['cmd'][0] == 'summary':
+ req.write(self.summary())
+
elif req.form['cmd'][0] == 'filediff':
req.write(self.filediff(req.form['file'][0], req.form['node'][0]))
--- a/mercurial/localrepo.py Thu Dec 15 18:04:05 2005 +0100
+++ b/mercurial/localrepo.py Thu Dec 15 18:04:39 2005 +0100
@@ -24,7 +24,7 @@
self.path = os.path.join(path, ".hg")
if not create and not os.path.isdir(self.path):
- raise repo.RepoError(_("repository %s not found") % self.path)
+ raise repo.RepoError(_("repository %s not found") % path)
self.root = os.path.abspath(path)
self.ui = ui
@@ -1364,7 +1364,7 @@
return
def update(self, node, allow=False, force=False, choose=None,
- moddirstate=True):
+ moddirstate=True, forcemerge=False):
pl = self.dirstate.parents()
if not force and pl[1] != nullid:
self.ui.warn(_("aborting: outstanding uncommitted merges\n"))
@@ -1384,6 +1384,18 @@
(c, a, d, u) = self.changes()
+ if allow and not forcemerge:
+ if c or a or d:
+ raise util.Abort(_("outstanding uncommited changes"))
+ if not forcemerge and not force:
+ for f in u:
+ if f in m2:
+ t1 = self.wread(f)
+ t2 = self.file(f).read(m2[f])
+ if cmp(t1, t2) != 0:
+ raise util.Abort(_("'%s' already exists in the working"
+ " dir and differs from remote") % f)
+
# is this a jump, or a merge? i.e. is there a linear path
# from p1 to p2?
linear_path = (pa == p1 or pa == p2)
--- a/mercurial/ui.py Thu Dec 15 18:04:05 2005 +0100
+++ b/mercurial/ui.py Thu Dec 15 18:04:39 2005 +0100
@@ -145,7 +145,7 @@
os.environ.get("EDITOR", "vi"))
os.environ["HGUSER"] = self.username()
- util.system("%s %s" % (editor, name), errprefix=_("edit failed"))
+ util.system("%s \"%s\"" % (editor, name), errprefix=_("edit failed"))
t = open(name).read()
t = re.sub("(?m)^HG:.*\n", "", t)
--- a/mercurial/util.py Thu Dec 15 18:04:05 2005 +0100
+++ b/mercurial/util.py Thu Dec 15 18:04:39 2005 +0100
@@ -13,7 +13,7 @@
import os, errno
from i18n import gettext as _
from demandload import *
-demandload(globals(), "re cStringIO shutil popen2 tempfile threading time")
+demandload(globals(), "re cStringIO shutil popen2 sys tempfile threading time")
def pipefilter(s, cmd):
'''filter string S through command CMD, returning its output'''
@@ -510,12 +510,18 @@
else:
nulldev = '/dev/null'
- hgrcd = '/etc/mercurial/hgrc.d'
- hgrcs = []
- if os.path.isdir(hgrcd):
- hgrcs = [f for f in os.listdir(hgrcd) if f.endswith(".rc")]
- rcpath = map(os.path.normpath, hgrcs +
- ['/etc/mercurial/hgrc', os.path.expanduser('~/.hgrc')])
+ def rcfiles(path):
+ rcs = [os.path.join(path, 'hgrc')]
+ rcdir = os.path.join(path, 'hgrc.d')
+ try:
+ rcs.extend([os.path.join(rcdir, f) for f in os.listdir(rcdir)
+ if f.endswith(".rc")])
+ except OSError, inst: pass
+ return rcs
+ rcpath = rcfiles(os.path.dirname(sys.argv[0]) + '/../etc/mercurial')
+ rcpath.extend(rcfiles('/etc/mercurial'))
+ rcpath.append(os.path.expanduser('~/.hgrc'))
+ rcpath = [os.path.normpath(f) for f in rcpath]
def parse_patch_output(output_line):
"""parses the output produced by patch and returns the file name"""
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/changelog-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,30 @@
+#header#
+<title>#repo|escape#: Changelog</title>
+<link rel="alternate" type="application/rss+xml"
+ href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / changelog
+</div>
+
+<form action="#">
+<div class="search">
+<input type="hidden" name="repo" value="#repo#" />
+<input type="hidden" name="style" value="gitweb" />
+<input type="hidden" name="cmd" value="changelog" />
+<input type="text" name="rev" />
+</div>
+</form>
+</div>
+
+<div class="page_nav">
+<a href="?cmd=summary;style=gitweb">summary</a> | changelog | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?cmd=manifest;manifest=#manifest#;path=/;style=gitweb">manifest</a><br/>
+<br/>
+#changenav%naventry#<br/>
+</div>
+
+#entries%changelogentry#
+
+#footer#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/changelogentry-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,14 @@
+<div>
+<a class="title" href="?cmd=changeset;node=#node#;style=gitweb"><span class="age">#date|age# ago</span>#desc|firstline|escape#</a>
+</div>
+<div class="title_text">
+<div class="log_link">
+<a href="?cmd=changeset;node=#node#;style=gitweb">changeset</a><br/>
+</div>
+<i>#author|obfuscate# [#date|rfc822date#]</i><br/>
+</div>
+<div class="log_body">
+#desc|addbreaks#
+<br/>
+<br/>
+</div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/changeset-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,40 @@
+#header#
+<title>#repo|escape#: Changeset</title>
+<link rel="alternate" type="application/rss+xml"
+ href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / changeset
+</div>
+
+<div class="page_nav">
+<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=changelog;rev=#rev#;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?cmd=manifest;manifest=#manifest#;path=/;style=gitweb">manifest</a> | changeset | <a href="?cmd=changeset;node=#node#;style=raw">raw</a><br/>
+</div>
+
+<div>
+<a class="title" href="?cmd=changeset;node=#node#;style=raw">#desc|escape|firstline#</a>
+</div>
+<div class="title_text">
+<table cellspacing="0">
+<tr><td>author</td><td>#author|obfuscate#</td></tr>
+<tr><td></td><td>#date|date# (#date|age# ago)</td></tr>
+<tr><td>changeset</td><td style="font-family:monospace">#node|short#</td></tr>
+<tr><td>manifest</td><td style="font-family:monospace"><a class="list" href="?cmd=manifest;manifest=#manifest|short#;path=/;style=gitweb">#manifest|short#</a></td></tr>
+#parent%changesetparent#
+#changesettag#
+</table></div>
+
+<div class="title_text">
+#desc|addbreaks#
+</div>
+
+<div class="title_text">
+<table cellspacing="0">
+#files#
+</table></div>
+
+<div class="page_body">#diff#</div>
+
+#footer#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/error-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,12 @@
+#header#
+<div class="page_nav">
+<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=changelog;style=gitweb">log</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?cmd=manifest;manifest=#manifest#;path=/;style=gitweb">manifest</a><br/>
+</div>
+
+<div>
+<br/>
+<i>Error parsing query string</i><br/>
+<br/>
+</div>
+
+#footer#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/fileannotate-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,43 @@
+#header#
+<title>#repo|escape#: Annotate</title>
+<link rel="alternate" type="application/rss+xml"
+ href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / annotate
+</div>
+
+<div class="page_nav">
+<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?cmd=manifest;manifest=#manifest#;path=#path#;style=gitweb">manifest</a> | <a href="?cmd=changeset;node=#node#;style=gitweb">changeset</a> | <a href="?cmd=file;file=#file#;filenode=#filenode#;style=gitweb">file</a> | <a href="?cmd=filelog;file=#file#;filenode=#filenode#;style=gitweb">revisions</a> | annotate<br/>
+</div>
+
+<div class="title">#file#</div>
+
+<table>
+<tr>
+ <td class="metatag">changeset #rev#:</td>
+ <td><a href="?cs=#node|short#;style=gitweb">#node|short#</a></td></tr>
+#parent%fileannotateparent#
+<tr>
+ <td class="metatag">manifest:</td>
+ <td><a href="?mf=#manifest|short#;path=/;style=gitweb">#manifest|short#</a></td></tr>
+<tr>
+ <td class="metatag">author:</td>
+ <td>#author|obfuscate#</td></tr>
+<tr>
+ <td class="metatag">date:</td>
+ <td>#date|date# (#date|age# ago)</td></tr>
+<tr>
+ <td class="metatag">permissions:</td>
+ <td>#permissions|permissions#</td></tr>
+</table>
+
+<div class="page_body">
+<table>
+#annotate%annotateline#
+</table>
+</div>
+
+#footer#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/filelog-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,20 @@
+#header#
+<title>#repo|escape#: Manifest</title>
+<link rel="alternate" type="application/rss+xml"
+ href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / manifest
+</div>
+
+<div class="page_nav">
+<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?cmd=file;file=#file#;filenode=#filenode#;style=gitweb">file</a> | revisions | <a href="?cmd=annotate;file=#file#;filenode=#filenode#;style=gitweb">annotate</a> | <a href="?fl=#filenode|short#;file=#file#;style=rss">rss</a><br/>
+</div>
+
+<table>
+#entries%filelogentry#
+</table>
+
+#footer#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/filerevision-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,41 @@
+#header#
+<title>#repo|escape#: File revision</title>
+<link rel="alternate" type="application/rss+xml"
+ href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / file revision
+</div>
+
+<div class="page_nav">
+<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?mf=#manifest|short#;path=#path#;style=gitweb">manifest</a> | <a href="?cmd=changeset;node=#node#;style=gitweb">changeset</a> | file | <a href="?cmd=filelog;file=#file#;filenode=#filenode#;style=gitweb">revisions</a> | <a href="?cmd=annotate;file=#file#;filenode=#filenode#;style=gitweb">annotate</a> | <a href="?cmd=file;file=#file#;filenode=#filenode#;style=raw">raw</a><br/>
+</div>
+
+<div class="title">#file#</div>
+
+<table>
+<tr>
+ <td class="metatag">changeset #rev#:</td>
+ <td><a href="?cs=#node|short#;style=gitweb">#node|short#</a></td></tr>
+#parent%fileannotateparent#
+<tr>
+ <td class="metatag">manifest:</td>
+ <td><a href="?mf=#manifest|short#;path=/;style=gitweb">#manifest|short#</a></td></tr>
+<tr>
+ <td class="metatag">author:</td>
+ <td>#author|obfuscate#</td></tr>
+<tr>
+ <td class="metatag">date:</td>
+ <td>#date|date# (#date|age# ago)</td></tr>
+<tr>
+ <td class="metatag">permissions:</td>
+ <td>#permissions|permissions#</td></tr>
+</table>
+
+<div class="page_body">
+#text%fileline#
+</div>
+
+#footer#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/footer-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,6 @@
+<div class="page_footer">
+<div class="page_footer_text">#repo|escape#</div>
+<a class="rss_logo" href="?cmd=changelog;style=rss">RSS</a>
+</div>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/header-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,59 @@
+Content-type: text/html
+
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
+<meta name="robots" content="index, nofollow"/>
+<style type="text/css">
+body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; }
+a { color:#0000cc; }
+a:hover, a:visited, a:active { color:#880000; }
+div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
+div.page_header a:visited { color:#0000cc; }
+div.page_header a:hover { color:#880000; }
+div.page_nav { padding:8px; }
+div.page_nav a:visited { color:#0000cc; }
+div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
+div.page_footer { height:17px; padding:4px 8px; background-color: #d9d8d1; }
+div.page_footer_text { float:left; color:#555555; font-style:italic; }
+div.page_body { padding:8px; }
+div.title, a.title {
+ display:block; padding:6px 8px;
+ font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
+}
+a.title:hover { background-color: #d9d8d1; }
+div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
+div.log_body { padding:8px 8px 8px 150px; }
+span.age { position:relative; float:left; width:142px; font-style:italic; }
+div.log_link {
+ padding:0px 8px;
+ font-size:10px; font-family:sans-serif; font-style:normal;
+ position:relative; float:left; width:136px;
+}
+div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
+a.list { text-decoration:none; color:#000000; }
+a.list:hover { text-decoration:underline; color:#880000; }
+table { padding:8px 4px; }
+th { padding:2px 5px; font-size:12px; text-align:left; }
+tr.light:hover, .parity0:hover { background-color:#edece6; }
+tr.dark, .parity1 { background-color:#f6f6f0; }
+tr.dark:hover, .parity1:hover { background-color:#edece6; }
+td { padding:2px 5px; font-size:12px; vertical-align:top; }
+td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
+div.pre { font-family:monospace; font-size:12px; white-space:pre; }
+div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
+div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
+div.search { margin:4px 8px; position:absolute; top:56px; right:12px }
+.linenr { color:#999999; text-decoration:none }
+a.rss_logo {
+ float:right; padding:3px 0px; width:35px; line-height:10px;
+ border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
+ color:#ffffff; background-color:#ff6600;
+ font-weight:bold; font-family:sans-serif; font-size:10px;
+ text-align:center; text-decoration:none;
+}
+a.rss_logo:hover { background-color:#ee5500; }
+</style>
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/manifest-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,27 @@
+#header#
+<title>#repo|escape#: Manifest</title>
+<link rel="alternate" type="application/rss+xml"
+ href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / manifest
+</div>
+
+<div class="page_nav">
+<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | manifest | <a href="?cs=#node|short#;style=gitweb">changeset</a><br/>
+</div>
+
+<div class="title" >#path|escape#</div>
+<div class="page_body">
+<table cellspacing="0">
+<tr class="light">
+<td style="font-family:monospace">drwxr-xr-x</td>
+<td><a href="?cmd=manifest;manifest=#manifest#;path=#up#;style=gitweb">[up]</a></td>
+<td class="link"> </td>
+</tr>
+#dentries%manifestdirentry#
+#fentries%manifestfileentry#
+</table>
+#footer#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/map-gitweb Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,42 @@
+default = "summary"
+header = header-gitweb.tmpl
+footer = footer-gitweb.tmpl
+search = search-gitweb.tmpl
+changelog = changelog-gitweb.tmpl
+summary = summary-gitweb.tmpl
+error = error-gitweb.tmpl
+naventry = "<a href="?cmd=changelog;rev=#rev#;style=gitweb">#label#</a> "
+navshortentry = "<a href="?cmd=shortlog;rev=#rev#;style=gitweb">#label#</a> "
+filedifflink = "<a href="?cmd=filediff;node=#node#;file=#file#;style=gitweb">#file#</a> "
+filenodelink = "<tr class="light"><td><a class="list" href="">#file#</a></td><td></td><td class="link"><a href="?cmd=file;filenode=#filenode#;file=#file#;style=gitweb">file</a> | <!-- FIXME: <a href="?fd=#filenode|short#;file=#file#;style=gitweb">diff</a> | --> <a href="?cmd=filelog;filenode=#filenode|short#;file=#file#;style=gitweb">revisions</a></td></tr>"
+fileellipses = "..."
+changelogentry = changelogentry-gitweb.tmpl
+searchentry = changelogentry-gitweb.tmpl
+changeset = changeset-gitweb.tmpl
+manifest = manifest-gitweb.tmpl
+manifestdirentry = "<tr class="parity#parity#"><td style="font-family:monospace">drwxr-xr-x</td><td><a href="?mf=#manifest|short#;path=#path#;style=gitweb">#basename#/</a></td><td class="link"><a href="?mf=#manifest|short#;path=#path#;style=gitweb">manifest</a></td></tr>"
+manifestfileentry = "<tr class="parity#parity#"><td style="font-family:monospace">#permissions|permissions#</td><td class="list"><a class="list" href="?f=#filenode|short#;file=#file#;style=gitweb">#basename#</a></td><td class="link"><a href="?f=#filenode|short#;file=#file#;style=gitweb">file</a> | <a href="?fl=#filenode|short#;file=#file#;style=gitweb">revisions</a> | <a href="?fa=#filenode|short#;file=#file#;style=gitweb">annotate</a></td></tr>"
+filerevision = filerevision-gitweb.tmpl
+fileannotate = fileannotate-gitweb.tmpl
+filelog = filelog-gitweb.tmpl
+fileline = "<div style="font-family:monospace; white-space: pre;" class="parity#parity#"><span class="linenr"> #linenumber#</span> #line|escape#</div>"
+filelogentry = filelogentry-gitweb.tmpl
+annotateline = "<tr style="font-family:monospace; white-space: pre;" class="parity#parity#"><td class="linenr" style="text-align: right;"><a href="?cs=#node|short#;style=gitweb">#author|obfuscate#@#rev#</a></td><td>#line|escape#</td></tr>"
+difflineplus = "<div class="pre" style="color:#008800;">#line|escape#</div>"
+difflineminus = "<div class="pre" style="color:#cc0000;">#line|escape#</div>"
+difflineat = "<div class="pre" style="color:#990099;">#line|escape#</div>"
+diffline = "<div class="pre">#line|escape#</div>"
+changelogparent = "<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="?cmd=changeset;node=#node#;style=gitweb">#node|short#</a></td></tr>"
+changesetparent = "<tr><td>parent</td><td style="font-family:monospace"><a class="list" href="?cmd=changeset;node=#node|short#;style=gitweb">#node|short#</a></td></tr>"
+filerevparent = "<tr><td class="metatag">parent:</td><td><a href="?cmd=file;file=#file#;filenode=#node#;style=gitweb">#node|short#</a></td></tr>"
+fileannotateparent = "<tr><td class="metatag">parent:</td><td><a href="?cmd=annotate;file=#file#;filenode=#node#;style=gitweb">#node|short#</a></td></tr>"
+tags = tags-gitweb.tmpl
+tagentry = "<tr class="parity#parity#"><td><i>#date|age# ago</i></td><td><a class="list" href="?cmd=changeset;node=#node|short#;style=gitweb"><b>#tag#</b></a></td><td class="link"><a href="?cmd=changeset;node=#node|short#;style=gitweb">changeset</a> | <a href="?cmd=changelog;rev=#node|short#;style=gitweb">changelog</a> | <a href="?mf=#tagmanifest|short#;path=/;style=gitweb">manifest</a></td></tr>"
+diffblock = "#lines#"
+changelogtag = "<tr><th class="tag">tag:</th><td class="tag">#tag#</td></tr>"
+changesettag = "<tr><td>tag</td><td>#tag#</td></tr>"
+filediffparent = "<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="?cmd=changeset;node=#node#;style=gitweb">#node|short#</a></td></tr>"
+filelogparent = "<tr><td align="right">parent #rev#: </td><td><a href="?cmd=file;file=#file#;filenode=#node#;style=gitweb">#node|short#</a></td></tr>"
+shortlog = shortlog-gitweb.tmpl
+shortlogentry = "<tr class="parity#parity#"><td><i>#date|age# ago</i></td><td><a class="list" href="?cmd=changeset;node=#node|short#;style=gitweb"><b>#desc|firstline|escape#</b></a></td><td class="link"><a href="?cmd=changeset;node=#node|short#;style=gitweb">changeset</a> | <a href="?cmd=manifest;manifest=#manifest|short#;path=/;style=gitweb">manifest</a></td></tr>"
+filelogentry = "<tr class="parity#parity#"><td><i>#date|age# ago</i></td><td><a class="list" href="?cmd=changeset;node=#node|short#;style=gitweb"><b>#desc|firstline|escape#</b></a></td><td class="link"><!-- FIXME: <a href="?fd=#node|short#;file=#file#;style=gitweb">diff</a> | --> <a href="?fa=#filenode|short#;file=#file#;style=gitweb">annotate</a></td></tr>"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/search-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,24 @@
+#header#
+<div class="page_nav">
+<a href="?cmd=summary;style=gitweb">summary</a> | log | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?cmd=manifest;manifest=#manifest#;path=/;style=gitweb">manifest</a><br/>
+</div>
+
+<h2>searching for #query|escape#</h2>
+
+<form>
+search:
+<input type="hidden" name="cmd" value="changelog">
+<input type="hidden" name="style" value="gitweb">
+<input name="rev" type="text" width="30" value="#query|escape#">
+</form>
+
+#entries#
+
+<form>
+search:
+<input type="hidden" name="cmd" value="changelog">
+<input type="hidden" name="style" value="gitweb">
+<input name="rev" type="text" width="30">
+</form>
+
+#footer#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/shortlog-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,13 @@
+#header#
+
+<div class="page_nav">
+<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=changelog;style=gitweb">log</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?cmd=manifest;manifest=#manifest#;path=/;style=gitweb">manifest</a><br/>
+
+#changenav%naventry#<br/>
+</div>
+
+<table cellspacing="0">
+#entries#
+</table>
+
+#footer#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/summary-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,34 @@
+#header#
+<title>#repo|escape#: Summary</title>
+<link rel="alternate" type="application/rss+xml"
+ href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / summary
+</div>
+<div class="page_nav">
+summary | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?cmd=manifest;manifest=#manifest#;path=/;style=gitweb">manifest</a><br/>
+</div>
+
+<div class="title"> </div>
+<table cellspacing="0">
+<tr><td>description</td><td>#desc#</td></tr>
+<tr><td>owner</td><td>#owner#</td></tr>
+<!-- <tr><td>last change</td><td>#lastchange|rfc822date#</td></tr> -->
+</table>
+
+<div><a class="title" href="?cmd=changelog;style=gitweb">changes</a></div>
+<table cellspacing="0">
+#shortlog#
+<tr class="light"><td colspan="3"><a class="list" href="?cmd=changelog;style=gitweb">...</a></td></tr>
+</table>
+
+<div><a class="title" href="?cmd=tags;style=gitweb">tags</a></div>
+<table cellspacing="0">
+#tags#
+<tr class="light"><td colspan="3"><a class="list" href="?cmd=tags;style=gitweb">...</a></td></tr>
+</table>
+
+#footer#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/tags-gitweb.tmpl Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,21 @@
+#header#
+<title>#repo|escape#: Tags</title>
+<link rel="alternate" type="application/rss+xml"
+ href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / tags
+</div>
+
+<div class="page_nav">
+<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | tags | <a href="?cmd=manifest;manifest=#manifest#;path=/;style=gitweb">manifest</a>
+<br/>
+</div>
+
+<table cellspacing="0">
+#entries%tagentry#
+</table>
+
+#footer#
--- a/tests/test-clone-failure.out Thu Dec 15 18:04:05 2005 +0100
+++ b/tests/test-clone-failure.out Thu Dec 15 18:04:39 2005 +0100
@@ -1,12 +1,12 @@
-abort: repository a/.hg not found!
+abort: repository a not found!
255
requesting all changes
abort: error: Connection refused
255
-abort: repository a/.hg not found!
+abort: repository a not found!
255
abort: destination '../a' already exists
1
-abort: repository a/.hg not found!
+abort: repository a not found!
255
abort: destination 'q' already exists
--- a/tests/test-merge1 Thu Dec 15 18:04:05 2005 +0100
+++ b/tests/test-merge1 Thu Dec 15 18:04:39 2005 +0100
@@ -40,8 +40,10 @@
hg add c
hg commit -m "commit #2" -d "0 0"
echo This is file b2 > b
+echo %% merge should fail
+env HGMERGE=../merge hg update -m 1
echo %% merge of b expected
-env HGMERGE=../merge hg update -m 1
+env HGMERGE=../merge hg update -f -m 1
cd ..; /bin/rm -rf t
echo %%
@@ -65,8 +67,10 @@
cat b
echo This is file b22 > b
+echo %% merge fails
+env HGMERGE=../merge hg update -m 2
echo %% merge expected!
-env HGMERGE=../merge hg update -m 2
+env HGMERGE=../merge hg update -f -m 2
cd ..; /bin/rm -rf t
mkdir t
@@ -85,6 +89,8 @@
hg add c
hg commit -m "commit #3" -d "0 0"
echo This is file b33 > b
-echo %% merge of b expected
+echo %% merge of b should fail
env HGMERGE=../merge hg update -m 2
+echo %% merge of b expected
+env HGMERGE=../merge hg update -f -m 2
cd ..; /bin/rm -rf t
--- a/tests/test-merge1.out Thu Dec 15 18:04:05 2005 +0100
+++ b/tests/test-merge1.out Thu Dec 15 18:04:39 2005 +0100
@@ -1,13 +1,19 @@
%% no merges expected
+%% merge should fail
+abort: 'b' already exists in the working dir and differs from remote
%% merge of b expected
merging for b
merging b
%%
Contents of b should be "this is file b1"
This is file b1
+%% merge fails
+abort: outstanding uncommited changes
%% merge expected!
merging for b
merging b
+%% merge of b should fail
+abort: outstanding uncommited changes
%% merge of b expected
merging for b
merging b
--- a/tests/test-remove Thu Dec 15 18:04:05 2005 +0100
+++ b/tests/test-remove Thu Dec 15 18:04:39 2005 +0100
@@ -8,6 +8,10 @@
rm foo
hg remove foo
hg commit -m 2 -d "0 0"
+hg export 0
+hg export 1
+hg log -p -r 0
+hg log -p -r 1
cd ..
hg clone a b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-remove.out Thu Dec 15 18:04:39 2005 +0100
@@ -0,0 +1,47 @@
+# HG changeset patch
+# User test
+# Node ID b51ca55c20354097ca299529d18b5cd356976ba2
+# Parent 0000000000000000000000000000000000000000
+1
+
+diff -r 000000000000 -r b51ca55c2035 foo
+--- /dev/null Thu Jan 1 00:00:00 1970 +0000
++++ b/foo Thu Jan 1 00:00:00 1970 +0000
+@@ -0,0 +1,1 @@
++a
+# HG changeset patch
+# User test
+# Node ID 1e555b9b85c52e1e9e8175446f1ede507b2d1ebb
+# Parent b51ca55c20354097ca299529d18b5cd356976ba2
+2
+
+diff -r b51ca55c2035 -r 1e555b9b85c5 foo
+--- a/foo Thu Jan 1 00:00:00 1970 +0000
++++ /dev/null Thu Jan 1 00:00:00 1970 +0000
+@@ -1,1 +0,0 @@
+-a
+changeset: 0:b51ca55c2035
+user: test
+date: Thu Jan 1 00:00:00 1970 +0000
+summary: 1
+
+diff -r 000000000000 -r b51ca55c2035 foo
+--- /dev/null Thu Jan 1 00:00:00 1970 +0000
++++ b/foo Thu Jan 1 00:00:00 1970 +0000
+@@ -0,0 +1,1 @@
++a
+
+
+changeset: 1:1e555b9b85c5
+tag: tip
+user: test
+date: Thu Jan 1 00:00:00 1970 +0000
+summary: 2
+
+diff -r b51ca55c2035 -r 1e555b9b85c5 foo
+--- a/foo Thu Jan 1 00:00:00 1970 +0000
++++ /dev/null Thu Jan 1 00:00:00 1970 +0000
+@@ -1,1 +0,0 @@
+-a
+
+
--- a/tests/test-up-local-change Thu Dec 15 18:04:05 2005 +0100
+++ b/tests/test-up-local-change Thu Dec 15 18:04:39 2005 +0100
@@ -25,7 +25,8 @@
hg -q pull ../r1
hg status
hg --debug up
-hg --debug up -m
+hg --debug up -m || echo failed
+hg --debug up -f -m
hg parents
hg -v history
hg diff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
--- a/tests/test-up-local-change.out Thu Dec 15 18:04:05 2005 +0100
+++ b/tests/test-up-local-change.out Thu Dec 15 18:04:39 2005 +0100
@@ -16,6 +16,8 @@
merging a
resolving a
file a: my b789fdd96dc2 other d730145abbf9 ancestor b789fdd96dc2
+abort: outstanding uncommited changes
+failed
resolving manifests
force None allow 1 moddirstate True linear True
ancestor 1165e8bd193e local 1165e8bd193e remote 1165e8bd193e