--- 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
'''
--- 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.
--- 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
--- 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
--- 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
--- 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
--- 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
--- 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):
--- 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
--- 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
--- 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
--- 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
--- 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
--- 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 <brendan@kublai.com>
# 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:
--- 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
--- 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/
--- 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
--- 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.
--- 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
--- 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.
--- 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:
--- 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.
--- 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.
--- 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 _
--- 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
--- 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 _
--- 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.
--- 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 _
--- 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:
--- 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
--- 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
--- 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 = !
--- 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
--- 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
--- /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
+
+
--- 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
+
+
--- 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
--- /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
--- 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
--- 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:
--- /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 ..
--- /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'
--- 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:
--- 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
--- 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
--- 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.