Mercurial > hg-stable
changeset 6260:f295206ae1f9
merge with crew
author | Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
---|---|
date | Fri, 14 Mar 2008 21:36:09 +0100 |
parents | d60aa0308b02 (current diff) c24f4b3f156b (diff) |
children | 7c8101b5ceb1 |
files | |
diffstat | 24 files changed, 159 insertions(+), 40 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/win32text.py Fri Mar 14 21:35:49 2008 +0100 +++ b/hgext/win32text.py Fri Mar 14 21:36:09 2008 +0100 @@ -22,6 +22,7 @@ # [hooks] # pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf +from mercurial import util from mercurial.i18n import gettext as _ from mercurial.node import bin, short import re @@ -46,19 +47,15 @@ def dumbencode(s, cmd): return s.replace('\r\n', '\n') -def clevertest(s, cmd): - if '\0' in s: return False - return True - def cleverdecode(s, cmd, **kwargs): - if clevertest(s, cmd): - return dumbdecode(s, cmd, **kwargs) - return s + if util.binary(s): + return s + return dumbdecode(s, cmd, **kwargs) def cleverencode(s, cmd): - if clevertest(s, cmd): - return dumbencode(s, cmd) - return s + if util.binary(s): + return s + return dumbencode(s, cmd) _filters = { 'dumbdecode:': dumbdecode, @@ -75,7 +72,7 @@ if f not in c: continue data = c[f].data() - if '\0' not in data and '\r\n' in data: + if not util.binary(data) and '\r\n' in data: if not halt: ui.warn(_('Attempt to commit or push text file(s) ' 'using CRLF line endings\n'))
--- a/mercurial/cmdutil.py Fri Mar 14 21:35:49 2008 +0100 +++ b/mercurial/cmdutil.py Fri Mar 14 21:36:09 2008 +0100 @@ -470,7 +470,7 @@ if len(pats) == 1: raise util.Abort(_('no destination specified')) dest = pats.pop() - destdirexists = os.path.isdir(dest) + destdirexists = os.path.isdir(dest) and not os.path.islink(dest) if not destdirexists: if len(pats) > 1 or util.patkind(pats[0], None)[0]: raise util.Abort(_('with multiple sources, destination must be an '
--- a/mercurial/commands.py Fri Mar 14 21:35:49 2008 +0100 +++ b/mercurial/commands.py Fri Mar 14 21:36:09 2008 +0100 @@ -574,15 +574,17 @@ if len(args) == 3: index, rev1, rev2 = args r = revlog.revlog(util.opener(os.getcwd(), audit=False), index) + lookup = r.lookup elif len(args) == 2: if not repo: raise util.Abort(_("There is no Mercurial repository here " "(.hg not found)")) rev1, rev2 = args r = repo.changelog + lookup = repo.lookup else: raise util.Abort(_('either two or three arguments required')) - a = r.ancestor(r.lookup(rev1), r.lookup(rev2)) + a = r.ancestor(lookup(rev1), lookup(rev2)) ui.write("%d:%s\n" % (r.rev(a), hex(a))) def debugcomplete(ui, cmd='', **opts):
--- a/mercurial/dirstate.py Fri Mar 14 21:35:49 2008 +0100 +++ b/mercurial/dirstate.py Fri Mar 14 21:36:09 2008 +0100 @@ -63,6 +63,9 @@ elif name == '_slash': self._slash = self._ui.configbool('ui', 'slash') and os.sep != '/' return self._slash + elif name == '_checkexec': + self._checkexec = util.checkexec(self._root) + return self._checkexec else: raise AttributeError, name @@ -578,8 +581,9 @@ if type_ == 'n': if not st: st = lstat(_join(fn)) - if (size >= 0 and (size != st.st_size - or (mode ^ st.st_mode) & 0100) + if (size >= 0 and + (size != st.st_size + or ((mode ^ st.st_mode) & 0100 and self._checkexec)) or size == -2 or fn in self._copymap): madd(fn)
--- a/mercurial/hgweb/hgweb_mod.py Fri Mar 14 21:35:49 2008 +0100 +++ b/mercurial/hgweb/hgweb_mod.py Fri Mar 14 21:36:09 2008 +0100 @@ -367,6 +367,20 @@ branches.append({"name": branch}) return branches + def nodeinbranch(self, ctx): + branches = [] + branch = ctx.branch() + if branch != 'default' and self.repo.branchtags().get(branch) != ctx.node(): + branches.append({"name": branch}) + return branches + + def nodebranchnodefault(self, ctx): + branches = [] + branch = ctx.branch() + if branch != 'default': + branches.append({"name": branch}) + return branches + def showtag(self, tmpl, t1, node=nullid, **args): for t in self.repo.nodetags(node): yield tmpl(t1, tag=t, **args) @@ -458,6 +472,7 @@ "rev": i, "node": hex(n), "tags": self.nodetagsdict(n), + "inbranch": self.nodeinbranch(ctx), "branches": self.nodebranchdict(ctx)}) if limit > 0: @@ -529,6 +544,7 @@ rev=ctx.rev(), node=hex(n), tags=self.nodetagsdict(n), + inbranch=self.nodeinbranch(ctx), branches=self.nodebranchdict(ctx)) if count >= self.maxchanges: @@ -572,6 +588,8 @@ files=files, archives=self.archivelist(hex(n)), tags=self.nodetagsdict(n), + branch=self.nodebranchnodefault(ctx), + inbranch=self.nodeinbranch(ctx), branches=self.nodebranchdict(ctx)) def filelog(self, tmpl, fctx): @@ -642,6 +660,7 @@ author=fctx.user(), date=fctx.date(), desc=fctx.description(), + branch=self.nodebranchnodefault(fctx), parent=self.siblings(fctx.parents()), child=self.siblings(fctx.children()), rename=self.renamelink(fl, n), @@ -689,6 +708,7 @@ date=fctx.date(), desc=fctx.description(), rename=self.renamelink(fl, n), + branch=self.nodebranchnodefault(fctx), parent=self.siblings(fctx.parents()), child=self.siblings(fctx.children()), permissions=fctx.manifest().flags(f)) @@ -757,6 +777,7 @@ dentries=dirlist, archives=self.archivelist(hex(node)), tags=self.nodetagsdict(node), + inbranch=self.nodeinbranch(ctx), branches=self.nodebranchdict(ctx)) def tags(self, tmpl): @@ -837,6 +858,7 @@ rev=i, node=hn, tags=self.nodetagsdict(n), + inbranch=self.nodeinbranch(ctx), branches=self.nodebranchdict(ctx))) yield l @@ -869,6 +891,7 @@ file=path, node=hex(n), rev=fctx.rev(), + branch=self.nodebranchnodefault(fctx), parent=self.siblings(parents), child=self.siblings(fctx.children()), diff=diff)
--- a/mercurial/localrepo.py Fri Mar 14 21:35:49 2008 +0100 +++ b/mercurial/localrepo.py Fri Mar 14 21:36:09 2008 +0100 @@ -883,13 +883,12 @@ if branchname: extra["branch"] = branchname - if use_dirstate: - lines = [line.rstrip() for line in text.rstrip().splitlines()] - while lines and not lines[0]: - del lines[0] - if not lines: - raise util.Abort(_("empty commit message")) - text = '\n'.join(lines) + lines = [line.rstrip() for line in text.rstrip().splitlines()] + while lines and not lines[0]: + del lines[0] + if not lines and use_dirstate: + raise util.Abort(_("empty commit message")) + text = '\n'.join(lines) n = self.changelog.add(mn, changed + removed, text, trp, p1, p2, user, date, extra)
--- a/mercurial/merge.py Fri Mar 14 21:35:49 2008 +0100 +++ b/mercurial/merge.py Fri Mar 14 21:36:09 2008 +0100 @@ -609,7 +609,7 @@ raise util.Abort(_("update spans branches, use 'hg merge' " "or 'hg update -C' to lose changes")) if branchmerge and not forcemerge: - if wc.files(): + if wc.files() or wc.deleted(): raise util.Abort(_("outstanding uncommitted changes")) ### calculate phase
--- a/setup.py Fri Mar 14 21:35:49 2008 +0100 +++ b/setup.py Fri Mar 14 21:36:09 2008 +0100 @@ -10,13 +10,36 @@ raise SystemExit, "Mercurial requires python 2.3 or later." import os +import shutil +import tempfile from distutils.core import setup, Extension from distutils.command.install_data import install_data +from distutils.ccompiler import new_compiler import mercurial.version extra = {} +# simplified version of distutils.ccompiler.CCompiler.has_function +# that actually removes its temporary files. +def has_function(cc, funcname): + tmpdir = tempfile.mkdtemp(prefix='hg-install-') + try: + fname = os.path.join(tmpdir, 'funcname.c') + f = open(fname, 'w') + f.write('int main(void) {\n') + f.write(' %s();\n' % funcname) + f.write('}\n') + f.close() + try: + objects = cc.compile([fname]) + cc.link_executable(objects, os.path.join(tmpdir, "a.out")) + except: + return False + return True + finally: + shutil.rmtree(tmpdir) + # py2exe needs to be installed to work try: import py2exe @@ -66,10 +89,13 @@ ext_modules.append(Extension('mercurial.osutil', ['mercurial/osutil.c'])) if sys.platform == 'linux2' and os.uname()[2] > '2.6': - # the inotify extension is only usable with Linux 2.6 kernels - ext_modules.append(Extension('hgext.inotify.linux._inotify', - ['hgext/inotify/linux/_inotify.c'])) - packages.extend(['hgext.inotify', 'hgext.inotify.linux']) + # The inotify extension is only usable with Linux 2.6 kernels. + # You also need a reasonably recent C library. + cc = new_compiler() + if has_function(cc, 'inotify_add_watch'): + ext_modules.append(Extension('hgext.inotify.linux._inotify', + ['hgext/inotify/linux/_inotify.c'])) + packages.extend(['hgext.inotify', 'hgext.inotify.linux']) except ImportError: pass
--- a/templates/gitweb/changelogentry.tmpl Fri Mar 14 21:35:49 2008 +0100 +++ b/templates/gitweb/changelogentry.tmpl Fri Mar 14 21:36:09 2008 +0100 @@ -1,5 +1,5 @@ <div> -<a class="title" href="{url}rev/#node|short#{sessionvars%urlparameter}"><span class="age">#date|age# ago</span>#desc|strip|firstline|escape#<span class="logtags"> {branches%branchtag}{tags%tagtag}</span></a> +<a class="title" href="{url}rev/#node|short#{sessionvars%urlparameter}"><span class="age">#date|age# ago</span>#desc|strip|firstline|escape#<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a> </div> <div class="title_text"> <div class="log_link">
--- a/templates/gitweb/changeset.tmpl Fri Mar 14 21:35:49 2008 +0100 +++ b/templates/gitweb/changeset.tmpl Fri Mar 14 21:36:09 2008 +0100 @@ -16,12 +16,13 @@ </div> <div> -<a class="title" href="{url}raw-rev/#node|short#">#desc|strip|escape|firstline# <span class="logtags">{branches%branchtag}{tags%tagtag}</span></a> +<a class="title" href="{url}raw-rev/#node|short#">#desc|strip|escape|firstline# <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></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> +#branch%changesetbranch# <tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr> #parent%changesetparent# #child%changesetchild#
--- a/templates/gitweb/fileannotate.tmpl Fri Mar 14 21:35:49 2008 +0100 +++ b/templates/gitweb/fileannotate.tmpl Fri Mar 14 21:36:09 2008 +0100 @@ -35,6 +35,7 @@ <tr> <td></td> <td>#date|date# (#date|age# ago)</td></tr> +#branch%filerevbranch# <tr> <td>changeset {rev}</td> <td style="font-family:monospace"><a class="list" href="{url}rev/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr>
--- a/templates/gitweb/filediff.tmpl Fri Mar 14 21:35:49 2008 +0100 +++ b/templates/gitweb/filediff.tmpl Fri Mar 14 21:36:09 2008 +0100 @@ -28,6 +28,7 @@ <div class="title">{file|escape}</div> <table> +{branch%filerevbranch} <tr> <td>changeset {rev}</td> <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
--- a/templates/gitweb/filerevision.tmpl Fri Mar 14 21:35:49 2008 +0100 +++ b/templates/gitweb/filerevision.tmpl Fri Mar 14 21:36:09 2008 +0100 @@ -35,6 +35,7 @@ <tr> <td></td> <td>#date|date# (#date|age# ago)</td></tr> +#branch%filerevbranch# <tr> <td>changeset {rev}</td> <td style="font-family:monospace"><a class="list" href="{url}rev/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr>
--- a/templates/gitweb/manifest.tmpl Fri Mar 14 21:35:49 2008 +0100 +++ b/templates/gitweb/manifest.tmpl Fri Mar 14 21:36:09 2008 +0100 @@ -20,7 +20,7 @@ <a href="{url}rev/#node|short#{sessionvars%urlparameter}">changeset</a> #archives%archiveentry#<br/> </div> -<div class="title">#path|escape# <span class="logtags">{branches%branchtag}{tags%tagtag}</span></div> +<div class="title">#path|escape# <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></div> <table cellspacing="0"> <tr class="parity#upparity#"> <td style="font-family:monospace">drwxr-xr-x</td>
--- a/templates/gitweb/map Fri Mar 14 21:35:49 2008 +0100 +++ b/templates/gitweb/map Fri Mar 14 21:36:09 2008 +0100 @@ -30,7 +30,9 @@ difflineat = '<span style="color:#990099;"><a class="linenr" href="##lineid#" id="#lineid#">#linenumber#</a> #line|escape#</span>' diffline = '<span><a class="linenr" href="##lineid#" id="#lineid#">#linenumber#</a> #line|escape#</span>' changelogparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="#url#rev/#node|short#{sessionvars%urlparameter}">#node|short#</a></td></tr>' +changesetbranch = '<tr><td>branch</td><td>{name}</td></tr>' changesetparent = '<tr><td>parent {rev}</td><td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>' +filerevbranch = '<tr><td>branch</td><td>{name}</td></tr>' filerevparent = '<tr><td>parent {rev}</td><td style="font-family:monospace"><a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a></td></tr>' filerename = '{file|escape}@' filelogrename = '| <a href="{url}file/#node|short#/#file|urlescape#{sessionvars%urlparameter}">base</a>' @@ -50,7 +52,8 @@ shortlog = shortlog.tmpl tagtag = '<span class="tagtag" title="{name}">{name}</span> ' branchtag = '<span class="branchtag" title="{name}">{name}</span> ' -shortlogentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><i>#author|person#</i></td><td><a class="list" href="{url}rev/#node|short#{sessionvars%urlparameter}"><b>#desc|strip|firstline|escape#</b> <span class="logtags">{branches%branchtag}{tags%tagtag}</span></a></td><td class="link" nowrap><a href="{url}rev/#node|short#{sessionvars%urlparameter}">changeset</a> | <a href="{url}file/#node|short#{sessionvars%urlparameter}">files</a></td></tr>' +inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> ' +shortlogentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><i>#author|person#</i></td><td><a class="list" href="{url}rev/#node|short#{sessionvars%urlparameter}"><b>#desc|strip|firstline|escape#</b> <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a></td><td class="link" nowrap><a href="{url}rev/#node|short#{sessionvars%urlparameter}">changeset</a> | <a href="{url}file/#node|short#{sessionvars%urlparameter}">files</a></td></tr>' filelogentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><a class="list" href="{url}rev/#node|short#{sessionvars%urlparameter}"><b>#desc|strip|firstline|escape#</b></a></td><td class="link"><a href="{url}file/#node|short#/#file|urlescape#{sessionvars%urlparameter}">file</a> | <a href="{url}diff/#node|short#/#file|urlescape#{sessionvars%urlparameter}">diff</a> | <a href="{url}annotate/#node|short#/#file|urlescape#{sessionvars%urlparameter}">annotate</a> #rename%filelogrename#</td></tr>' archiveentry = ' | <a href="{url}archive/{node|short}{extension}">#type|escape#</a> ' indexentry = '<tr class="parity{parity}"><td><a class="list" href="{url}{sessionvars%urlparameter}"><b>{name|escape}</b></a></td><td>{description}</td><td>{contact|obfuscate}</td><td class="age">{lastchange|age} ago</td><td class="indexlinks">{archives%indexarchiveentry}</td><td><div class="rss_logo"><a href="{url}rss-log">RSS</a> <a href="{url}atom-log">Atom</a></div></td></tr>\n'
--- a/templates/static/style-gitweb.css Fri Mar 14 21:35:49 2008 +0100 +++ b/templates/static/style-gitweb.css Fri Mar 14 21:36:09 2008 +0100 @@ -75,3 +75,7 @@ background-color: #aaffaa; border-color: #ccffcc #00cc33 #00cc33 #ccffcc; } +span.logtags span.inbranchtag { + background-color: #d5dde6; + border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4; +}
--- a/tests/test-convert-git.out Fri Mar 14 21:35:49 2008 +0100 +++ b/tests/test-convert-git.out Fri Mar 14 21:36:09 2008 +0100 @@ -10,10 +10,10 @@ 2 t4.1 1 t4.2 0 Merge branch other -changeset: 5:c6d72c98aa00 +changeset: 5:4ab1af49a271 tag: tip -parent: 3:a18bdfccf429 -parent: 4:48cb5b72ce56 +parent: 3:0222ab0998d7 +parent: 4:5333c870e3c2 user: test <test@example.org> date: Mon Jan 01 00:00:15 2007 +0000 files: a
--- a/tests/test-fetch Fri Mar 14 21:35:49 2008 +0100 +++ b/tests/test-fetch Fri Mar 14 21:36:09 2008 +0100 @@ -1,5 +1,9 @@ #!/bin/sh +# adjust to non-default HGPORT, e.g. with run-tests.py -j +hideport() { sed "s/localhost:$HGPORT/localhost:20059/"; } +hidehash() { sed "s/changeset 3:............ merges/changeset 3:... merges/"; } + echo "[extensions]" >> $HGRCPATH echo "fetch=" >> $HGRCPATH @@ -36,12 +40,12 @@ cat a/hg.pid >> "$DAEMON_PIDS" echo '% fetch over http, no auth' -hg --cwd d fetch -d '5 0' http://localhost:$HGPORT/ -hg --cwd d tip --template '{desc}\n' +hg --cwd d fetch -d '5 0' http://localhost:$HGPORT/ | hideport | hidehash +hg --cwd d tip --template '{desc}\n' | hideport echo '% fetch over http with auth (should be hidden in desc)' -hg --cwd e fetch -d '5 0' http://user:password@localhost:$HGPORT/ -hg --cwd e tip --template '{desc}\n' +hg --cwd e fetch -d '5 0' http://user:password@localhost:$HGPORT/ | hideport | hidehash +hg --cwd e tip --template '{desc}\n' | hideport hg clone a f hg clone a g
--- a/tests/test-fetch.out Fri Mar 14 21:35:49 2008 +0100 +++ b/tests/test-fetch.out Fri Mar 14 21:36:09 2008 +0100 @@ -41,7 +41,7 @@ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved merging with 1:5e056962225c 1 files updated, 0 files merged, 0 files removed, 0 files unresolved -new changeset 3:0b6439e938f9 merges remote changes with local +new changeset 3:... merges remote changes with local Automated merge with http://localhost:20059/ % fetch over http with auth (should be hidden in desc) pulling from http://user:***@localhost:20059/ @@ -54,7 +54,7 @@ 1 files updated, 0 files merged, 1 files removed, 0 files unresolved merging with 1:5e056962225c 1 files updated, 0 files merged, 0 files removed, 0 files unresolved -new changeset 3:0b6439e938f9 merges remote changes with local +new changeset 3:... merges remote changes with local Automated merge with http://localhost:20059/ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-hgweb.out Fri Mar 14 21:35:49 2008 +0100 +++ b/tests/test-hgweb.out Fri Mar 14 21:36:09 2008 +0100 @@ -147,4 +147,8 @@ background-color: #aaffaa; border-color: #ccffcc #00cc33 #00cc33 #ccffcc; } +span.logtags span.inbranchtag { + background-color: #d5dde6; + border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4; +} % errors
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-merge-force Fri Mar 14 21:36:09 2008 +0100 @@ -0,0 +1,27 @@ +#!/bin/sh + +hg init repo +cd repo + +echo a > a +hg ci -qAm 'add a' + +echo b > b +hg ci -qAm 'add b' + +hg up -qC 0 +hg rm a +hg ci -m 'rm a' + +hg up -qC 1 +rm a + +echo '% local deleted a file, remote removed' +hg merge # should fail, since there are deleted files +hg -v merge --force +echo % should show a as removed +hg st + +hg ci -m merge +echo % manifest. should not have a: +hg manifest
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-merge-force.out Fri Mar 14 21:36:09 2008 +0100 @@ -0,0 +1,10 @@ +% local deleted a file, remote removed +abort: outstanding uncommitted changes +resolving manifests +removing a +0 files updated, 0 files merged, 1 files removed, 0 files unresolved +(branch merge, don't forget to commit) +% should show a as removed +R a +% manifest. should not have a: +b
--- a/tests/test-symlink-basic Fri Mar 14 21:35:49 2008 +0100 +++ b/tests/test-symlink-basic Fri Mar 14 21:36:09 2008 +0100 @@ -38,3 +38,13 @@ hg cp -v dangling dangling2 hg st -Cmard $TESTDIR/readlink.py dangling dangling2 + +echo '% issue995' +hg up -C +mkdir dir +ln -s dir dirlink +hg ci -qAm 'add dirlink' +mkdir newdir +mv dir newdir/dir +mv dirlink newdir/dirlink +hg mv -A dirlink newdir/dirlink