# HG changeset patch # User Martin Geisler # Date 1245702168 -7200 # Node ID 3ad0b5ddae58518cd919f170e3640aa4dcc9b199 # Parent 482a92a45917eeb32746d091b0c38bcdd896a996# Parent b793ce68f0825b32a6a5589378db570d4bf58584 merged with crew diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/acl.py --- a/hgext/acl.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/acl.py Mon Jun 22 22:22:48 2009 +0200 @@ -6,18 +6,23 @@ # GNU General Public License version 2, incorporated herein by reference. # -'''provide simple hooks for access control +'''control access to a repository using simple hooks -Authorization is against local user name on system where hook is run, not -committer of original changeset (since that is easy to spoof). +This hook makes it possible to allow or deny write access to portions +of a repository when receiving incoming changesets. + +The authorization is matched based on the local user name on the +system where the hook runs, and not the committer of the original +changeset (since the latter is merely informative). -The acl hook is best to use if you use hgsh to set up restricted shells for -authenticated users to only push to / pull from. It's not safe if user has -interactive shell access, because they can disable the hook. It's also not -safe if remote users share one local account, because then there's no way to -tell remote users apart. +The acl hook is best used along with a restricted shell like hgsh, +preventing authenticating users from doing anything other than +pushing or pulling. The hook is not safe to use if users have +interactive shell access, as they can then disable the hook. +Nor is it safe if remote users share an account, because then there +is no way to distinguish them. -To use, configure the acl extension in hgrc like this: +To use this hook, configure the acl extension in your hgrc like this: [extensions] hgext.acl = @@ -26,21 +31,24 @@ pretxnchangegroup.acl = python:hgext.acl.hook [acl] - sources = serve # check if source of incoming changes in this list - # ("serve" == ssh or http, "push", "pull", "bundle") + # Check whether the source of incoming changes is in this list + # ("serve" == ssh or http, "push", "pull", "bundle") + sources = serve -Allow and deny lists have a subtree pattern (default syntax is glob) on the -left and user names on right. The deny list is checked before the allow list. +The allow and deny sections take a subtree pattern as key (with a +glob syntax by default), and a comma separated list of users as +the corresponding value. The deny list is checked before the allow +list is. [acl.allow] - # if acl.allow not present, all users allowed by default - # empty acl.allow = no users allowed + # If acl.allow is not present, all users are allowed by default. + # An empty acl.allow section means no users allowed. docs/** = doc_writer .hgtags = release_engineer [acl.deny] - # if acl.deny not present, no users denied by default - # empty acl.deny = all users allowed + # If acl.deny is not present, no users are refused by default. + # An empty acl.deny section means all users allowed. glob pattern = user4, user5 ** = user6 ''' diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/bookmarks.py --- a/hgext/bookmarks.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/bookmarks.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,24 +5,26 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''Mercurial bookmarks +'''track a line of development with movable markers -Mercurial bookmarks are local moveable pointers to changesets. Every -bookmark points to a changeset identified by its hash. If you commit a -changeset that is based on a changeset that has a bookmark on it, the -bookmark is forwarded to the new changeset. +Bookmarks are local movable markers to changesets. Every bookmark +points to a changeset identified by its hash. If you commit a +changeset that is based on a changeset that has a bookmark on it, +the bookmark shifts to the new changeset. + +It is possible to use bookmark names in every revision lookup +(e.g. hg merge, hg update). -It is possible to use bookmark names in every revision lookup (e.g. hg -merge, hg update). - -The bookmark extension offers the possiblity to have a more git-like -experience by adding the following configuration option to your .hgrc: +By default, when several bookmarks point to the same changeset, they +will all move forward together. It is possible to obtain a more +git-like experience by adding the following configuration option to +your .hgrc: -[bookmarks] -track.current = True + [bookmarks] + track.current = True -This will cause bookmarks to track the bookmark that you are currently -on, and just updates it. This is similar to git's approach to +This will cause Mercurial to track the bookmark that you are currently +using, and only update it. This is similar to git's approach to branching. ''' @@ -120,10 +122,10 @@ repo._bookmarkcurrent = mark def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, rename=None): - '''Mercurial bookmarks + '''track a line of development with movable markers Bookmarks are pointers to certain commits that move when - commiting. Bookmarks are local. They can be renamed, copied and + committing. Bookmarks are local. They can be renamed, copied and deleted. It is possible to use bookmark names in 'hg merge' and 'hg update' to merge and update respectively to a given bookmark. diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/bugzilla.py --- a/hgext/bugzilla.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/bugzilla.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''Bugzilla integration +'''integrate Mercurial with a Bugzilla bug tracker This hook extension adds comments on bugs in Bugzilla when changesets that refer to bugs by Bugzilla ID are seen. The hook does not change diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/children.py --- a/hgext/children.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/children.py Mon Jun 22 22:22:48 2009 +0200 @@ -8,7 +8,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''provides children command to show children changesets''' +'''display children changesets''' from mercurial import cmdutil from mercurial.commands import templateopts diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/churn.py --- a/hgext/churn.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/churn.py Mon Jun 22 22:22:48 2009 +0200 @@ -6,7 +6,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''command to show certain statistics about revision history''' +'''display statistics about repository history''' from mercurial.i18n import _ from mercurial import patch, cmdutil, util, templater diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/color.py --- a/hgext/color.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/color.py Mon Jun 22 22:22:48 2009 +0200 @@ -16,7 +16,7 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -'''add color output to status, qseries, and diff-related commands +'''colorize output from some commands This extension modifies the status command to add color to its output to reflect file status, the qseries command to add color to reflect diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/convert/__init__.py --- a/hgext/convert/__init__.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/convert/__init__.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''converting foreign VCS repositories to Mercurial''' +'''import from foreign VCS repositories into Mercurial''' import convcmd import cvsps diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/convert/common.py --- a/hgext/convert/common.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/convert/common.py Mon Jun 22 22:22:48 2009 +0200 @@ -103,7 +103,10 @@ raise NotImplementedError() def gettags(self): - """Return the tags as a dictionary of name: revision""" + """Return the tags as a dictionary of name: revision + + Tag names must be UTF-8 strings. + """ raise NotImplementedError() def recode(self, s, encoding=None): @@ -198,7 +201,9 @@ def puttags(self, tags): """Put tags into sink. - tags: {tagname: sink_rev_id, ...}""" + + tags: {tagname: sink_rev_id, ...} where tagname is an UTF-8 string. + """ raise NotImplementedError() def setbranch(self, branch, pbranches): diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/convert/cvsps.py --- a/hgext/convert/cvsps.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/convert/cvsps.py Mon Jun 22 22:22:48 2009 +0200 @@ -511,7 +511,9 @@ e.comment == c.comment and e.author == c.author and e.branch == c.branch and - e.branchpoints == c.branchpoints and + (not hasattr(e, 'branchpoints') or + not hasattr (c, 'branchpoints') or + e.branchpoints == c.branchpoints) and ((c.date[0] + c.date[1]) <= (e.date[0] + e.date[1]) <= (c.date[0] + c.date[1]) + fuzz) and diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/convert/subversion.py --- a/hgext/convert/subversion.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/convert/subversion.py Mon Jun 22 22:22:48 2009 +0200 @@ -1,19 +1,6 @@ # Subversion 1.4/1.5 Python API backend # # Copyright(C) 2007 Daniel Holth et al -# -# Configuration options: -# -# convert.svn.trunk -# Relative path to the trunk (default: "trunk") -# convert.svn.branches -# Relative path to tree of branches (default: "branches") -# convert.svn.tags -# Relative path to tree of tags (default: "tags") -# -# Set these in a hgrc, or on the command line as follows: -# -# hg convert --config convert.svn.trunk=wackoname [...] import locale import os @@ -23,7 +10,7 @@ import tempfile import urllib -from mercurial import strutil, util +from mercurial import strutil, util, encoding from mercurial.i18n import _ # Subversion stuff. Works best with very recent Python SVN bindings @@ -63,6 +50,9 @@ path = os.path.normpath(os.path.abspath(path)) if os.name == 'nt': path = '/' + util.normpath(path) + # Module URL is later compared with the repository URL returned + # by svn API, which is UTF-8. + path = encoding.tolocal(path) return 'file://%s' % urllib.quote(path) return path @@ -213,7 +203,6 @@ raise MissingTool(_('Subversion python bindings are too old, 1.4 ' 'or later required')) - self.encoding = locale.getpreferredencoding() self.lastrevs = {} latest = None @@ -240,7 +229,7 @@ self.rootmodule = self.module self.commits = {} self.paths = {} - self.uuid = svn.ra.get_uuid(self.ra).decode(self.encoding) + self.uuid = svn.ra.get_uuid(self.ra) except SubversionException: ui.traceback() raise NoRepo("%s does not look like a Subversion repo" % self.url) @@ -260,15 +249,10 @@ raise util.Abort(_('svn: start revision %s is not an integer') % self.startrev) - try: - self.get_blacklist() - except IOError: - pass - self.head = self.latest(self.module, latest) if not self.head: - raise util.Abort(_('no revision found in module %s') % - self.module.encode(self.encoding)) + raise util.Abort(_('no revision found in module %s') + % self.module) self.last_changed = self.revnum(self.head) self._changescache = None @@ -328,8 +312,8 @@ self.module += '/' + trunk self.head = self.latest(self.module, self.last_changed) if not self.head: - raise util.Abort(_('no revision found in module %s') % - self.module.encode(self.encoding)) + raise util.Abort(_('no revision found in module %s') + % self.module) # First head in the list is the module's head self.heads = [self.head] @@ -347,8 +331,7 @@ continue brevid = self.latest(module, self.last_changed) if not brevid: - self.ui.note(_('ignoring empty branch %s\n') % - branch.encode(self.encoding)) + self.ui.note(_('ignoring empty branch %s\n') % branch) continue self.ui.note(_('found branch %s at %d\n') % (branch, self.revnum(brevid))) @@ -524,19 +507,14 @@ self.convertfp.write('%s %d\n' % (destrev, self.revnum(rev))) self.convertfp.flush() - # -- helper functions -- - def revid(self, revnum, module=None): - if not module: - module = self.module - return u"svn:%s%s@%s" % (self.uuid, module.decode(self.encoding), - revnum) + return 'svn:%s%s@%s' % (self.uuid, module or self.module, revnum) def revnum(self, rev): return int(rev.split('@')[-1]) def revsplit(self, rev): - url, revnum = rev.encode(self.encoding).rsplit('@', 1) + url, revnum = rev.rsplit('@', 1) revnum = int(revnum) parts = url.split('/', 1) uuid = parts.pop(0)[4:] @@ -593,25 +571,6 @@ return None return self.revid(dirent.created_rev, path) - def get_blacklist(self): - """Avoid certain revision numbers. - It is not uncommon for two nearby revisions to cancel each other - out, e.g. 'I copied trunk into a subdirectory of itself instead - of making a branch'. The converted repository is significantly - smaller if we ignore such revisions.""" - self.blacklist = set() - blacklist = self.blacklist - for line in file("blacklist.txt", "r"): - if not line.startswith("#"): - try: - svn_rev = int(line.strip()) - blacklist.add(svn_rev) - except ValueError: - pass # not an integer or a comment - - def is_blacklisted(self, svn_rev): - return svn_rev in self.blacklist - def reparent(self, module): """Reparent the svn transport and return the previous parent.""" if self.prevmodule == module: @@ -639,11 +598,10 @@ for path, ent in paths: entrypath = self.getrelpath(path) - entry = entrypath.decode(self.encoding) kind = self._checkpath(entrypath, revnum) if kind == svn.core.svn_node_file: - entries.append(self.recode(entry)) + entries.append(self.recode(entrypath)) if not ent.copyfrom_path or not parents: continue # Copy sources not in parent revisions cannot be @@ -656,102 +614,46 @@ continue self.ui.debug(_("copied to %s from %s@%s\n") % (entrypath, copyfrom_path, ent.copyfrom_rev)) - copies[self.recode(entry)] = self.recode(copyfrom_path) + copies[self.recode(entrypath)] = self.recode(copyfrom_path) elif kind == 0: # gone, but had better be a deleted *file* self.ui.debug(_("gone from %s\n") % ent.copyfrom_rev) - - # if a branch is created but entries are removed in - # the same changeset, get the right fromrev - # parents cannot be empty here, you cannot remove - # things from a root revision. - uuid, old_module, fromrev = self.revsplit(parents[0]) - - basepath = old_module + "/" + self.getrelpath(path) - entrypath = basepath - - def lookup_parts(p): - rc = None - parts = p.split("/") - for i in range(len(parts)): - part = "/".join(parts[:i]) - info = part, copyfrom.get(part, None) - if info[1] is not None: - self.ui.debug(_("found parent directory %s\n") % info[1]) - rc = info - return rc - - self.ui.debug(_("base, entry %s %s\n") % (basepath, entrypath)) - - frompath, froment = lookup_parts(entrypath) or (None, revnum - 1) - - # need to remove fragment from lookup_parts and - # replace with copyfrom_path - if frompath is not None: - self.ui.debug(_("munge-o-matic\n")) - self.ui.debug(entrypath + '\n') - self.ui.debug(entrypath[len(frompath):] + '\n') - entrypath = froment.copyfrom_path + entrypath[len(frompath):] - fromrev = froment.copyfrom_rev - self.ui.debug(_("info: %s %s %s %s\n") % (frompath, froment, ent, entrypath)) + pmodule, prevnum = self.revsplit(parents[0])[1:] + parentpath = pmodule + "/" + entrypath + self.ui.debug(_("entry %s\n") % parentpath) # We can avoid the reparent calls if the module has # not changed but it probably does not worth the pain. prevmodule = self.reparent('') - fromkind = svn.ra.check_path(self.ra, entrypath.strip('/'), fromrev) + fromkind = svn.ra.check_path(self.ra, parentpath.strip('/'), prevnum) self.reparent(prevmodule) - if fromkind == svn.core.svn_node_file: # a deleted file - entries.append(self.recode(entry)) + if fromkind == svn.core.svn_node_file: + entries.append(self.recode(entrypath)) elif fromkind == svn.core.svn_node_dir: - # print "Deleted/moved non-file:", revnum, path, ent - # children = self._find_children(path, revnum - 1) - # print ("find children %s@%d from %d action %s" % - # (path, revnum, ent.copyfrom_rev, ent.action)) - # Sometimes this is tricky. For example: in - # The Subversion Repository revision 6940 a dir - # was copied and one of its files was deleted - # from the new location in the same commit. This - # code can't deal with that yet. if ent.action == 'C': - children = self._find_children(path, fromrev) + children = self._find_children(path, prevnum) else: - oroot = entrypath.strip('/') + oroot = parentpath.strip('/') nroot = path.strip('/') - children = self._find_children(oroot, fromrev) + children = self._find_children(oroot, prevnum) children = [s.replace(oroot,nroot) for s in children] - # Mark all [files, not directories] as deleted. + for child in children: - # Can we move a child directory and its - # parent in the same commit? (probably can). Could - # cause problems if instead of revnum -1, - # we have to look in (copyfrom_path, revnum - 1) - entrypath = self.getrelpath("/" + child, module=old_module) - if entrypath: - entry = self.recode(entrypath.decode(self.encoding)) - if entry in copies: - # deleted file within a copy - del copies[entry] - else: - entries.append(entry) + childpath = self.getrelpath("/" + child, pmodule) + if not childpath: + continue + if childpath in copies: + del copies[childpath] + entries.append(childpath) else: self.ui.debug(_('unknown path in revision %d: %s\n') % \ (revnum, path)) elif kind == svn.core.svn_node_dir: - # Should probably synthesize normal file entries - # and handle as above to clean up copy/rename handling. - # If the directory just had a prop change, # then we shouldn't need to look for its children. if ent.action == 'M': continue - # Also this could create duplicate entries. Not sure - # whether this will matter. Maybe should make entries a set. - # print "Changed directory", revnum, path, ent.action, \ - # ent.copyfrom_path, ent.copyfrom_rev - # This will fail if a directory was copied - # from another branch and then some of its files - # were deleted in the same transaction. children = sorted(self._find_children(path, revnum)) for child in children: # Can we move a child directory and its @@ -759,15 +661,13 @@ # cause problems if instead of revnum -1, # we have to look in (copyfrom_path, revnum - 1) entrypath = self.getrelpath("/" + child) - # print child, self.module, entrypath if entrypath: # Need to filter out directories here... kind = self._checkpath(entrypath, revnum) if kind != svn.core.svn_node_dir: entries.append(self.recode(entrypath)) - # Copies here (must copy all from source) Probably not - # a real problem for us if source does not exist + # Handle directory copies if not ent.copyfrom_path or not parents: continue # Copy sources not in parent revisions cannot be @@ -775,8 +675,7 @@ pmodule, prevnum = self.revsplit(parents[0])[1:] if ent.copyfrom_rev < prevnum: continue - copyfrompath = ent.copyfrom_path.decode(self.encoding) - copyfrompath = self.getrelpath(copyfrompath, pmodule) + copyfrompath = self.getrelpath(ent.copyfrom_path, pmodule) if not copyfrompath: continue copyfrom[path] = ent @@ -788,10 +687,9 @@ entrypath = self.getrelpath("/" + child, pmodule) if not entrypath: continue - entry = entrypath.decode(self.encoding) - copytopath = path + entry[len(copyfrompath):] + copytopath = path + entrypath[len(copyfrompath):] copytopath = self.getrelpath(copytopath) - copies[self.recode(copytopath)] = self.recode(entry, pmodule) + copies[self.recode(copytopath)] = self.recode(entrypath) return (list(set(entries)), copies) @@ -862,7 +760,7 @@ desc=log, parents=parents, branch=branch, - rev=rev.encode('utf-8')) + rev=rev) self.commits[rev] = cset # The parents list is *shared* among self.paths and the @@ -886,10 +784,6 @@ if revnum < self.startrev: lastonbranch = True break - if self.is_blacklisted(revnum): - self.ui.note(_('skipping blacklisted revision %d\n') - % revnum) - continue if not paths: self.ui.debug(_('revision %d has no entries\n') % revnum) continue diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/fetch.py --- a/hgext/fetch.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/fetch.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''pulling, updating and merging in one command''' +'''pull, update and merge in one command''' from mercurial.i18n import _ from mercurial.node import nullid, short diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/gpg.py --- a/hgext/gpg.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/gpg.py Mon Jun 22 22:22:48 2009 +0200 @@ -3,7 +3,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''GnuPG signing extension for Mercurial''' +'''sign and verify changesets''' import os, tempfile, binascii from mercurial import util, commands, match diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/graphlog.py --- a/hgext/graphlog.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/graphlog.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''show revision graphs in terminal windows +'''show revision graphs in terminals This extension adds a --graph option to the incoming, outgoing and log commands. When this options is given, an ASCII representation of the diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/hgcia.py --- a/hgext/hgcia.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/hgcia.py Mon Jun 22 22:22:48 2009 +0200 @@ -1,7 +1,7 @@ # Copyright (C) 2007-8 Brendan Cully # Published under the GNU GPL -"""CIA notification +"""integrate Mercurial with a CIA notification service This is meant to be run as a changegroup or incoming hook. To configure it, set the following options in your hgrc: diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/hgk.py --- a/hgext/hgk.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/hgk.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''browsing the repository in a graphical way +'''browse the repository in a graphical way The hgk extension allows browsing the history of a repository in a graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/highlight/__init__.py --- a/hgext/highlight/__init__.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/highlight/__init__.py Mon Jun 22 22:22:48 2009 +0200 @@ -8,7 +8,7 @@ # The original module was split in an interface and an implementation # file to defer pygments loading and speedup extension setup. -"""syntax highlighting in hgweb, based on Pygments +"""syntax highlighting for hgweb It depends on the Pygments syntax highlighting library: http://pygments.org/ diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/inotify/__init__.py --- a/hgext/inotify/__init__.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/inotify/__init__.py Mon Jun 22 22:22:48 2009 +0200 @@ -6,8 +6,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''inotify-based status acceleration for Linux systems -''' +'''accelerate status report using system level services''' # todo: socket permissions diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/keyword.py --- a/hgext/keyword.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/keyword.py Mon Jun 22 22:22:48 2009 +0200 @@ -26,7 +26,7 @@ # # Run "hg help keyword" and "hg kwdemo" to get info on configuration. -'''keyword expansion in tracked files +'''expand keywords in tracked files This extension expands RCS/CVS-like or self-customized $Keywords$ in tracked text files selected by your configuration. diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/mq.py --- a/hgext/mq.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/mq.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''patch management and development +'''work with a stack of patches This extension lets you work with a stack of patches in a Mercurial repository. It manages two stacks of patches - all known patches, and diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/notify.py --- a/hgext/notify.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/notify.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''hook extension to email notifications on commits/pushes +'''send e-mail notifications for commits/pushes Subscriptions can be managed through hgrc. Default mode is to print messages to stdout, for testing and configuring. diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/pager.py --- a/hgext/pager.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/pager.py Mon Jun 22 22:22:48 2009 +0200 @@ -12,7 +12,7 @@ # # Run "hg help pager" to get info on configuration. -'''browse command output with external pager +'''browse command output with an external pager To set the pager that should be used, set the application variable: diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/parentrevspec.py --- a/hgext/parentrevspec.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/parentrevspec.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''use suffixes to refer to ancestor revisions +'''interpret suffixes to refer to ancestor revisions This extension allows you to use git-style suffixes to refer to the ancestors of a specific revision. diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/patchbomb.py --- a/hgext/patchbomb.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/patchbomb.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''sending Mercurial changesets as a series of patch emails +'''send Mercurial changesets as a series of patch e-mails The series is started off with a "[PATCH 0 of N]" introduction, which describes the series as a whole. diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/purge.py --- a/hgext/purge.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/purge.py Mon Jun 22 22:22:48 2009 +0200 @@ -23,7 +23,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -'''enable removing untracked files only''' +'''delete files not tracked from the working directory''' from mercurial import util, commands, cmdutil from mercurial.i18n import _ diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/record.py --- a/hgext/record.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/record.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''interactive change selection during commit or qrefresh''' +'''interactively select which sets of changes to commit/qrefresh''' from mercurial.i18n import gettext, _ from mercurial import cmdutil, commands, extensions, hg, mdiff, patch diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/share.py --- a/hgext/share.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/share.py Mon Jun 22 22:22:48 2009 +0200 @@ -3,7 +3,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''provides the hg share command''' +'''share a common history between several working directories''' import os from mercurial.i18n import _ diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/transplant.py --- a/hgext/transplant.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/transplant.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''patch transplanting tool +'''transplant changesets from another branch This extension allows you to transplant patches from another branch. diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/win32mbcs.py --- a/hgext/win32mbcs.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/win32mbcs.py Mon Jun 22 22:22:48 2009 +0200 @@ -9,7 +9,7 @@ # GNU General Public License version 2, incorporated herein by reference. # -"""allow to use MBCS path with problematic encoding. +'''allow the use of MBCS paths with problematic encoding Some MBCS encodings are not good for some path operations (i.e. splitting path, case conversion, etc.) with its encoded bytes. We call @@ -36,8 +36,7 @@ Path encoding conversion are done between Unicode and encoding.encoding which is decided by Mercurial from current locale setting or HGENCODING. - -""" +''' import os from mercurial.i18n import _ diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/win32text.py --- a/hgext/win32text.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/win32text.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''LF <-> CRLF/CR translation utilities +'''perform automatic newline conversion To perform automatic newline conversion, use: diff -r 482a92a45917 -r 3ad0b5ddae58 hgext/zeroconf/__init__.py --- a/hgext/zeroconf/__init__.py Mon Jun 22 15:58:21 2009 -0300 +++ b/hgext/zeroconf/__init__.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -'''zeroconf support for Mercurial repositories +'''discover and advertise repositories on the local network Zeroconf enabled repositories will be announced in a network without the need to configure a server or a service. They can be discovered diff -r 482a92a45917 -r 3ad0b5ddae58 mercurial/extensions.py --- a/mercurial/extensions.py Mon Jun 22 15:58:21 2009 -0300 +++ b/mercurial/extensions.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. -import imp, os, sys +import imp, os import util, cmdutil, help from i18n import _, gettext diff -r 482a92a45917 -r 3ad0b5ddae58 mercurial/help.py --- a/mercurial/help.py Mon Jun 22 15:58:21 2009 -0300 +++ b/mercurial/help.py Mon Jun 22 22:22:48 2009 +0200 @@ -5,6 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2, incorporated herein by reference. +import textwrap from i18n import _ import extensions @@ -45,21 +46,27 @@ return '' result = '\n%s\n\n' % header for name, desc in sorted(exts.iteritems()): - result += ' %s %s\n' % (name.ljust(maxlength), desc) + # wrap desc at 70 characters, just like the main help texts + desc = textwrap.wrap(desc, width=70 - maxlength - 4) + pad = '\n' + ' ' * (maxlength + 4) + result += ' %s %s\n' % (name.ljust(maxlength), + pad.join(desc)) return result def extshelp(): doc = _(r''' - Mercurial has a mechanism for adding new features through the - use of extensions. Extensions may bring new commands, or new - hooks, or change Mercurial's behavior. + Mercurial has the ability to add new features through the use of + extensions. Extensions may add new commands, add options to + existing commands, change the default behavior of commands, or + implement hooks. - Extensions are not loaded by default for a variety of reasons, - they may be meant for advanced users or provide potentially - dangerous commands (e.g. mq and rebase allow history to be - rewritten), they might not be ready for prime-time yet, or - they may alter Mercurial's behavior. It is thus up to the user - to activate extensions as desired. + Extensions are not loaded by default for a variety of reasons: + they can increase startup overhead; they may be meant for + advanced usage only; they may provide potentially dangerous + abilities (such as letting you destroy or modify history); they + might not be ready for prime time; or they may alter some + usual behaviors of stock Mercurial. It is thus up to the user to + activate extensions as needed. To enable the "foo" extension, either shipped with Mercurial or in the Python search path, create an entry for it in your @@ -77,7 +84,7 @@ scope, prepend its path with !: [extensions] - # disabling extension bar residing in /ext/path + # disabling extension bar residing in /path/to/extension/bar.py hgext.bar = !/path/to/extension/bar.py # ditto, but no path was supplied for extension baz hgext.baz = ! diff -r 482a92a45917 -r 3ad0b5ddae58 mercurial/patch.py --- a/mercurial/patch.py Mon Jun 22 15:58:21 2009 -0300 +++ b/mercurial/patch.py Mon Jun 22 22:22:48 2009 +0200 @@ -228,7 +228,7 @@ return (dopatch, gitpatches) -class linereader: +class linereader(object): # simple class to allow pushing lines back into the input stream def __init__(self, fp, textmode=False): self.fp = fp diff -r 482a92a45917 -r 3ad0b5ddae58 tests/svn/branches.svndump --- a/tests/svn/branches.svndump Mon Jun 22 15:58:21 2009 -0300 +++ b/tests/svn/branches.svndump Mon Jun 22 22:22:48 2009 +0200 @@ -1,6 +1,6 @@ SVN-fs-dump-format-version: 2 -UUID: 7b60030a-5a1f-4344-a009-73f0c1c2adf2 +UUID: 3c3c228a-b3dd-467c-a766-896f4b7cd0af Revision-number: 0 Prop-content-length: 56 @@ -9,7 +9,7 @@ K 8 svn:date V 27 -2008-12-06T12:47:52.296168Z +2009-06-21T12:38:53.023457Z PROPS-END Revision-number: 1 @@ -27,7 +27,7 @@ K 8 svn:date V 27 -2008-12-06T12:47:52.342238Z +2009-06-21T12:38:53.111986Z PROPS-END Node-path: branches @@ -72,7 +72,7 @@ K 8 svn:date V 27 -2008-12-06T12:47:53.190046Z +2009-06-21T12:38:54.182594Z PROPS-END Node-path: branches/notinbranch @@ -81,6 +81,7 @@ Prop-content-length: 10 Text-content-length: 2 Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b +Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff Content-length: 12 PROPS-END @@ -93,6 +94,7 @@ Prop-content-length: 10 Text-content-length: 2 Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3 +Text-content-sha1: 3f786850e387550fdab836ed7e6dc881de23001b Content-length: 12 PROPS-END @@ -105,6 +107,7 @@ Prop-content-length: 10 Text-content-length: 2 Text-content-md5: 3b5d5c3712955042212316173ccf37be +Text-content-sha1: 89e6c98d92887913cadf06b2adb97f26cde4849b Content-length: 12 PROPS-END @@ -117,20 +120,43 @@ Prop-content-length: 10 Text-content-length: 2 Text-content-md5: 2cd6ee2c70b0bde53fbe6cac3c8b8bb1 +Text-content-sha1: 2b66fd261ee5c6cfc8de7fa466bab600bcfe4f69 Content-length: 12 PROPS-END c +Node-path: trunk/dir +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: trunk/dir/e +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 2 +Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9 +Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff +Content-length: 12 + +PROPS-END +e + + Revision-number: 3 -Prop-content-length: 124 -Content-length: 124 +Prop-content-length: 132 +Content-length: 132 K 7 svn:log -V 22 -branch trunk, remove c +V 30 +branch trunk, remove c and dir K 10 svn:author V 7 @@ -138,38 +164,22 @@ K 8 svn:date V 27 -2008-12-06T12:47:55.188535Z +2009-06-21T12:38:57.166484Z PROPS-END Node-path: branches/old Node-kind: dir Node-action: add -Node-copyfrom-rev: 1 +Node-copyfrom-rev: 2 Node-copyfrom-path: trunk -Prop-content-length: 34 -Content-length: 34 - -K 13 -svn:mergeinfo -V 0 - -PROPS-END -Node-path: branches/old/a -Node-kind: file -Node-action: add -Node-copyfrom-rev: 2 -Node-copyfrom-path: trunk/a -Text-copy-source-md5: 60b725f10c9c85c70d97880dfe8191b3 +Node-path: branches/old/dir +Node-action: delete -Node-path: branches/old/b -Node-kind: file -Node-action: add -Node-copyfrom-rev: 2 -Node-copyfrom-path: trunk/b -Text-copy-source-md5: 3b5d5c3712955042212316173ccf37be +Node-path: branches/old/c +Node-action: delete Revision-number: 4 @@ -187,7 +197,7 @@ K 8 svn:date V 27 -2008-12-06T12:47:57.146347Z +2009-06-21T12:38:59.084420Z PROPS-END Node-path: trunk/a @@ -195,6 +205,7 @@ Node-action: change Text-content-length: 4 Text-content-md5: 0d227f1abf8c2932d342e9b99cc957eb +Text-content-sha1: d7c8127a20a396cff08af086a1c695b0636f0c29 Content-length: 4 a @@ -216,7 +227,7 @@ K 8 svn:date V 27 -2008-12-06T12:47:58.150124Z +2009-06-21T12:39:00.093201Z PROPS-END Node-path: branches/old/b @@ -224,6 +235,7 @@ Node-action: change Text-content-length: 4 Text-content-md5: 06ac26ed8b614fc0b141e4542aa067c2 +Text-content-sha1: f6980469e74f7125178e88ec571e06fe6ce86e95 Content-length: 4 b @@ -245,7 +257,7 @@ K 8 svn:date V 27 -2008-12-06T12:48:00.161336Z +2009-06-21T12:39:02.078633Z PROPS-END Node-path: branches/old/c @@ -254,16 +266,12 @@ Node-copyfrom-rev: 3 Node-copyfrom-path: trunk/b Text-copy-source-md5: 3b5d5c3712955042212316173ccf37be -Prop-content-length: 34 +Text-copy-source-sha1: 89e6c98d92887913cadf06b2adb97f26cde4849b Text-content-length: 4 Text-content-md5: 33cb6785d50937d8d307ebb66d6259a7 -Content-length: 38 +Text-content-sha1: 7a6478264aa11a0f4befef356c03e83f2b1f6eba +Content-length: 4 -K 13 -svn:mergeinfo -V 0 - -PROPS-END b c @@ -287,7 +295,7 @@ K 8 svn:date V 27 -2008-12-06T12:48:01.153724Z +2009-06-21T12:39:03.065537Z PROPS-END Node-path: branches/old/b @@ -295,6 +303,7 @@ Node-action: change Text-content-length: 6 Text-content-md5: cdcfb41554e2d092c13f5e6839e63577 +Text-content-sha1: 17ac58cabedebea235d1b5605531d5b1559797e9 Content-length: 6 b @@ -317,7 +326,7 @@ K 8 svn:date V 27 -2008-12-06T12:48:04.150915Z +2009-06-21T12:39:06.070275Z PROPS-END Node-path: branches/old2 @@ -346,7 +355,7 @@ K 8 svn:date V 27 -2008-12-06T12:48:06.149560Z +2009-06-21T12:39:08.082539Z PROPS-END Node-path: branches/old @@ -375,7 +384,7 @@ K 8 svn:date V 27 -2008-12-06T12:48:07.268498Z +2009-06-21T12:39:09.073290Z PROPS-END Node-path: trunk/a @@ -383,6 +392,7 @@ Node-action: change Text-content-length: 2 Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3 +Text-content-sha1: 3f786850e387550fdab836ed7e6dc881de23001b Content-length: 2 a @@ -403,7 +413,7 @@ K 8 svn:date V 27 -2008-12-06T12:48:09.151702Z +2009-06-21T12:39:11.070264Z PROPS-END Node-path: branches/old3 diff -r 482a92a45917 -r 3ad0b5ddae58 tests/svn/encoding.svndump --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/svn/encoding.svndump Mon Jun 22 22:22:48 2009 +0200 @@ -0,0 +1,280 @@ +SVN-fs-dump-format-version: 2 + +UUID: afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af + +Revision-number: 0 +Prop-content-length: 56 +Content-length: 56 + +K 8 +svn:date +V 27 +2009-06-21T16:34:55.835945Z +PROPS-END + +Revision-number: 1 +Prop-content-length: 112 +Content-length: 112 + +K 7 +svn:log +V 10 +init projA +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2009-06-21T16:34:55.909545Z +PROPS-END + +Node-path: branches +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: tags +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: trunk +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Revision-number: 2 +Prop-content-length: 106 +Content-length: 106 + +K 7 +svn:log +V 5 +hello +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2009-06-21T16:34:56.150049Z +PROPS-END + +Node-path: trunk/à +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: trunk/à/é +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 2 +Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b +Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff +Content-length: 12 + +PROPS-END +d + + +Node-path: trunk/é +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 2 +Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9 +Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff +Content-length: 12 + +PROPS-END +e + + +Revision-number: 3 +Prop-content-length: 112 +Content-length: 112 + +K 7 +svn:log +V 10 +copy files +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2009-06-21T16:34:59.089402Z +PROPS-END + +Node-path: trunk/è +Node-kind: file +Node-action: add +Node-copyfrom-rev: 2 +Node-copyfrom-path: trunk/é +Text-copy-source-md5: 9ffbf43126e33be52cd2bf7e01d627f9 +Text-copy-source-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff + + +Node-path: trunk/ù +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 2 +Node-copyfrom-path: trunk/à + + +Node-path: trunk/à +Node-action: delete + + +Node-path: trunk/é +Node-action: delete + + +Revision-number: 4 +Prop-content-length: 114 +Content-length: 114 + +K 7 +svn:log +V 12 +remove files +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2009-06-21T16:35:00.165121Z +PROPS-END + +Node-path: trunk/è +Node-action: delete + + +Node-path: trunk/ù +Node-action: delete + + +Revision-number: 5 +Prop-content-length: 120 +Content-length: 120 + +K 7 +svn:log +V 18 +branch to branché +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2009-06-21T16:35:03.079138Z +PROPS-END + +Node-path: branches/branché +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 4 +Node-copyfrom-path: trunk + + +Revision-number: 6 +Prop-content-length: 121 +Content-length: 121 + +K 7 +svn:log +V 19 +branch to branchée +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2009-06-21T16:35:06.060801Z +PROPS-END + +Node-path: branches/branchée +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 5 +Node-copyfrom-path: branches/branché + + +Revision-number: 7 +Prop-content-length: 110 +Content-length: 110 + +K 7 +svn:log +V 9 +tag trunk +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2009-06-21T16:35:09.061530Z +PROPS-END + +Node-path: tags/branché +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 6 +Node-copyfrom-path: trunk + + +Revision-number: 8 +Prop-content-length: 114 +Content-length: 114 + +K 7 +svn:log +V 12 +tag branché +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2009-06-21T16:35:11.068562Z +PROPS-END + +Node-path: tags/branchée +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 6 +Node-copyfrom-path: branches/branchée + + diff -r 482a92a45917 -r 3ad0b5ddae58 tests/svn/move.svndump --- a/tests/svn/move.svndump Mon Jun 22 15:58:21 2009 -0300 +++ b/tests/svn/move.svndump Mon Jun 22 22:22:48 2009 +0200 @@ -1,6 +1,6 @@ SVN-fs-dump-format-version: 2 -UUID: 0682b859-320d-4a69-a164-a7cab5695072 +UUID: 9de99ecc-876b-46e5-bc59-bff9b2b58b1e Revision-number: 0 Prop-content-length: 56 @@ -9,7 +9,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:36.768573Z +2009-06-21T14:32:26.678698Z PROPS-END Revision-number: 1 @@ -27,7 +27,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:37.083146Z +2009-06-21T14:32:27.278689Z PROPS-END Node-path: trunk @@ -45,6 +45,7 @@ Prop-content-length: 10 Text-content-length: 2 Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3 +Text-content-sha1: 3f786850e387550fdab836ed7e6dc881de23001b Content-length: 12 PROPS-END @@ -66,6 +67,7 @@ Prop-content-length: 10 Text-content-length: 2 Text-content-md5: 3b5d5c3712955042212316173ccf37be +Text-content-sha1: 89e6c98d92887913cadf06b2adb97f26cde4849b Content-length: 12 PROPS-END @@ -78,6 +80,7 @@ Prop-content-length: 10 Text-content-length: 2 Text-content-md5: 2cd6ee2c70b0bde53fbe6cac3c8b8bb1 +Text-content-sha1: 2b66fd261ee5c6cfc8de7fa466bab600bcfe4f69 Content-length: 12 PROPS-END @@ -99,6 +102,7 @@ Prop-content-length: 10 Text-content-length: 2 Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b +Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff Content-length: 12 PROPS-END @@ -120,7 +124,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:38.152773Z +2009-06-21T14:32:28.312955Z PROPS-END Node-path: trunk/a @@ -128,6 +132,7 @@ Node-action: change Text-content-length: 4 Text-content-md5: 0d227f1abf8c2932d342e9b99cc957eb +Text-content-sha1: d7c8127a20a396cff08af086a1c695b0636f0c29 Content-length: 4 a @@ -139,6 +144,7 @@ Node-action: change Text-content-length: 4 Text-content-md5: 63fad9092ad37713ebe26b3193f89c41 +Text-content-sha1: ccfb93b7bac6f1520f0adc0eebc2cafe9da80f42 Content-length: 4 c @@ -160,7 +166,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:39.146388Z +2009-06-21T14:32:29.183467Z PROPS-END Node-path: subproject @@ -189,7 +195,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:40.179944Z +2009-06-21T14:32:30.300975Z PROPS-END Node-path: subproject/trunk @@ -216,7 +222,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:41.184505Z +2009-06-21T14:32:31.354398Z PROPS-END Node-path: subproject/branches @@ -243,7 +249,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:42.153312Z +2009-06-21T14:32:32.121901Z PROPS-END Node-path: subproject/trunk/d1 @@ -272,7 +278,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:42.206313Z +2009-06-21T14:32:32.317815Z PROPS-END Node-path: subproject/trunk/d2 @@ -301,7 +307,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:43.182355Z +2009-06-21T14:32:33.418320Z PROPS-END Node-path: subproject/trunk/d1/b @@ -309,6 +315,7 @@ Node-action: change Text-content-length: 4 Text-content-md5: 06ac26ed8b614fc0b141e4542aa067c2 +Text-content-sha1: f6980469e74f7125178e88ec571e06fe6ce86e95 Content-length: 4 b @@ -334,7 +341,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:44.153682Z +2009-06-21T14:32:34.126542Z PROPS-END Node-path: subproject/branches/d1 @@ -363,7 +370,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:44.298011Z +2009-06-21T14:32:34.436015Z PROPS-END Node-path: subproject/trunk/d @@ -372,6 +379,7 @@ Node-copyfrom-rev: 7 Node-copyfrom-path: subproject/trunk/d2/d Text-copy-source-md5: e29311f6f1bf1af907f9ef9f44b8328b +Text-copy-source-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff Revision-number: 11 @@ -389,7 +397,7 @@ K 8 svn:date V 27 -2008-12-06T13:33:44.349920Z +2009-06-21T14:32:34.803189Z PROPS-END Node-path: subproject/trunk/d2 @@ -399,3 +407,94 @@ Node-copyfrom-path: subproject/trunk/d2 +Revision-number: 12 +Prop-content-length: 107 +Content-length: 107 + +K 7 +svn:log +V 6 +add d3 +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2009-06-21T14:32:36.531735Z +PROPS-END + +Node-path: subproject/trunk/d3 +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: subproject/trunk/d3/d31 +Node-kind: dir +Node-action: add +Prop-content-length: 10 +Content-length: 10 + +PROPS-END + + +Node-path: subproject/trunk/d3/d31/e +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 2 +Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9 +Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff +Content-length: 12 + +PROPS-END +e + + +Node-path: subproject/trunk/d3/f +Node-kind: file +Node-action: add +Prop-content-length: 10 +Text-content-length: 2 +Text-content-md5: 9a8ad92c50cae39aa2c5604fd0ab6d8c +Text-content-sha1: a9fcd54b25e7e863d72cd47c08af46e61b74b561 +Content-length: 12 + +PROPS-END +f + + +Revision-number: 13 +Prop-content-length: 128 +Content-length: 128 + +K 7 +svn:log +V 26 +copy dir and remove subdir +K 10 +svn:author +V 7 +pmezard +K 8 +svn:date +V 27 +2009-06-21T14:32:38.281829Z +PROPS-END + +Node-path: subproject/trunk/d3/d31 +Node-action: delete + + +Node-path: subproject/trunk/d4 +Node-kind: dir +Node-action: add +Node-copyfrom-rev: 12 +Node-copyfrom-path: subproject/trunk/d3 + + diff -r 482a92a45917 -r 3ad0b5ddae58 tests/svn/svndump-branches.sh --- a/tests/svn/svndump-branches.sh Mon Jun 22 15:58:21 2009 -0300 +++ b/tests/svn/svndump-branches.sh Mon Jun 22 22:22:48 2009 +0200 @@ -22,15 +22,19 @@ echo a > trunk/a echo b > trunk/b echo c > trunk/c +mkdir trunk/dir +echo e > trunk/dir/e # Add a file within branches, used to confuse branch detection echo d > branches/notinbranch -svn add trunk/a trunk/b trunk/c branches/notinbranch +svn add trunk/a trunk/b trunk/c trunk/dir branches/notinbranch svn ci -m hello +svn up # Branch to old svn copy trunk branches/old svn rm branches/old/c -svn ci -m "branch trunk, remove c" +svn rm branches/old/dir +svn ci -m "branch trunk, remove c and dir" svn up # Update trunk diff -r 482a92a45917 -r 3ad0b5ddae58 tests/svn/svndump-encoding.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/svn/svndump-encoding.sh Mon Jun 22 22:22:48 2009 +0200 @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +#!/bin/sh +# +# Use this script to generate encoding.svndump +# + +mkdir temp +cd temp + +mkdir project-orig +cd project-orig +mkdir trunk +mkdir branches +mkdir tags +cd .. + +svnadmin create svn-repo +svnurl=file://`pwd`/svn-repo +svn import project-orig $svnurl -m "init projA" + +svn co $svnurl project +cd project +echo e > trunk/é +mkdir trunk/à +echo d > trunk/à/é +svn add trunk/é trunk/à +svn ci -m hello + +# Copy files and directories +svn mv trunk/é trunk/è +svn mv trunk/à trunk/ù +svn ci -m "copy files" + +# Remove files +svn rm trunk/è +svn rm trunk/ù +svn ci -m 'remove files' + +# Create branches with and from weird names +svn up +svn cp trunk branches/branché +echo a > branches/branché/a +svn ci -m 'branch to branché' +svn up +svn cp branches/branché branches/branchée +echo a >> branches/branché/a +svn ci -m 'branch to branchée' + +# Create tag with weird name +svn up +svn cp trunk tags/branché +svn ci -m 'tag trunk' +svn cp branches/branchée tags/branchée +svn ci -m 'tag branché' +cd .. + +svnadmin dump svn-repo > ../encoding.svndump diff -r 482a92a45917 -r 3ad0b5ddae58 tests/svn/svndump-move.sh --- a/tests/svn/svndump-move.sh Mon Jun 22 15:58:21 2009 -0300 +++ b/tests/svn/svndump-move.sh Mon Jun 22 22:22:48 2009 +0200 @@ -57,6 +57,17 @@ # Copy a directory from a past revision svn copy -r 7 $svnurl/subproject/trunk/d2 $svnurl/subproject/trunk -m copydirfrompast fi + +# Copy a directory while removing a subdirectory +svn up +mkdir -p subproject/trunk/d3/d31 +echo e > subproject/trunk/d3/d31/e +echo f > subproject/trunk/d3/f +svn add subproject/trunk/d3 +svn ci -m "add d3" +svn copy subproject/trunk/d3 subproject/trunk/d4 +svn rm subproject/trunk/d3/d31 +svn ci -m "copy dir and remove subdir" cd .. svnadmin dump svn-repo > ../move.svndump \ No newline at end of file diff -r 482a92a45917 -r 3ad0b5ddae58 tests/test-convert-svn-branches.out --- a/tests/test-convert-svn-branches.out Mon Jun 22 15:58:21 2009 -0300 +++ b/tests/test-convert-svn-branches.out Mon Jun 22 22:22:48 2009 +0200 @@ -5,7 +5,7 @@ converting... 10 init projA 9 hello -8 branch trunk, remove c +8 branch trunk, remove c and dir 7 change a 6 change b 5 move and update c @@ -37,9 +37,9 @@ | | | | o | branch= 3 change a files: a | | | -+---o branch=old 2 branch trunk, remove c files: a b -| | -| o branch= 1 hello files: a b c +| | o branch=old 2 branch trunk, remove c and dir files: c +| |/ +| o branch= 1 hello files: a b c dir/e |/ o branch= 0 init projA files: diff -r 482a92a45917 -r 3ad0b5ddae58 tests/test-convert-svn-encoding --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-convert-svn-encoding Mon Jun 22 22:22:48 2009 +0200 @@ -0,0 +1,17 @@ +#!/bin/sh + +"$TESTDIR/hghave" svn svn-bindings || exit 80 + +echo "[extensions]" >> $HGRCPATH +echo "convert = " >> $HGRCPATH + +svnadmin create svn-repo +cat "$TESTDIR/svn/encoding.svndump" | svnadmin load svn-repo > /dev/null + +echo '% convert while testing all possible outputs' +hg --debug convert svn-repo A-hg > /dev/null +cd A-hg +hg up +echo '% check tags are in UTF-8' +python -c "print '\n'.join([('%r' % l) for l in file('.hgtags', 'rb').readlines()])" +cd .. diff -r 482a92a45917 -r 3ad0b5ddae58 tests/test-convert-svn-encoding.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-convert-svn-encoding.out Mon Jun 22 22:22:48 2009 +0200 @@ -0,0 +1,5 @@ +% convert while testing all possible outputs +1 files updated, 0 files merged, 0 files removed, 0 files unresolved +% check tags are in UTF-8 +'1c1b4062874e8197a68e7ce9e498479a37d0215c branch\xc3\xa9e\n' +'edc96568720ef79eefa6372677b18d855de3abee branch\xc3\xa9\n' diff -r 482a92a45917 -r 3ad0b5ddae58 tests/test-convert-svn-move.out --- a/tests/test-convert-svn-move.out Mon Jun 22 15:58:21 2009 -0300 +++ b/tests/test-convert-svn-move.out Mon Jun 22 22:22:48 2009 +0200 @@ -3,16 +3,22 @@ scanning source... sorting... converting... -9 createtrunk -8 moved1 -7 moved1 -6 moved2 -5 changeb and rm d2 -4 changeb and rm d2 -3 moved1again -2 moved1again -1 copyfilefrompast -0 copydirfrompast +11 createtrunk +10 moved1 +9 moved1 +8 moved2 +7 changeb and rm d2 +6 changeb and rm d2 +5 moved1again +4 moved1again +3 copyfilefrompast +2 copydirfrompast +1 add d3 +0 copy dir and remove subdir +o 11 copy dir and remove subdir files: d3/d31/e d4/d31/e d4/f +| +o 10 add d3 files: d3/d31/e d3/f +| o 9 copydirfrompast files: d2/d | o 8 copyfilefrompast files: d @@ -33,5 +39,5 @@ | o 0 createtrunk files: -default 9: +default 11: d1 6: diff -r 482a92a45917 -r 3ad0b5ddae58 tests/test-keyword.out --- a/tests/test-keyword.out Mon Jun 22 15:58:21 2009 -0300 +++ b/tests/test-keyword.out Mon Jun 22 22:22:48 2009 +0200 @@ -1,5 +1,5 @@ % help -keyword extension - keyword expansion in tracked files +keyword extension - expand keywords in tracked files This extension expands RCS/CVS-like or self-customized $Keywords$ in tracked text files selected by your configuration. @@ -55,9 +55,9 @@ enabled extensions: - keyword keyword expansion in tracked files - mq patch management and development - notify hook extension to email notifications on commits/pushes + keyword expand keywords in tracked files + mq work with a stack of patches + notify send e-mail notifications for commits/pushes use "hg -v help keyword" to show aliases and global options % hg kwdemo diff -r 482a92a45917 -r 3ad0b5ddae58 tests/test-mq.out --- a/tests/test-mq.out Mon Jun 22 15:58:21 2009 -0300 +++ b/tests/test-mq.out Mon Jun 22 22:22:48 2009 +0200 @@ -1,5 +1,5 @@ % help -mq extension - patch management and development +mq extension - work with a stack of patches This extension lets you work with a stack of patches in a Mercurial repository. It manages two stacks of patches - all known patches, and @@ -53,7 +53,7 @@ enabled extensions: - mq patch management and development + mq work with a stack of patches use "hg -v help mq" to show aliases and global options adding a diff -r 482a92a45917 -r 3ad0b5ddae58 tests/test-notify.out --- a/tests/test-notify.out Mon Jun 22 15:58:21 2009 -0300 +++ b/tests/test-notify.out Mon Jun 22 22:22:48 2009 +0200 @@ -1,4 +1,4 @@ -notify extension - hook extension to email notifications on commits/pushes +notify extension - send e-mail notifications for commits/pushes Subscriptions can be managed through hgrc. Default mode is to print messages to stdout, for testing and configuring.