Mercurial > hg-stable
changeset 11311:fcd06ecd4cb7
Merge backout
author | Steve Borho <steve@borho.org> |
---|---|
date | Tue, 08 Jun 2010 15:52:56 -0500 |
parents | ef7636efeb01 (diff) ac873ecfc3c2 (current diff) |
children | 3f1409082720 0bb14798cd07 |
files | hgext/mq.py mercurial/commands.py mercurial/ui.py |
diffstat | 19 files changed, 152 insertions(+), 135 deletions(-) [+] |
line wrap: on
line diff
--- a/contrib/mergetools.hgrc Tue Jun 08 15:52:41 2010 -0500 +++ b/contrib/mergetools.hgrc Tue Jun 08 15:52:56 2010 -0500 @@ -101,3 +101,12 @@ diffuse.args=$local $base $other diffuse.gui=True diffuse.diffargs=$parent $child + +UltraCompare.regkey=Software\Microsoft\Windows\CurrentVersion\App Paths\UC.exe +UltraCompare.args = $base $local $other -title1 base -title3 other +UltraCompare.priority = -2 +UltraCompare.gui = True +UltraCompare.binary = True +UltraCompare.checkconflicts = True +UltraCompare.checkchanged = True +UltraCompare.diffargs=$child $parent -title1 $clabel -title2 $plabel1
--- a/hgext/gpg.py Tue Jun 08 15:52:41 2010 -0500 +++ b/hgext/gpg.py Tue Jun 08 15:52:56 2010 -0500 @@ -247,7 +247,7 @@ repo.wfile(".hgsigs", "ab").write(sigmessage) if '.hgsigs' not in repo.dirstate: - repo.add([".hgsigs"]) + repo[None].add([".hgsigs"]) if opts["no_commit"]: return
--- a/hgext/keyword.py Tue Jun 08 15:52:41 2010 -0500 +++ b/hgext/keyword.py Tue Jun 08 15:52:56 2010 -0500 @@ -358,7 +358,7 @@ demoitems('keywordmaps', kwmaps.iteritems()) keywords = '$' + '$\n$'.join(sorted(kwmaps.keys())) + '$\n' repo.wopener(fn, 'w').write(keywords) - repo.add([fn]) + repo[None].add([fn]) ui.note(_('\nkeywords written to %s:\n') % fn) ui.note(keywords) repo.dirstate.setbranch('demobranch')
--- a/hgext/mq.py Tue Jun 08 15:52:41 2010 -0500 +++ b/hgext/mq.py Tue Jun 08 15:52:56 2010 -0500 @@ -705,7 +705,7 @@ if not keep: r = self.qrepo() if r: - r.remove(patches, True) + r[None].remove(patches, True) else: for p in patches: os.unlink(self.join(p)) @@ -874,7 +874,7 @@ wlock = None r = self.qrepo() if r: - r.add([patchfn]) + r[None].add([patchfn]) except: repo.rollback() raise @@ -1713,7 +1713,7 @@ self.series_dirty = 1 qrepo = self.qrepo() if qrepo: - qrepo.add(added) + qrepo[None].add(added) def delete(ui, repo, *patches, **opts): """remove patches from queue @@ -1722,7 +1722,7 @@ -k/--keep, the patch files are preserved in the patch directory. To stop managing a patch and move it into permanent history, - use the qfinish command.""" + use the :hg:`qfinish` command.""" q = repo.mq q.delete(repo, patches, opts) q.save_dirty() @@ -1832,7 +1832,7 @@ fp.close() if not os.path.exists(r.wjoin('series')): r.wopener('series', 'w').close() - r.add(['.hgignore', 'series']) + r[None].add(['.hgignore', 'series']) commands.add(ui, r) return 0 @@ -2131,8 +2131,8 @@ Guards control whether a patch can be pushed. A patch with no guards is always pushed. A patch with a positive guard ("+foo") is - pushed only if the qselect command has activated it. A patch with - a negative guard ("-foo") is never pushed if the qselect command + pushed only if the :hg:`qselect` command has activated it. A patch with + a negative guard ("-foo") is never pushed if the :hg:`qselect` command has activated it. With no arguments, print the currently active guards. @@ -2308,6 +2308,7 @@ util.rename(q.join(patch), absdest) r = q.qrepo() if r: + wctx = r[None] wlock = r.wlock() try: if r.dirstate[patch] == 'a': @@ -2315,9 +2316,9 @@ r.dirstate.add(name) else: if r.dirstate[name] == 'r': - r.undelete([name]) - r.copy(patch, name) - r.remove([patch], False) + wctx.undelete([name]) + wctx.copy(patch, name) + wctx.remove([patch], False) finally: wlock.release() @@ -2413,7 +2414,7 @@ def select(ui, repo, *args, **opts): '''set or print guarded patches to push - Use the qguard command to set or print guards on patch, then use + Use the :hg:`qguard` command to set or print guards on patch, then use qselect to tell mq which guards to use. A patch will be pushed if it has no guards or any positive guards match the currently selected guard, but will not be pushed if any negative guards
--- a/mercurial/cmdutil.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/cmdutil.py Tue Jun 08 15:52:56 2010 -0500 @@ -311,12 +311,13 @@ copies[new] = old if not dry_run: + wctx = repo[None] wlock = repo.wlock() try: - repo.remove(deleted) - repo.add(unknown) + wctx.remove(deleted) + wctx.add(unknown) for new, old in copies.iteritems(): - repo.copy(old, new) + wctx.copy(old, new) finally: wlock.release() @@ -329,6 +330,7 @@ targets = {} after = opts.get("after") dryrun = opts.get("dry_run") + wctx = repo[None] def walkpat(pat): srcs = [] @@ -421,12 +423,12 @@ "data will be stored for %s.\n") % (repo.pathto(origsrc, cwd), reltarget)) if repo.dirstate[abstarget] in '?r' and not dryrun: - repo.add([abstarget]) + wctx.add([abstarget]) elif not dryrun: - repo.copy(origsrc, abstarget) + wctx.copy(origsrc, abstarget) if rename and not dryrun: - repo.remove([abssrc], not after) + wctx.remove([abssrc], not after) # pat: ossep # dest ossep
--- a/mercurial/commands.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/commands.py Tue Jun 08 15:52:56 2010 -0500 @@ -56,7 +56,7 @@ if ui.verbose or not exact: ui.status(_('adding %s\n') % m.rel(f)) if not opts.get('dry_run'): - bad += [f for f in repo.add(names) if f in m.files()] + bad += [f for f in repo[None].add(names) if f in m.files()] return bad and 1 or 0 def addremove(ui, repo, *pats, **opts): @@ -1314,7 +1314,7 @@ if ui.verbose or not m.exact(f): ui.status(_('removing %s\n') % m.rel(f)) - repo.remove(forget, unlink=False) + repo[None].remove(forget, unlink=False) return errs def grep(ui, repo, pattern, *pats, **opts): @@ -2669,8 +2669,8 @@ if ui.verbose or not m.exact(f): ui.status(_('removing %s\n') % m.rel(f)) - repo.forget(forget) - repo.remove(remove, unlink=not after) + repo[None].forget(forget) + repo[None].remove(remove, unlink=not after) return ret def rename(ui, repo, *pats, **opts):
--- a/mercurial/context.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/context.py Tue Jun 08 15:52:56 2010 -0500 @@ -8,7 +8,7 @@ from node import nullid, nullrev, short, hex from i18n import _ import ancestor, bdiff, error, util, subrepo, patch -import os, errno +import os, errno, stat propertycache = util.propertycache @@ -761,6 +761,103 @@ self.modified() or self.added() or self.removed() or (missing and self.deleted())) + def add(self, list): + wlock = self._repo.wlock() + ui, ds = self._repo.ui, self._repo.dirstate + try: + rejected = [] + for f in list: + p = self._repo.wjoin(f) + try: + st = os.lstat(p) + except: + ui.warn(_("%s does not exist!\n") % f) + rejected.append(f) + continue + if st.st_size > 10000000: + ui.warn(_("%s: up to %d MB of RAM may be required " + "to manage this file\n" + "(use 'hg revert %s' to cancel the " + "pending addition)\n") + % (f, 3 * st.st_size // 1000000, f)) + if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)): + ui.warn(_("%s not added: only files and symlinks " + "supported currently\n") % f) + rejected.append(p) + elif ds[f] in 'amn': + ui.warn(_("%s already tracked!\n") % f) + elif ds[f] == 'r': + ds.normallookup(f) + else: + ds.add(f) + return rejected + finally: + wlock.release() + + def forget(self, list): + wlock = self._repo.wlock() + try: + for f in list: + if self._repo.dirstate[f] != 'a': + self._repo.ui.warn(_("%s not added!\n") % f) + else: + self._repo.dirstate.forget(f) + finally: + wlock.release() + + def remove(self, list, unlink=False): + if unlink: + for f in list: + try: + util.unlink(self._repo.wjoin(f)) + except OSError, inst: + if inst.errno != errno.ENOENT: + raise + wlock = self._repo.wlock() + try: + for f in list: + if unlink and os.path.exists(self._repo.wjoin(f)): + self._repo.ui.warn(_("%s still exists!\n") % f) + elif self._repo.dirstate[f] == 'a': + self._repo.dirstate.forget(f) + elif f not in self._repo.dirstate: + self._repo.ui.warn(_("%s not tracked!\n") % f) + else: + self._repo.dirstate.remove(f) + finally: + wlock.release() + + def undelete(self, list): + pctxs = self.parents() + wlock = self._repo.wlock() + try: + for f in list: + if self._repo.dirstate[f] != 'r': + self._repo.ui.warn(_("%s not removed!\n") % f) + else: + fctx = f in pctxs[0] and pctxs[0] or pctxs[1] + t = fctx.data() + self._repo.wwrite(f, t, fctx.flags()) + self._repo.dirstate.normal(f) + finally: + wlock.release() + + def copy(self, source, dest): + p = self._repo.wjoin(dest) + if not (os.path.exists(p) or os.path.islink(p)): + self._repo.ui.warn(_("%s does not exist!\n") % dest) + elif not (os.path.isfile(p) or os.path.islink(p)): + self._repo.ui.warn(_("copy failed: %s is not a file or a " + "symbolic link\n") % dest) + else: + wlock = self._repo.wlock() + try: + if self._repo.dirstate[dest] in '?r': + self._repo.dirstate.add(dest) + self._repo.dirstate.copy(source, dest) + finally: + wlock.release() + class workingfilectx(filectx): """A workingfilectx object makes access to data related to a particular file in the working directory convenient."""
--- a/mercurial/dispatch.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/dispatch.py Tue Jun 08 15:52:56 2010 -0500 @@ -29,7 +29,7 @@ sys.stderr.write(_("hg: parse error at %s: %s\n") % (inst.args[1], inst.args[0])) else: - sys.stderr.write(_("hg: parse error: %s\n") % ints.args[0]) + sys.stderr.write(_("hg: parse error: %s\n") % inst.args[0]) return -1 return _runcatch(u, args)
--- a/mercurial/localrepo.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/localrepo.py Tue Jun 08 15:52:56 2010 -0500 @@ -16,7 +16,7 @@ import tags as tagsmod import url as urlmod from lock import release -import weakref, stat, errno, os, time, inspect +import weakref, errno, os, time, inspect propertycache = util.propertycache class localrepository(repo.repository): @@ -210,7 +210,7 @@ writetags(fp, names, encoding.fromlocal, prevtags) if '.hgtags' not in self.dirstate: - self.add(['.hgtags']) + self[None].add(['.hgtags']) m = matchmod.exact(self.root, '', ['.hgtags']) tagnode = self.commit(message, user, date, extra=extra, match=m) @@ -1112,103 +1112,6 @@ [l.sort() for l in r] return r - def add(self, list): - wlock = self.wlock() - try: - rejected = [] - for f in list: - p = self.wjoin(f) - try: - st = os.lstat(p) - except: - self.ui.warn(_("%s does not exist!\n") % f) - rejected.append(f) - continue - if st.st_size > 10000000: - self.ui.warn(_("%s: up to %d MB of RAM may be required " - "to manage this file\n" - "(use 'hg revert %s' to cancel the " - "pending addition)\n") - % (f, 3 * st.st_size // 1000000, f)) - if not (stat.S_ISREG(st.st_mode) or stat.S_ISLNK(st.st_mode)): - self.ui.warn(_("%s not added: only files and symlinks " - "supported currently\n") % f) - rejected.append(p) - elif self.dirstate[f] in 'amn': - self.ui.warn(_("%s already tracked!\n") % f) - elif self.dirstate[f] == 'r': - self.dirstate.normallookup(f) - else: - self.dirstate.add(f) - return rejected - finally: - wlock.release() - - def forget(self, list): - wlock = self.wlock() - try: - for f in list: - if self.dirstate[f] != 'a': - self.ui.warn(_("%s not added!\n") % f) - else: - self.dirstate.forget(f) - finally: - wlock.release() - - def remove(self, list, unlink=False): - if unlink: - for f in list: - try: - util.unlink(self.wjoin(f)) - except OSError, inst: - if inst.errno != errno.ENOENT: - raise - wlock = self.wlock() - try: - for f in list: - if unlink and os.path.exists(self.wjoin(f)): - self.ui.warn(_("%s still exists!\n") % f) - elif self.dirstate[f] == 'a': - self.dirstate.forget(f) - elif f not in self.dirstate: - self.ui.warn(_("%s not tracked!\n") % f) - else: - self.dirstate.remove(f) - finally: - wlock.release() - - def undelete(self, list): - manifests = [self.manifest.read(self.changelog.read(p)[0]) - for p in self.dirstate.parents() if p != nullid] - wlock = self.wlock() - try: - for f in list: - if self.dirstate[f] != 'r': - self.ui.warn(_("%s not removed!\n") % f) - else: - m = f in manifests[0] and manifests[0] or manifests[1] - t = self.file(f).read(m[f]) - self.wwrite(f, t, m.flags(f)) - self.dirstate.normal(f) - finally: - wlock.release() - - def copy(self, source, dest): - p = self.wjoin(dest) - if not (os.path.exists(p) or os.path.islink(p)): - self.ui.warn(_("%s does not exist!\n") % dest) - elif not (os.path.isfile(p) or os.path.islink(p)): - self.ui.warn(_("copy failed: %s is not a file or a " - "symbolic link\n") % dest) - else: - wlock = self.wlock() - try: - if self.dirstate[dest] in '?r': - self.dirstate.add(dest) - self.dirstate.copy(source, dest) - finally: - wlock.release() - def heads(self, start=None): heads = self.changelog.heads(start) # sort the output in rev descending order
--- a/mercurial/parser.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/parser.py Tue Jun 08 15:52:56 2010 -0500 @@ -33,8 +33,8 @@ def _match(self, m): 'make sure the tokenizer matches an end condition' if self.current[0] != m: - raise error.ParseError("unexpected token: %s" % self.current[2], - pos) + raise error.ParseError("unexpected token: %s" % self.current[0], + self.current[2]) self._advance() def _parse(self, bind=0): token, value, pos = self._advance()
--- a/mercurial/patch.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/patch.py Tue Jun 08 15:52:56 2010 -0500 @@ -1226,10 +1226,13 @@ copies.append((gp.oldpath, gp.path)) elif gp.op == 'DELETE': removes.add(gp.path) + + wctx = repo[None] for src, dst in copies: - repo.copy(src, dst) + wctx.copy(src, dst) if (not similarity) and removes: - repo.remove(sorted(removes), True) + wctx.remove(sorted(removes), True) + for f in patches: gp = patches[f] if gp and gp.mode:
--- a/mercurial/revset.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/revset.py Tue Jun 08 15:52:56 2010 -0500 @@ -288,7 +288,6 @@ continue else: for r in subset: - c = repo[r] for f in repo[r].manifest(): if m(f): s.append(r)
--- a/mercurial/templater.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/templater.py Tue Jun 08 15:52:56 2010 -0500 @@ -17,7 +17,7 @@ if isinstance(thing, str): yield thing elif not hasattr(thing, '__iter__'): - if i is not None: + if thing is not None: yield str(thing) else: for i in thing:
--- a/mercurial/ui.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/ui.py Tue Jun 08 15:52:56 2010 -0500 @@ -228,7 +228,7 @@ if result is None: result = default or [] if isinstance(result, basestring): - result = _configlist(result) + result = _configlist(result.lstrip(' ,\n')) if result is None: result = default or [] return result
--- a/mercurial/win32.py Tue Jun 08 15:52:41 2010 -0500 +++ b/mercurial/win32.py Tue Jun 08 15:52:56 2010 -0500 @@ -32,7 +32,7 @@ pass # Fake hardlinking error raise OSError(errno.EINVAL, 'Hardlinking not supported') - except pywintypes.error, details: + except pywintypes.error: raise OSError(errno.EINVAL, 'target implements hardlinks improperly') except NotImplementedError: # Another fake error win Win98 raise OSError(errno.EINVAL, 'Hardlinking not supported')
--- a/tests/test-context.py Tue Jun 08 15:52:41 2010 -0500 +++ b/tests/test-context.py Tue Jun 08 15:52:56 2010 -0500 @@ -13,7 +13,7 @@ os.utime('foo', (1000, 1000)) # add+commit 'foo' -repo.add(['foo']) +repo[None].add(['foo']) repo.commit(text='commit1', date="0 0") print "workingfilectx.date =", repo[None]['foo'].date()
--- a/tests/test-revlog-ancestry.py Tue Jun 08 15:52:41 2010 -0500 +++ b/tests/test-revlog-ancestry.py Tue Jun 08 15:52:56 2010 -0500 @@ -13,7 +13,7 @@ f = open(name, 'w') f.write('%s\n' % name) f.close() - repo.add([name]) + repo[None].add([name]) commit(name, time) def update(rev):
--- a/tests/test-ui-config.py Tue Jun 08 15:52:41 2010 -0500 +++ b/tests/test-ui-config.py Tue Jun 08 15:52:56 2010 -0500 @@ -24,6 +24,7 @@ 'lists.list15=" just with starting quotation', 'lists.list16="longer quotation" with "no ending quotation', 'lists.list17=this is \\" "not a quotation mark"', + 'lists.list18=\n \n\nding\ndong', ]) print repr(testui.configitems('values')) @@ -62,6 +63,7 @@ print repr(testui.configlist('lists', 'list15')) print repr(testui.configlist('lists', 'list16')) print repr(testui.configlist('lists', 'list17')) +print repr(testui.configlist('lists', 'list18')) print repr(testui.configlist('lists', 'unknown')) print repr(testui.configlist('lists', 'unknown', '')) print repr(testui.configlist('lists', 'unknown', 'foo'))
--- a/tests/test-ui-config.py.out Tue Jun 08 15:52:41 2010 -0500 +++ b/tests/test-ui-config.py.out Tue Jun 08 15:52:56 2010 -0500 @@ -1,5 +1,5 @@ [('string', 'string value'), ('bool1', 'true'), ('bool2', 'false')] -[('list1', 'foo'), ('list2', 'foo bar baz'), ('list3', 'alice, bob'), ('list4', 'foo bar baz alice, bob'), ('list5', 'abc d"ef"g "hij def"'), ('list6', '"hello world", "how are you?"'), ('list7', 'Do"Not"Separate'), ('list8', '"Do"Separate'), ('list9', '"Do\\"NotSeparate"'), ('list10', 'string "with extraneous" quotation mark"'), ('list11', 'x, y'), ('list12', '"x", "y"'), ('list13', '""" key = "x", "y" """'), ('list14', ',,,, '), ('list15', '" just with starting quotation'), ('list16', '"longer quotation" with "no ending quotation'), ('list17', 'this is \\" "not a quotation mark"')] +[('list1', 'foo'), ('list2', 'foo bar baz'), ('list3', 'alice, bob'), ('list4', 'foo bar baz alice, bob'), ('list5', 'abc d"ef"g "hij def"'), ('list6', '"hello world", "how are you?"'), ('list7', 'Do"Not"Separate'), ('list8', '"Do"Separate'), ('list9', '"Do\\"NotSeparate"'), ('list10', 'string "with extraneous" quotation mark"'), ('list11', 'x, y'), ('list12', '"x", "y"'), ('list13', '""" key = "x", "y" """'), ('list14', ',,,, '), ('list15', '" just with starting quotation'), ('list16', '"longer quotation" with "no ending quotation'), ('list17', 'this is \\" "not a quotation mark"'), ('list18', '\n \n\nding\ndong')] --- 'string value' 'true' @@ -31,6 +31,7 @@ ['"', 'just', 'with', 'starting', 'quotation'] ['longer quotation', 'with', '"no', 'ending', 'quotation'] ['this', 'is', '"', 'not a quotation mark'] +['ding', 'dong'] [] [] ['foo']