##// END OF EJS Templates
merged with crew
Martin Geisler -
r8925:3ad0b5dd merge default
parent child Browse files
Show More
@@ -0,0 +1,280 b''
1 SVN-fs-dump-format-version: 2
2
3 UUID: afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af
4
5 Revision-number: 0
6 Prop-content-length: 56
7 Content-length: 56
8
9 K 8
10 svn:date
11 V 27
12 2009-06-21T16:34:55.835945Z
13 PROPS-END
14
15 Revision-number: 1
16 Prop-content-length: 112
17 Content-length: 112
18
19 K 7
20 svn:log
21 V 10
22 init projA
23 K 10
24 svn:author
25 V 7
26 pmezard
27 K 8
28 svn:date
29 V 27
30 2009-06-21T16:34:55.909545Z
31 PROPS-END
32
33 Node-path: branches
34 Node-kind: dir
35 Node-action: add
36 Prop-content-length: 10
37 Content-length: 10
38
39 PROPS-END
40
41
42 Node-path: tags
43 Node-kind: dir
44 Node-action: add
45 Prop-content-length: 10
46 Content-length: 10
47
48 PROPS-END
49
50
51 Node-path: trunk
52 Node-kind: dir
53 Node-action: add
54 Prop-content-length: 10
55 Content-length: 10
56
57 PROPS-END
58
59
60 Revision-number: 2
61 Prop-content-length: 106
62 Content-length: 106
63
64 K 7
65 svn:log
66 V 5
67 hello
68 K 10
69 svn:author
70 V 7
71 pmezard
72 K 8
73 svn:date
74 V 27
75 2009-06-21T16:34:56.150049Z
76 PROPS-END
77
78 Node-path: trunk/à
79 Node-kind: dir
80 Node-action: add
81 Prop-content-length: 10
82 Content-length: 10
83
84 PROPS-END
85
86
87 Node-path: trunk/à/é
88 Node-kind: file
89 Node-action: add
90 Prop-content-length: 10
91 Text-content-length: 2
92 Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b
93 Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff
94 Content-length: 12
95
96 PROPS-END
97 d
98
99
100 Node-path: trunk/é
101 Node-kind: file
102 Node-action: add
103 Prop-content-length: 10
104 Text-content-length: 2
105 Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9
106 Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
107 Content-length: 12
108
109 PROPS-END
110 e
111
112
113 Revision-number: 3
114 Prop-content-length: 112
115 Content-length: 112
116
117 K 7
118 svn:log
119 V 10
120 copy files
121 K 10
122 svn:author
123 V 7
124 pmezard
125 K 8
126 svn:date
127 V 27
128 2009-06-21T16:34:59.089402Z
129 PROPS-END
130
131 Node-path: trunk/è
132 Node-kind: file
133 Node-action: add
134 Node-copyfrom-rev: 2
135 Node-copyfrom-path: trunk/é
136 Text-copy-source-md5: 9ffbf43126e33be52cd2bf7e01d627f9
137 Text-copy-source-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
138
139
140 Node-path: trunk/ù
141 Node-kind: dir
142 Node-action: add
143 Node-copyfrom-rev: 2
144 Node-copyfrom-path: trunk/à
145
146
147 Node-path: trunk/à
148 Node-action: delete
149
150
151 Node-path: trunk/é
152 Node-action: delete
153
154
155 Revision-number: 4
156 Prop-content-length: 114
157 Content-length: 114
158
159 K 7
160 svn:log
161 V 12
162 remove files
163 K 10
164 svn:author
165 V 7
166 pmezard
167 K 8
168 svn:date
169 V 27
170 2009-06-21T16:35:00.165121Z
171 PROPS-END
172
173 Node-path: trunk/è
174 Node-action: delete
175
176
177 Node-path: trunk/ù
178 Node-action: delete
179
180
181 Revision-number: 5
182 Prop-content-length: 120
183 Content-length: 120
184
185 K 7
186 svn:log
187 V 18
188 branch to branché
189 K 10
190 svn:author
191 V 7
192 pmezard
193 K 8
194 svn:date
195 V 27
196 2009-06-21T16:35:03.079138Z
197 PROPS-END
198
199 Node-path: branches/branché
200 Node-kind: dir
201 Node-action: add
202 Node-copyfrom-rev: 4
203 Node-copyfrom-path: trunk
204
205
206 Revision-number: 6
207 Prop-content-length: 121
208 Content-length: 121
209
210 K 7
211 svn:log
212 V 19
213 branch to branchée
214 K 10
215 svn:author
216 V 7
217 pmezard
218 K 8
219 svn:date
220 V 27
221 2009-06-21T16:35:06.060801Z
222 PROPS-END
223
224 Node-path: branches/branchée
225 Node-kind: dir
226 Node-action: add
227 Node-copyfrom-rev: 5
228 Node-copyfrom-path: branches/branché
229
230
231 Revision-number: 7
232 Prop-content-length: 110
233 Content-length: 110
234
235 K 7
236 svn:log
237 V 9
238 tag trunk
239 K 10
240 svn:author
241 V 7
242 pmezard
243 K 8
244 svn:date
245 V 27
246 2009-06-21T16:35:09.061530Z
247 PROPS-END
248
249 Node-path: tags/branché
250 Node-kind: dir
251 Node-action: add
252 Node-copyfrom-rev: 6
253 Node-copyfrom-path: trunk
254
255
256 Revision-number: 8
257 Prop-content-length: 114
258 Content-length: 114
259
260 K 7
261 svn:log
262 V 12
263 tag branché
264 K 10
265 svn:author
266 V 7
267 pmezard
268 K 8
269 svn:date
270 V 27
271 2009-06-21T16:35:11.068562Z
272 PROPS-END
273
274 Node-path: tags/branchée
275 Node-kind: dir
276 Node-action: add
277 Node-copyfrom-rev: 6
278 Node-copyfrom-path: branches/branchée
279
280
@@ -0,0 +1,57 b''
1 # -*- coding: utf-8 -*-
2 #!/bin/sh
3 #
4 # Use this script to generate encoding.svndump
5 #
6
7 mkdir temp
8 cd temp
9
10 mkdir project-orig
11 cd project-orig
12 mkdir trunk
13 mkdir branches
14 mkdir tags
15 cd ..
16
17 svnadmin create svn-repo
18 svnurl=file://`pwd`/svn-repo
19 svn import project-orig $svnurl -m "init projA"
20
21 svn co $svnurl project
22 cd project
23 echo e > trunk/é
24 mkdir trunk/à
25 echo d > trunk/à/é
26 svn add trunk/é trunk/à
27 svn ci -m hello
28
29 # Copy files and directories
30 svn mv trunk/é trunk/è
31 svn mv trunk/à trunk/ù
32 svn ci -m "copy files"
33
34 # Remove files
35 svn rm trunk/è
36 svn rm trunk/ù
37 svn ci -m 'remove files'
38
39 # Create branches with and from weird names
40 svn up
41 svn cp trunk branches/branché
42 echo a > branches/branché/a
43 svn ci -m 'branch to branché'
44 svn up
45 svn cp branches/branché branches/branchée
46 echo a >> branches/branché/a
47 svn ci -m 'branch to branchée'
48
49 # Create tag with weird name
50 svn up
51 svn cp trunk tags/branché
52 svn ci -m 'tag trunk'
53 svn cp branches/branchée tags/branchée
54 svn ci -m 'tag branché'
55 cd ..
56
57 svnadmin dump svn-repo > ../encoding.svndump
@@ -0,0 +1,17 b''
1 #!/bin/sh
2
3 "$TESTDIR/hghave" svn svn-bindings || exit 80
4
5 echo "[extensions]" >> $HGRCPATH
6 echo "convert = " >> $HGRCPATH
7
8 svnadmin create svn-repo
9 cat "$TESTDIR/svn/encoding.svndump" | svnadmin load svn-repo > /dev/null
10
11 echo '% convert while testing all possible outputs'
12 hg --debug convert svn-repo A-hg > /dev/null
13 cd A-hg
14 hg up
15 echo '% check tags are in UTF-8'
16 python -c "print '\n'.join([('%r' % l) for l in file('.hgtags', 'rb').readlines()])"
17 cd ..
@@ -0,0 +1,5 b''
1 % convert while testing all possible outputs
2 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
3 % check tags are in UTF-8
4 '1c1b4062874e8197a68e7ce9e498479a37d0215c branch\xc3\xa9e\n'
5 'edc96568720ef79eefa6372677b18d855de3abee branch\xc3\xa9\n'
@@ -6,18 +6,23 b''
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7 #
8 8
9 '''provide simple hooks for access control
9 '''control access to a repository using simple hooks
10 10
11 Authorization is against local user name on system where hook is run, not
12 committer of original changeset (since that is easy to spoof).
11 This hook makes it possible to allow or deny write access to portions
12 of a repository when receiving incoming changesets.
13
14 The authorization is matched based on the local user name on the
15 system where the hook runs, and not the committer of the original
16 changeset (since the latter is merely informative).
13 17
14 The acl hook is best to use if you use hgsh to set up restricted shells for
15 authenticated users to only push to / pull from. It's not safe if user has
16 interactive shell access, because they can disable the hook. It's also not
17 safe if remote users share one local account, because then there's no way to
18 tell remote users apart.
18 The acl hook is best used along with a restricted shell like hgsh,
19 preventing authenticating users from doing anything other than
20 pushing or pulling. The hook is not safe to use if users have
21 interactive shell access, as they can then disable the hook.
22 Nor is it safe if remote users share an account, because then there
23 is no way to distinguish them.
19 24
20 To use, configure the acl extension in hgrc like this:
25 To use this hook, configure the acl extension in your hgrc like this:
21 26
22 27 [extensions]
23 28 hgext.acl =
@@ -26,21 +31,24 b' To use, configure the acl extension in h'
26 31 pretxnchangegroup.acl = python:hgext.acl.hook
27 32
28 33 [acl]
29 sources = serve # check if source of incoming changes in this list
30 # ("serve" == ssh or http, "push", "pull", "bundle")
34 # Check whether the source of incoming changes is in this list
35 # ("serve" == ssh or http, "push", "pull", "bundle")
36 sources = serve
31 37
32 Allow and deny lists have a subtree pattern (default syntax is glob) on the
33 left and user names on right. The deny list is checked before the allow list.
38 The allow and deny sections take a subtree pattern as key (with a
39 glob syntax by default), and a comma separated list of users as
40 the corresponding value. The deny list is checked before the allow
41 list is.
34 42
35 43 [acl.allow]
36 # if acl.allow not present, all users allowed by default
37 # empty acl.allow = no users allowed
44 # If acl.allow is not present, all users are allowed by default.
45 # An empty acl.allow section means no users allowed.
38 46 docs/** = doc_writer
39 47 .hgtags = release_engineer
40 48
41 49 [acl.deny]
42 # if acl.deny not present, no users denied by default
43 # empty acl.deny = all users allowed
50 # If acl.deny is not present, no users are refused by default.
51 # An empty acl.deny section means all users allowed.
44 52 glob pattern = user4, user5
45 53 ** = user6
46 54 '''
@@ -5,24 +5,26 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''Mercurial bookmarks
8 '''track a line of development with movable markers
9 9
10 Mercurial bookmarks are local moveable pointers to changesets. Every
11 bookmark points to a changeset identified by its hash. If you commit a
12 changeset that is based on a changeset that has a bookmark on it, the
13 bookmark is forwarded to the new changeset.
10 Bookmarks are local movable markers to changesets. Every bookmark
11 points to a changeset identified by its hash. If you commit a
12 changeset that is based on a changeset that has a bookmark on it,
13 the bookmark shifts to the new changeset.
14
15 It is possible to use bookmark names in every revision lookup
16 (e.g. hg merge, hg update).
14 17
15 It is possible to use bookmark names in every revision lookup (e.g. hg
16 merge, hg update).
17
18 The bookmark extension offers the possiblity to have a more git-like
19 experience by adding the following configuration option to your .hgrc:
18 By default, when several bookmarks point to the same changeset, they
19 will all move forward together. It is possible to obtain a more
20 git-like experience by adding the following configuration option to
21 your .hgrc:
20 22
21 [bookmarks]
22 track.current = True
23 [bookmarks]
24 track.current = True
23 25
24 This will cause bookmarks to track the bookmark that you are currently
25 on, and just updates it. This is similar to git's approach to
26 This will cause Mercurial to track the bookmark that you are currently
27 using, and only update it. This is similar to git's approach to
26 28 branching.
27 29 '''
28 30
@@ -120,10 +122,10 b' def setcurrent(repo, mark):'
120 122 repo._bookmarkcurrent = mark
121 123
122 124 def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, rename=None):
123 '''Mercurial bookmarks
125 '''track a line of development with movable markers
124 126
125 127 Bookmarks are pointers to certain commits that move when
126 commiting. Bookmarks are local. They can be renamed, copied and
128 committing. Bookmarks are local. They can be renamed, copied and
127 129 deleted. It is possible to use bookmark names in 'hg merge' and
128 130 'hg update' to merge and update respectively to a given bookmark.
129 131
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''Bugzilla integration
8 '''integrate Mercurial with a Bugzilla bug tracker
9 9
10 10 This hook extension adds comments on bugs in Bugzilla when changesets
11 11 that refer to bugs by Bugzilla ID are seen. The hook does not change
@@ -8,7 +8,7 b''
8 8 # This software may be used and distributed according to the terms of the
9 9 # GNU General Public License version 2, incorporated herein by reference.
10 10
11 '''provides children command to show children changesets'''
11 '''display children changesets'''
12 12
13 13 from mercurial import cmdutil
14 14 from mercurial.commands import templateopts
@@ -6,7 +6,7 b''
6 6 # This software may be used and distributed according to the terms of the
7 7 # GNU General Public License version 2, incorporated herein by reference.
8 8
9 '''command to show certain statistics about revision history'''
9 '''display statistics about repository history'''
10 10
11 11 from mercurial.i18n import _
12 12 from mercurial import patch, cmdutil, util, templater
@@ -16,7 +16,7 b''
16 16 # with this program; if not, write to the Free Software Foundation, Inc.,
17 17 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 18
19 '''add color output to status, qseries, and diff-related commands
19 '''colorize output from some commands
20 20
21 21 This extension modifies the status command to add color to its output
22 22 to reflect file status, the qseries command to add color to reflect
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''converting foreign VCS repositories to Mercurial'''
8 '''import from foreign VCS repositories into Mercurial'''
9 9
10 10 import convcmd
11 11 import cvsps
@@ -103,7 +103,10 b' class converter_source(object):'
103 103 raise NotImplementedError()
104 104
105 105 def gettags(self):
106 """Return the tags as a dictionary of name: revision"""
106 """Return the tags as a dictionary of name: revision
107
108 Tag names must be UTF-8 strings.
109 """
107 110 raise NotImplementedError()
108 111
109 112 def recode(self, s, encoding=None):
@@ -198,7 +201,9 b' class converter_sink(object):'
198 201
199 202 def puttags(self, tags):
200 203 """Put tags into sink.
201 tags: {tagname: sink_rev_id, ...}"""
204
205 tags: {tagname: sink_rev_id, ...} where tagname is an UTF-8 string.
206 """
202 207 raise NotImplementedError()
203 208
204 209 def setbranch(self, branch, pbranches):
@@ -511,7 +511,9 b' def createchangeset(ui, log, fuzz=60, me'
511 511 e.comment == c.comment and
512 512 e.author == c.author and
513 513 e.branch == c.branch and
514 e.branchpoints == c.branchpoints and
514 (not hasattr(e, 'branchpoints') or
515 not hasattr (c, 'branchpoints') or
516 e.branchpoints == c.branchpoints) and
515 517 ((c.date[0] + c.date[1]) <=
516 518 (e.date[0] + e.date[1]) <=
517 519 (c.date[0] + c.date[1]) + fuzz) and
@@ -1,19 +1,6 b''
1 1 # Subversion 1.4/1.5 Python API backend
2 2 #
3 3 # Copyright(C) 2007 Daniel Holth et al
4 #
5 # Configuration options:
6 #
7 # convert.svn.trunk
8 # Relative path to the trunk (default: "trunk")
9 # convert.svn.branches
10 # Relative path to tree of branches (default: "branches")
11 # convert.svn.tags
12 # Relative path to tree of tags (default: "tags")
13 #
14 # Set these in a hgrc, or on the command line as follows:
15 #
16 # hg convert --config convert.svn.trunk=wackoname [...]
17 4
18 5 import locale
19 6 import os
@@ -23,7 +10,7 b' import cPickle as pickle'
23 10 import tempfile
24 11 import urllib
25 12
26 from mercurial import strutil, util
13 from mercurial import strutil, util, encoding
27 14 from mercurial.i18n import _
28 15
29 16 # Subversion stuff. Works best with very recent Python SVN bindings
@@ -63,6 +50,9 b' def geturl(path):'
63 50 path = os.path.normpath(os.path.abspath(path))
64 51 if os.name == 'nt':
65 52 path = '/' + util.normpath(path)
53 # Module URL is later compared with the repository URL returned
54 # by svn API, which is UTF-8.
55 path = encoding.tolocal(path)
66 56 return 'file://%s' % urllib.quote(path)
67 57 return path
68 58
@@ -213,7 +203,6 b' class svn_source(converter_source):'
213 203 raise MissingTool(_('Subversion python bindings are too old, 1.4 '
214 204 'or later required'))
215 205
216 self.encoding = locale.getpreferredencoding()
217 206 self.lastrevs = {}
218 207
219 208 latest = None
@@ -240,7 +229,7 b' class svn_source(converter_source):'
240 229 self.rootmodule = self.module
241 230 self.commits = {}
242 231 self.paths = {}
243 self.uuid = svn.ra.get_uuid(self.ra).decode(self.encoding)
232 self.uuid = svn.ra.get_uuid(self.ra)
244 233 except SubversionException:
245 234 ui.traceback()
246 235 raise NoRepo("%s does not look like a Subversion repo" % self.url)
@@ -260,15 +249,10 b' class svn_source(converter_source):'
260 249 raise util.Abort(_('svn: start revision %s is not an integer')
261 250 % self.startrev)
262 251
263 try:
264 self.get_blacklist()
265 except IOError:
266 pass
267
268 252 self.head = self.latest(self.module, latest)
269 253 if not self.head:
270 raise util.Abort(_('no revision found in module %s') %
271 self.module.encode(self.encoding))
254 raise util.Abort(_('no revision found in module %s')
255 % self.module)
272 256 self.last_changed = self.revnum(self.head)
273 257
274 258 self._changescache = None
@@ -328,8 +312,8 b' class svn_source(converter_source):'
328 312 self.module += '/' + trunk
329 313 self.head = self.latest(self.module, self.last_changed)
330 314 if not self.head:
331 raise util.Abort(_('no revision found in module %s') %
332 self.module.encode(self.encoding))
315 raise util.Abort(_('no revision found in module %s')
316 % self.module)
333 317
334 318 # First head in the list is the module's head
335 319 self.heads = [self.head]
@@ -347,8 +331,7 b' class svn_source(converter_source):'
347 331 continue
348 332 brevid = self.latest(module, self.last_changed)
349 333 if not brevid:
350 self.ui.note(_('ignoring empty branch %s\n') %
351 branch.encode(self.encoding))
334 self.ui.note(_('ignoring empty branch %s\n') % branch)
352 335 continue
353 336 self.ui.note(_('found branch %s at %d\n') %
354 337 (branch, self.revnum(brevid)))
@@ -524,19 +507,14 b' class svn_source(converter_source):'
524 507 self.convertfp.write('%s %d\n' % (destrev, self.revnum(rev)))
525 508 self.convertfp.flush()
526 509
527 # -- helper functions --
528
529 510 def revid(self, revnum, module=None):
530 if not module:
531 module = self.module
532 return u"svn:%s%s@%s" % (self.uuid, module.decode(self.encoding),
533 revnum)
511 return 'svn:%s%s@%s' % (self.uuid, module or self.module, revnum)
534 512
535 513 def revnum(self, rev):
536 514 return int(rev.split('@')[-1])
537 515
538 516 def revsplit(self, rev):
539 url, revnum = rev.encode(self.encoding).rsplit('@', 1)
517 url, revnum = rev.rsplit('@', 1)
540 518 revnum = int(revnum)
541 519 parts = url.split('/', 1)
542 520 uuid = parts.pop(0)[4:]
@@ -593,25 +571,6 b' class svn_source(converter_source):'
593 571 return None
594 572 return self.revid(dirent.created_rev, path)
595 573
596 def get_blacklist(self):
597 """Avoid certain revision numbers.
598 It is not uncommon for two nearby revisions to cancel each other
599 out, e.g. 'I copied trunk into a subdirectory of itself instead
600 of making a branch'. The converted repository is significantly
601 smaller if we ignore such revisions."""
602 self.blacklist = set()
603 blacklist = self.blacklist
604 for line in file("blacklist.txt", "r"):
605 if not line.startswith("#"):
606 try:
607 svn_rev = int(line.strip())
608 blacklist.add(svn_rev)
609 except ValueError:
610 pass # not an integer or a comment
611
612 def is_blacklisted(self, svn_rev):
613 return svn_rev in self.blacklist
614
615 574 def reparent(self, module):
616 575 """Reparent the svn transport and return the previous parent."""
617 576 if self.prevmodule == module:
@@ -639,11 +598,10 b' class svn_source(converter_source):'
639 598
640 599 for path, ent in paths:
641 600 entrypath = self.getrelpath(path)
642 entry = entrypath.decode(self.encoding)
643 601
644 602 kind = self._checkpath(entrypath, revnum)
645 603 if kind == svn.core.svn_node_file:
646 entries.append(self.recode(entry))
604 entries.append(self.recode(entrypath))
647 605 if not ent.copyfrom_path or not parents:
648 606 continue
649 607 # Copy sources not in parent revisions cannot be
@@ -656,102 +614,46 b' class svn_source(converter_source):'
656 614 continue
657 615 self.ui.debug(_("copied to %s from %s@%s\n") %
658 616 (entrypath, copyfrom_path, ent.copyfrom_rev))
659 copies[self.recode(entry)] = self.recode(copyfrom_path)
617 copies[self.recode(entrypath)] = self.recode(copyfrom_path)
660 618 elif kind == 0: # gone, but had better be a deleted *file*
661 619 self.ui.debug(_("gone from %s\n") % ent.copyfrom_rev)
662
663 # if a branch is created but entries are removed in
664 # the same changeset, get the right fromrev
665 # parents cannot be empty here, you cannot remove
666 # things from a root revision.
667 uuid, old_module, fromrev = self.revsplit(parents[0])
668
669 basepath = old_module + "/" + self.getrelpath(path)
670 entrypath = basepath
671
672 def lookup_parts(p):
673 rc = None
674 parts = p.split("/")
675 for i in range(len(parts)):
676 part = "/".join(parts[:i])
677 info = part, copyfrom.get(part, None)
678 if info[1] is not None:
679 self.ui.debug(_("found parent directory %s\n") % info[1])
680 rc = info
681 return rc
682
683 self.ui.debug(_("base, entry %s %s\n") % (basepath, entrypath))
684
685 frompath, froment = lookup_parts(entrypath) or (None, revnum - 1)
686
687 # need to remove fragment from lookup_parts and
688 # replace with copyfrom_path
689 if frompath is not None:
690 self.ui.debug(_("munge-o-matic\n"))
691 self.ui.debug(entrypath + '\n')
692 self.ui.debug(entrypath[len(frompath):] + '\n')
693 entrypath = froment.copyfrom_path + entrypath[len(frompath):]
694 fromrev = froment.copyfrom_rev
695 self.ui.debug(_("info: %s %s %s %s\n") % (frompath, froment, ent, entrypath))
620 pmodule, prevnum = self.revsplit(parents[0])[1:]
621 parentpath = pmodule + "/" + entrypath
622 self.ui.debug(_("entry %s\n") % parentpath)
696 623
697 624 # We can avoid the reparent calls if the module has
698 625 # not changed but it probably does not worth the pain.
699 626 prevmodule = self.reparent('')
700 fromkind = svn.ra.check_path(self.ra, entrypath.strip('/'), fromrev)
627 fromkind = svn.ra.check_path(self.ra, parentpath.strip('/'), prevnum)
701 628 self.reparent(prevmodule)
702 629
703 if fromkind == svn.core.svn_node_file: # a deleted file
704 entries.append(self.recode(entry))
630 if fromkind == svn.core.svn_node_file:
631 entries.append(self.recode(entrypath))
705 632 elif fromkind == svn.core.svn_node_dir:
706 # print "Deleted/moved non-file:", revnum, path, ent
707 # children = self._find_children(path, revnum - 1)
708 # print ("find children %s@%d from %d action %s" %
709 # (path, revnum, ent.copyfrom_rev, ent.action))
710 # Sometimes this is tricky. For example: in
711 # The Subversion Repository revision 6940 a dir
712 # was copied and one of its files was deleted
713 # from the new location in the same commit. This
714 # code can't deal with that yet.
715 633 if ent.action == 'C':
716 children = self._find_children(path, fromrev)
634 children = self._find_children(path, prevnum)
717 635 else:
718 oroot = entrypath.strip('/')
636 oroot = parentpath.strip('/')
719 637 nroot = path.strip('/')
720 children = self._find_children(oroot, fromrev)
638 children = self._find_children(oroot, prevnum)
721 639 children = [s.replace(oroot,nroot) for s in children]
722 # Mark all [files, not directories] as deleted.
640
723 641 for child in children:
724 # Can we move a child directory and its
725 # parent in the same commit? (probably can). Could
726 # cause problems if instead of revnum -1,
727 # we have to look in (copyfrom_path, revnum - 1)
728 entrypath = self.getrelpath("/" + child, module=old_module)
729 if entrypath:
730 entry = self.recode(entrypath.decode(self.encoding))
731 if entry in copies:
732 # deleted file within a copy
733 del copies[entry]
734 else:
735 entries.append(entry)
642 childpath = self.getrelpath("/" + child, pmodule)
643 if not childpath:
644 continue
645 if childpath in copies:
646 del copies[childpath]
647 entries.append(childpath)
736 648 else:
737 649 self.ui.debug(_('unknown path in revision %d: %s\n') % \
738 650 (revnum, path))
739 651 elif kind == svn.core.svn_node_dir:
740 # Should probably synthesize normal file entries
741 # and handle as above to clean up copy/rename handling.
742
743 652 # If the directory just had a prop change,
744 653 # then we shouldn't need to look for its children.
745 654 if ent.action == 'M':
746 655 continue
747 656
748 # Also this could create duplicate entries. Not sure
749 # whether this will matter. Maybe should make entries a set.
750 # print "Changed directory", revnum, path, ent.action, \
751 # ent.copyfrom_path, ent.copyfrom_rev
752 # This will fail if a directory was copied
753 # from another branch and then some of its files
754 # were deleted in the same transaction.
755 657 children = sorted(self._find_children(path, revnum))
756 658 for child in children:
757 659 # Can we move a child directory and its
@@ -759,15 +661,13 b' class svn_source(converter_source):'
759 661 # cause problems if instead of revnum -1,
760 662 # we have to look in (copyfrom_path, revnum - 1)
761 663 entrypath = self.getrelpath("/" + child)
762 # print child, self.module, entrypath
763 664 if entrypath:
764 665 # Need to filter out directories here...
765 666 kind = self._checkpath(entrypath, revnum)
766 667 if kind != svn.core.svn_node_dir:
767 668 entries.append(self.recode(entrypath))
768 669
769 # Copies here (must copy all from source) Probably not
770 # a real problem for us if source does not exist
670 # Handle directory copies
771 671 if not ent.copyfrom_path or not parents:
772 672 continue
773 673 # Copy sources not in parent revisions cannot be
@@ -775,8 +675,7 b' class svn_source(converter_source):'
775 675 pmodule, prevnum = self.revsplit(parents[0])[1:]
776 676 if ent.copyfrom_rev < prevnum:
777 677 continue
778 copyfrompath = ent.copyfrom_path.decode(self.encoding)
779 copyfrompath = self.getrelpath(copyfrompath, pmodule)
678 copyfrompath = self.getrelpath(ent.copyfrom_path, pmodule)
780 679 if not copyfrompath:
781 680 continue
782 681 copyfrom[path] = ent
@@ -788,10 +687,9 b' class svn_source(converter_source):'
788 687 entrypath = self.getrelpath("/" + child, pmodule)
789 688 if not entrypath:
790 689 continue
791 entry = entrypath.decode(self.encoding)
792 copytopath = path + entry[len(copyfrompath):]
690 copytopath = path + entrypath[len(copyfrompath):]
793 691 copytopath = self.getrelpath(copytopath)
794 copies[self.recode(copytopath)] = self.recode(entry, pmodule)
692 copies[self.recode(copytopath)] = self.recode(entrypath)
795 693
796 694 return (list(set(entries)), copies)
797 695
@@ -862,7 +760,7 b' class svn_source(converter_source):'
862 760 desc=log,
863 761 parents=parents,
864 762 branch=branch,
865 rev=rev.encode('utf-8'))
763 rev=rev)
866 764
867 765 self.commits[rev] = cset
868 766 # The parents list is *shared* among self.paths and the
@@ -886,10 +784,6 b' class svn_source(converter_source):'
886 784 if revnum < self.startrev:
887 785 lastonbranch = True
888 786 break
889 if self.is_blacklisted(revnum):
890 self.ui.note(_('skipping blacklisted revision %d\n')
891 % revnum)
892 continue
893 787 if not paths:
894 788 self.ui.debug(_('revision %d has no entries\n') % revnum)
895 789 continue
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''pulling, updating and merging in one command'''
8 '''pull, update and merge in one command'''
9 9
10 10 from mercurial.i18n import _
11 11 from mercurial.node import nullid, short
@@ -3,7 +3,7 b''
3 3 # This software may be used and distributed according to the terms of the
4 4 # GNU General Public License version 2, incorporated herein by reference.
5 5
6 '''GnuPG signing extension for Mercurial'''
6 '''sign and verify changesets'''
7 7
8 8 import os, tempfile, binascii
9 9 from mercurial import util, commands, match
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''show revision graphs in terminal windows
8 '''show revision graphs in terminals
9 9
10 10 This extension adds a --graph option to the incoming, outgoing and log
11 11 commands. When this options is given, an ASCII representation of the
@@ -1,7 +1,7 b''
1 1 # Copyright (C) 2007-8 Brendan Cully <brendan@kublai.com>
2 2 # Published under the GNU GPL
3 3
4 """CIA notification
4 """integrate Mercurial with a CIA notification service
5 5
6 6 This is meant to be run as a changegroup or incoming hook.
7 7 To configure it, set the following options in your hgrc:
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''browsing the repository in a graphical way
8 '''browse the repository in a graphical way
9 9
10 10 The hgk extension allows browsing the history of a repository in a
11 11 graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not
@@ -8,7 +8,7 b''
8 8 # The original module was split in an interface and an implementation
9 9 # file to defer pygments loading and speedup extension setup.
10 10
11 """syntax highlighting in hgweb, based on Pygments
11 """syntax highlighting for hgweb
12 12
13 13 It depends on the Pygments syntax highlighting library:
14 14 http://pygments.org/
@@ -6,8 +6,7 b''
6 6 # This software may be used and distributed according to the terms of the
7 7 # GNU General Public License version 2, incorporated herein by reference.
8 8
9 '''inotify-based status acceleration for Linux systems
10 '''
9 '''accelerate status report using system level services'''
11 10
12 11 # todo: socket permissions
13 12
@@ -26,7 +26,7 b''
26 26 #
27 27 # Run "hg help keyword" and "hg kwdemo" to get info on configuration.
28 28
29 '''keyword expansion in tracked files
29 '''expand keywords in tracked files
30 30
31 31 This extension expands RCS/CVS-like or self-customized $Keywords$ in
32 32 tracked text files selected by your configuration.
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''patch management and development
8 '''work with a stack of patches
9 9
10 10 This extension lets you work with a stack of patches in a Mercurial
11 11 repository. It manages two stacks of patches - all known patches, and
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''hook extension to email notifications on commits/pushes
8 '''send e-mail notifications for commits/pushes
9 9
10 10 Subscriptions can be managed through hgrc. Default mode is to print
11 11 messages to stdout, for testing and configuring.
@@ -12,7 +12,7 b''
12 12 #
13 13 # Run "hg help pager" to get info on configuration.
14 14
15 '''browse command output with external pager
15 '''browse command output with an external pager
16 16
17 17 To set the pager that should be used, set the application variable:
18 18
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''use suffixes to refer to ancestor revisions
8 '''interpret suffixes to refer to ancestor revisions
9 9
10 10 This extension allows you to use git-style suffixes to refer to the
11 11 ancestors of a specific revision.
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''sending Mercurial changesets as a series of patch emails
8 '''send Mercurial changesets as a series of patch e-mails
9 9
10 10 The series is started off with a "[PATCH 0 of N]" introduction, which
11 11 describes the series as a whole.
@@ -23,7 +23,7 b''
23 23 # along with this program; if not, write to the Free Software
24 24 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 25
26 '''enable removing untracked files only'''
26 '''delete files not tracked from the working directory'''
27 27
28 28 from mercurial import util, commands, cmdutil
29 29 from mercurial.i18n import _
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''interactive change selection during commit or qrefresh'''
8 '''interactively select which sets of changes to commit/qrefresh'''
9 9
10 10 from mercurial.i18n import gettext, _
11 11 from mercurial import cmdutil, commands, extensions, hg, mdiff, patch
@@ -3,7 +3,7 b''
3 3 # This software may be used and distributed according to the terms of the
4 4 # GNU General Public License version 2, incorporated herein by reference.
5 5
6 '''provides the hg share command'''
6 '''share a common history between several working directories'''
7 7
8 8 import os
9 9 from mercurial.i18n import _
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''patch transplanting tool
8 '''transplant changesets from another branch
9 9
10 10 This extension allows you to transplant patches from another branch.
11 11
@@ -9,7 +9,7 b''
9 9 # GNU General Public License version 2, incorporated herein by reference.
10 10 #
11 11
12 """allow to use MBCS path with problematic encoding.
12 '''allow the use of MBCS paths with problematic encoding
13 13
14 14 Some MBCS encodings are not good for some path operations (i.e.
15 15 splitting path, case conversion, etc.) with its encoded bytes. We call
@@ -36,8 +36,7 b' Note that there are some limitations on '
36 36 Path encoding conversion are done between Unicode and
37 37 encoding.encoding which is decided by Mercurial from current locale
38 38 setting or HGENCODING.
39
40 """
39 '''
41 40
42 41 import os
43 42 from mercurial.i18n import _
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''LF <-> CRLF/CR translation utilities
8 '''perform automatic newline conversion
9 9
10 10 To perform automatic newline conversion, use:
11 11
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 '''zeroconf support for Mercurial repositories
8 '''discover and advertise repositories on the local network
9 9
10 10 Zeroconf enabled repositories will be announced in a network without
11 11 the need to configure a server or a service. They can be discovered
@@ -5,7 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 import imp, os, sys
8 import imp, os
9 9 import util, cmdutil, help
10 10 from i18n import _, gettext
11 11
@@ -5,6 +5,7 b''
5 5 # This software may be used and distributed according to the terms of the
6 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 import textwrap
8 9 from i18n import _
9 10 import extensions
10 11
@@ -45,21 +46,27 b' def listexts(header, exts, maxlength):'
45 46 return ''
46 47 result = '\n%s\n\n' % header
47 48 for name, desc in sorted(exts.iteritems()):
48 result += ' %s %s\n' % (name.ljust(maxlength), desc)
49 # wrap desc at 70 characters, just like the main help texts
50 desc = textwrap.wrap(desc, width=70 - maxlength - 4)
51 pad = '\n' + ' ' * (maxlength + 4)
52 result += ' %s %s\n' % (name.ljust(maxlength),
53 pad.join(desc))
49 54 return result
50 55
51 56 def extshelp():
52 57 doc = _(r'''
53 Mercurial has a mechanism for adding new features through the
54 use of extensions. Extensions may bring new commands, or new
55 hooks, or change Mercurial's behavior.
58 Mercurial has the ability to add new features through the use of
59 extensions. Extensions may add new commands, add options to
60 existing commands, change the default behavior of commands, or
61 implement hooks.
56 62
57 Extensions are not loaded by default for a variety of reasons,
58 they may be meant for advanced users or provide potentially
59 dangerous commands (e.g. mq and rebase allow history to be
60 rewritten), they might not be ready for prime-time yet, or
61 they may alter Mercurial's behavior. It is thus up to the user
62 to activate extensions as desired.
63 Extensions are not loaded by default for a variety of reasons:
64 they can increase startup overhead; they may be meant for
65 advanced usage only; they may provide potentially dangerous
66 abilities (such as letting you destroy or modify history); they
67 might not be ready for prime time; or they may alter some
68 usual behaviors of stock Mercurial. It is thus up to the user to
69 activate extensions as needed.
63 70
64 71 To enable the "foo" extension, either shipped with Mercurial
65 72 or in the Python search path, create an entry for it in your
@@ -77,7 +84,7 b' def extshelp():'
77 84 scope, prepend its path with !:
78 85
79 86 [extensions]
80 # disabling extension bar residing in /ext/path
87 # disabling extension bar residing in /path/to/extension/bar.py
81 88 hgext.bar = !/path/to/extension/bar.py
82 89 # ditto, but no path was supplied for extension baz
83 90 hgext.baz = !
@@ -228,7 +228,7 b' def readgitpatch(lr):'
228 228
229 229 return (dopatch, gitpatches)
230 230
231 class linereader:
231 class linereader(object):
232 232 # simple class to allow pushing lines back into the input stream
233 233 def __init__(self, fp, textmode=False):
234 234 self.fp = fp
@@ -1,6 +1,6 b''
1 1 SVN-fs-dump-format-version: 2
2 2
3 UUID: 7b60030a-5a1f-4344-a009-73f0c1c2adf2
3 UUID: 3c3c228a-b3dd-467c-a766-896f4b7cd0af
4 4
5 5 Revision-number: 0
6 6 Prop-content-length: 56
@@ -9,7 +9,7 b' Content-length: 56'
9 9 K 8
10 10 svn:date
11 11 V 27
12 2008-12-06T12:47:52.296168Z
12 2009-06-21T12:38:53.023457Z
13 13 PROPS-END
14 14
15 15 Revision-number: 1
@@ -27,7 +27,7 b' pmezard'
27 27 K 8
28 28 svn:date
29 29 V 27
30 2008-12-06T12:47:52.342238Z
30 2009-06-21T12:38:53.111986Z
31 31 PROPS-END
32 32
33 33 Node-path: branches
@@ -72,7 +72,7 b' pmezard'
72 72 K 8
73 73 svn:date
74 74 V 27
75 2008-12-06T12:47:53.190046Z
75 2009-06-21T12:38:54.182594Z
76 76 PROPS-END
77 77
78 78 Node-path: branches/notinbranch
@@ -81,6 +81,7 b' Node-action: add'
81 81 Prop-content-length: 10
82 82 Text-content-length: 2
83 83 Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b
84 Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff
84 85 Content-length: 12
85 86
86 87 PROPS-END
@@ -93,6 +94,7 b' Node-action: add'
93 94 Prop-content-length: 10
94 95 Text-content-length: 2
95 96 Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3
97 Text-content-sha1: 3f786850e387550fdab836ed7e6dc881de23001b
96 98 Content-length: 12
97 99
98 100 PROPS-END
@@ -105,6 +107,7 b' Node-action: add'
105 107 Prop-content-length: 10
106 108 Text-content-length: 2
107 109 Text-content-md5: 3b5d5c3712955042212316173ccf37be
110 Text-content-sha1: 89e6c98d92887913cadf06b2adb97f26cde4849b
108 111 Content-length: 12
109 112
110 113 PROPS-END
@@ -117,20 +120,43 b' Node-action: add'
117 120 Prop-content-length: 10
118 121 Text-content-length: 2
119 122 Text-content-md5: 2cd6ee2c70b0bde53fbe6cac3c8b8bb1
123 Text-content-sha1: 2b66fd261ee5c6cfc8de7fa466bab600bcfe4f69
120 124 Content-length: 12
121 125
122 126 PROPS-END
123 127 c
124 128
125 129
130 Node-path: trunk/dir
131 Node-kind: dir
132 Node-action: add
133 Prop-content-length: 10
134 Content-length: 10
135
136 PROPS-END
137
138
139 Node-path: trunk/dir/e
140 Node-kind: file
141 Node-action: add
142 Prop-content-length: 10
143 Text-content-length: 2
144 Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9
145 Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
146 Content-length: 12
147
148 PROPS-END
149 e
150
151
126 152 Revision-number: 3
127 Prop-content-length: 124
128 Content-length: 124
153 Prop-content-length: 132
154 Content-length: 132
129 155
130 156 K 7
131 157 svn:log
132 V 22
133 branch trunk, remove c
158 V 30
159 branch trunk, remove c and dir
134 160 K 10
135 161 svn:author
136 162 V 7
@@ -138,38 +164,22 b' pmezard'
138 164 K 8
139 165 svn:date
140 166 V 27
141 2008-12-06T12:47:55.188535Z
167 2009-06-21T12:38:57.166484Z
142 168 PROPS-END
143 169
144 170 Node-path: branches/old
145 171 Node-kind: dir
146 172 Node-action: add
147 Node-copyfrom-rev: 1
173 Node-copyfrom-rev: 2
148 174 Node-copyfrom-path: trunk
149 Prop-content-length: 34
150 Content-length: 34
151
152 K 13
153 svn:mergeinfo
154 V 0
155
156 PROPS-END
157 175
158 176
159 Node-path: branches/old/a
160 Node-kind: file
161 Node-action: add
162 Node-copyfrom-rev: 2
163 Node-copyfrom-path: trunk/a
164 Text-copy-source-md5: 60b725f10c9c85c70d97880dfe8191b3
177 Node-path: branches/old/dir
178 Node-action: delete
165 179
166 180
167 Node-path: branches/old/b
168 Node-kind: file
169 Node-action: add
170 Node-copyfrom-rev: 2
171 Node-copyfrom-path: trunk/b
172 Text-copy-source-md5: 3b5d5c3712955042212316173ccf37be
181 Node-path: branches/old/c
182 Node-action: delete
173 183
174 184
175 185 Revision-number: 4
@@ -187,7 +197,7 b' pmezard'
187 197 K 8
188 198 svn:date
189 199 V 27
190 2008-12-06T12:47:57.146347Z
200 2009-06-21T12:38:59.084420Z
191 201 PROPS-END
192 202
193 203 Node-path: trunk/a
@@ -195,6 +205,7 b' Node-kind: file'
195 205 Node-action: change
196 206 Text-content-length: 4
197 207 Text-content-md5: 0d227f1abf8c2932d342e9b99cc957eb
208 Text-content-sha1: d7c8127a20a396cff08af086a1c695b0636f0c29
198 209 Content-length: 4
199 210
200 211 a
@@ -216,7 +227,7 b' pmezard'
216 227 K 8
217 228 svn:date
218 229 V 27
219 2008-12-06T12:47:58.150124Z
230 2009-06-21T12:39:00.093201Z
220 231 PROPS-END
221 232
222 233 Node-path: branches/old/b
@@ -224,6 +235,7 b' Node-kind: file'
224 235 Node-action: change
225 236 Text-content-length: 4
226 237 Text-content-md5: 06ac26ed8b614fc0b141e4542aa067c2
238 Text-content-sha1: f6980469e74f7125178e88ec571e06fe6ce86e95
227 239 Content-length: 4
228 240
229 241 b
@@ -245,7 +257,7 b' pmezard'
245 257 K 8
246 258 svn:date
247 259 V 27
248 2008-12-06T12:48:00.161336Z
260 2009-06-21T12:39:02.078633Z
249 261 PROPS-END
250 262
251 263 Node-path: branches/old/c
@@ -254,16 +266,12 b' Node-action: add'
254 266 Node-copyfrom-rev: 3
255 267 Node-copyfrom-path: trunk/b
256 268 Text-copy-source-md5: 3b5d5c3712955042212316173ccf37be
257 Prop-content-length: 34
269 Text-copy-source-sha1: 89e6c98d92887913cadf06b2adb97f26cde4849b
258 270 Text-content-length: 4
259 271 Text-content-md5: 33cb6785d50937d8d307ebb66d6259a7
260 Content-length: 38
272 Text-content-sha1: 7a6478264aa11a0f4befef356c03e83f2b1f6eba
273 Content-length: 4
261 274
262 K 13
263 svn:mergeinfo
264 V 0
265
266 PROPS-END
267 275 b
268 276 c
269 277
@@ -287,7 +295,7 b' pmezard'
287 295 K 8
288 296 svn:date
289 297 V 27
290 2008-12-06T12:48:01.153724Z
298 2009-06-21T12:39:03.065537Z
291 299 PROPS-END
292 300
293 301 Node-path: branches/old/b
@@ -295,6 +303,7 b' Node-kind: file'
295 303 Node-action: change
296 304 Text-content-length: 6
297 305 Text-content-md5: cdcfb41554e2d092c13f5e6839e63577
306 Text-content-sha1: 17ac58cabedebea235d1b5605531d5b1559797e9
298 307 Content-length: 6
299 308
300 309 b
@@ -317,7 +326,7 b' pmezard'
317 326 K 8
318 327 svn:date
319 328 V 27
320 2008-12-06T12:48:04.150915Z
329 2009-06-21T12:39:06.070275Z
321 330 PROPS-END
322 331
323 332 Node-path: branches/old2
@@ -346,7 +355,7 b' pmezard'
346 355 K 8
347 356 svn:date
348 357 V 27
349 2008-12-06T12:48:06.149560Z
358 2009-06-21T12:39:08.082539Z
350 359 PROPS-END
351 360
352 361 Node-path: branches/old
@@ -375,7 +384,7 b' pmezard'
375 384 K 8
376 385 svn:date
377 386 V 27
378 2008-12-06T12:48:07.268498Z
387 2009-06-21T12:39:09.073290Z
379 388 PROPS-END
380 389
381 390 Node-path: trunk/a
@@ -383,6 +392,7 b' Node-kind: file'
383 392 Node-action: change
384 393 Text-content-length: 2
385 394 Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3
395 Text-content-sha1: 3f786850e387550fdab836ed7e6dc881de23001b
386 396 Content-length: 2
387 397
388 398 a
@@ -403,7 +413,7 b' pmezard'
403 413 K 8
404 414 svn:date
405 415 V 27
406 2008-12-06T12:48:09.151702Z
416 2009-06-21T12:39:11.070264Z
407 417 PROPS-END
408 418
409 419 Node-path: branches/old3
@@ -1,6 +1,6 b''
1 1 SVN-fs-dump-format-version: 2
2 2
3 UUID: 0682b859-320d-4a69-a164-a7cab5695072
3 UUID: 9de99ecc-876b-46e5-bc59-bff9b2b58b1e
4 4
5 5 Revision-number: 0
6 6 Prop-content-length: 56
@@ -9,7 +9,7 b' Content-length: 56'
9 9 K 8
10 10 svn:date
11 11 V 27
12 2008-12-06T13:33:36.768573Z
12 2009-06-21T14:32:26.678698Z
13 13 PROPS-END
14 14
15 15 Revision-number: 1
@@ -27,7 +27,7 b' pmezard'
27 27 K 8
28 28 svn:date
29 29 V 27
30 2008-12-06T13:33:37.083146Z
30 2009-06-21T14:32:27.278689Z
31 31 PROPS-END
32 32
33 33 Node-path: trunk
@@ -45,6 +45,7 b' Node-action: add'
45 45 Prop-content-length: 10
46 46 Text-content-length: 2
47 47 Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3
48 Text-content-sha1: 3f786850e387550fdab836ed7e6dc881de23001b
48 49 Content-length: 12
49 50
50 51 PROPS-END
@@ -66,6 +67,7 b' Node-action: add'
66 67 Prop-content-length: 10
67 68 Text-content-length: 2
68 69 Text-content-md5: 3b5d5c3712955042212316173ccf37be
70 Text-content-sha1: 89e6c98d92887913cadf06b2adb97f26cde4849b
69 71 Content-length: 12
70 72
71 73 PROPS-END
@@ -78,6 +80,7 b' Node-action: add'
78 80 Prop-content-length: 10
79 81 Text-content-length: 2
80 82 Text-content-md5: 2cd6ee2c70b0bde53fbe6cac3c8b8bb1
83 Text-content-sha1: 2b66fd261ee5c6cfc8de7fa466bab600bcfe4f69
81 84 Content-length: 12
82 85
83 86 PROPS-END
@@ -99,6 +102,7 b' Node-action: add'
99 102 Prop-content-length: 10
100 103 Text-content-length: 2
101 104 Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b
105 Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff
102 106 Content-length: 12
103 107
104 108 PROPS-END
@@ -120,7 +124,7 b' pmezard'
120 124 K 8
121 125 svn:date
122 126 V 27
123 2008-12-06T13:33:38.152773Z
127 2009-06-21T14:32:28.312955Z
124 128 PROPS-END
125 129
126 130 Node-path: trunk/a
@@ -128,6 +132,7 b' Node-kind: file'
128 132 Node-action: change
129 133 Text-content-length: 4
130 134 Text-content-md5: 0d227f1abf8c2932d342e9b99cc957eb
135 Text-content-sha1: d7c8127a20a396cff08af086a1c695b0636f0c29
131 136 Content-length: 4
132 137
133 138 a
@@ -139,6 +144,7 b' Node-kind: file'
139 144 Node-action: change
140 145 Text-content-length: 4
141 146 Text-content-md5: 63fad9092ad37713ebe26b3193f89c41
147 Text-content-sha1: ccfb93b7bac6f1520f0adc0eebc2cafe9da80f42
142 148 Content-length: 4
143 149
144 150 c
@@ -160,7 +166,7 b' pmezard'
160 166 K 8
161 167 svn:date
162 168 V 27
163 2008-12-06T13:33:39.146388Z
169 2009-06-21T14:32:29.183467Z
164 170 PROPS-END
165 171
166 172 Node-path: subproject
@@ -189,7 +195,7 b' pmezard'
189 195 K 8
190 196 svn:date
191 197 V 27
192 2008-12-06T13:33:40.179944Z
198 2009-06-21T14:32:30.300975Z
193 199 PROPS-END
194 200
195 201 Node-path: subproject/trunk
@@ -216,7 +222,7 b' pmezard'
216 222 K 8
217 223 svn:date
218 224 V 27
219 2008-12-06T13:33:41.184505Z
225 2009-06-21T14:32:31.354398Z
220 226 PROPS-END
221 227
222 228 Node-path: subproject/branches
@@ -243,7 +249,7 b' pmezard'
243 249 K 8
244 250 svn:date
245 251 V 27
246 2008-12-06T13:33:42.153312Z
252 2009-06-21T14:32:32.121901Z
247 253 PROPS-END
248 254
249 255 Node-path: subproject/trunk/d1
@@ -272,7 +278,7 b' pmezard'
272 278 K 8
273 279 svn:date
274 280 V 27
275 2008-12-06T13:33:42.206313Z
281 2009-06-21T14:32:32.317815Z
276 282 PROPS-END
277 283
278 284 Node-path: subproject/trunk/d2
@@ -301,7 +307,7 b' pmezard'
301 307 K 8
302 308 svn:date
303 309 V 27
304 2008-12-06T13:33:43.182355Z
310 2009-06-21T14:32:33.418320Z
305 311 PROPS-END
306 312
307 313 Node-path: subproject/trunk/d1/b
@@ -309,6 +315,7 b' Node-kind: file'
309 315 Node-action: change
310 316 Text-content-length: 4
311 317 Text-content-md5: 06ac26ed8b614fc0b141e4542aa067c2
318 Text-content-sha1: f6980469e74f7125178e88ec571e06fe6ce86e95
312 319 Content-length: 4
313 320
314 321 b
@@ -334,7 +341,7 b' pmezard'
334 341 K 8
335 342 svn:date
336 343 V 27
337 2008-12-06T13:33:44.153682Z
344 2009-06-21T14:32:34.126542Z
338 345 PROPS-END
339 346
340 347 Node-path: subproject/branches/d1
@@ -363,7 +370,7 b' pmezard'
363 370 K 8
364 371 svn:date
365 372 V 27
366 2008-12-06T13:33:44.298011Z
373 2009-06-21T14:32:34.436015Z
367 374 PROPS-END
368 375
369 376 Node-path: subproject/trunk/d
@@ -372,6 +379,7 b' Node-action: add'
372 379 Node-copyfrom-rev: 7
373 380 Node-copyfrom-path: subproject/trunk/d2/d
374 381 Text-copy-source-md5: e29311f6f1bf1af907f9ef9f44b8328b
382 Text-copy-source-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff
375 383
376 384
377 385 Revision-number: 11
@@ -389,7 +397,7 b' pmezard'
389 397 K 8
390 398 svn:date
391 399 V 27
392 2008-12-06T13:33:44.349920Z
400 2009-06-21T14:32:34.803189Z
393 401 PROPS-END
394 402
395 403 Node-path: subproject/trunk/d2
@@ -399,3 +407,94 b' Node-copyfrom-rev: 7'
399 407 Node-copyfrom-path: subproject/trunk/d2
400 408
401 409
410 Revision-number: 12
411 Prop-content-length: 107
412 Content-length: 107
413
414 K 7
415 svn:log
416 V 6
417 add d3
418 K 10
419 svn:author
420 V 7
421 pmezard
422 K 8
423 svn:date
424 V 27
425 2009-06-21T14:32:36.531735Z
426 PROPS-END
427
428 Node-path: subproject/trunk/d3
429 Node-kind: dir
430 Node-action: add
431 Prop-content-length: 10
432 Content-length: 10
433
434 PROPS-END
435
436
437 Node-path: subproject/trunk/d3/d31
438 Node-kind: dir
439 Node-action: add
440 Prop-content-length: 10
441 Content-length: 10
442
443 PROPS-END
444
445
446 Node-path: subproject/trunk/d3/d31/e
447 Node-kind: file
448 Node-action: add
449 Prop-content-length: 10
450 Text-content-length: 2
451 Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9
452 Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
453 Content-length: 12
454
455 PROPS-END
456 e
457
458
459 Node-path: subproject/trunk/d3/f
460 Node-kind: file
461 Node-action: add
462 Prop-content-length: 10
463 Text-content-length: 2
464 Text-content-md5: 9a8ad92c50cae39aa2c5604fd0ab6d8c
465 Text-content-sha1: a9fcd54b25e7e863d72cd47c08af46e61b74b561
466 Content-length: 12
467
468 PROPS-END
469 f
470
471
472 Revision-number: 13
473 Prop-content-length: 128
474 Content-length: 128
475
476 K 7
477 svn:log
478 V 26
479 copy dir and remove subdir
480 K 10
481 svn:author
482 V 7
483 pmezard
484 K 8
485 svn:date
486 V 27
487 2009-06-21T14:32:38.281829Z
488 PROPS-END
489
490 Node-path: subproject/trunk/d3/d31
491 Node-action: delete
492
493
494 Node-path: subproject/trunk/d4
495 Node-kind: dir
496 Node-action: add
497 Node-copyfrom-rev: 12
498 Node-copyfrom-path: subproject/trunk/d3
499
500
@@ -22,15 +22,19 b' cd project'
22 22 echo a > trunk/a
23 23 echo b > trunk/b
24 24 echo c > trunk/c
25 mkdir trunk/dir
26 echo e > trunk/dir/e
25 27 # Add a file within branches, used to confuse branch detection
26 28 echo d > branches/notinbranch
27 svn add trunk/a trunk/b trunk/c branches/notinbranch
29 svn add trunk/a trunk/b trunk/c trunk/dir branches/notinbranch
28 30 svn ci -m hello
31 svn up
29 32
30 33 # Branch to old
31 34 svn copy trunk branches/old
32 35 svn rm branches/old/c
33 svn ci -m "branch trunk, remove c"
36 svn rm branches/old/dir
37 svn ci -m "branch trunk, remove c and dir"
34 38 svn up
35 39
36 40 # Update trunk
@@ -57,6 +57,17 b' else'
57 57 # Copy a directory from a past revision
58 58 svn copy -r 7 $svnurl/subproject/trunk/d2 $svnurl/subproject/trunk -m copydirfrompast
59 59 fi
60
61 # Copy a directory while removing a subdirectory
62 svn up
63 mkdir -p subproject/trunk/d3/d31
64 echo e > subproject/trunk/d3/d31/e
65 echo f > subproject/trunk/d3/f
66 svn add subproject/trunk/d3
67 svn ci -m "add d3"
68 svn copy subproject/trunk/d3 subproject/trunk/d4
69 svn rm subproject/trunk/d3/d31
70 svn ci -m "copy dir and remove subdir"
60 71 cd ..
61 72
62 73 svnadmin dump svn-repo > ../move.svndump No newline at end of file
@@ -5,7 +5,7 b' sorting...'
5 5 converting...
6 6 10 init projA
7 7 9 hello
8 8 branch trunk, remove c
8 8 branch trunk, remove c and dir
9 9 7 change a
10 10 6 change b
11 11 5 move and update c
@@ -37,9 +37,9 b' o branch=newbranch 11 branch trunk@1 in'
37 37 | | |
38 38 | o | branch= 3 change a files: a
39 39 | | |
40 +---o branch=old 2 branch trunk, remove c files: a b
41 | |
42 | o branch= 1 hello files: a b c
40 | | o branch=old 2 branch trunk, remove c and dir files: c
41 | |/
42 | o branch= 1 hello files: a b c dir/e
43 43 |/
44 44 o branch= 0 init projA files:
45 45
@@ -3,16 +3,22 b' initializing destination A-hg repository'
3 3 scanning source...
4 4 sorting...
5 5 converting...
6 9 createtrunk
7 8 moved1
8 7 moved1
9 6 moved2
10 5 changeb and rm d2
11 4 changeb and rm d2
12 3 moved1again
13 2 moved1again
14 1 copyfilefrompast
15 0 copydirfrompast
6 11 createtrunk
7 10 moved1
8 9 moved1
9 8 moved2
10 7 changeb and rm d2
11 6 changeb and rm d2
12 5 moved1again
13 4 moved1again
14 3 copyfilefrompast
15 2 copydirfrompast
16 1 add d3
17 0 copy dir and remove subdir
18 o 11 copy dir and remove subdir files: d3/d31/e d4/d31/e d4/f
19 |
20 o 10 add d3 files: d3/d31/e d3/f
21 |
16 22 o 9 copydirfrompast files: d2/d
17 23 |
18 24 o 8 copyfilefrompast files: d
@@ -33,5 +39,5 b' o | 2 moved1 files: d1/b d1/c'
33 39 |
34 40 o 0 createtrunk files:
35 41
36 default 9:
42 default 11:
37 43 d1 6:
@@ -1,5 +1,5 b''
1 1 % help
2 keyword extension - keyword expansion in tracked files
2 keyword extension - expand keywords in tracked files
3 3
4 4 This extension expands RCS/CVS-like or self-customized $Keywords$ in
5 5 tracked text files selected by your configuration.
@@ -55,9 +55,9 b' list of commands:'
55 55
56 56 enabled extensions:
57 57
58 keyword keyword expansion in tracked files
59 mq patch management and development
60 notify hook extension to email notifications on commits/pushes
58 keyword expand keywords in tracked files
59 mq work with a stack of patches
60 notify send e-mail notifications for commits/pushes
61 61
62 62 use "hg -v help keyword" to show aliases and global options
63 63 % hg kwdemo
@@ -1,5 +1,5 b''
1 1 % help
2 mq extension - patch management and development
2 mq extension - work with a stack of patches
3 3
4 4 This extension lets you work with a stack of patches in a Mercurial
5 5 repository. It manages two stacks of patches - all known patches, and
@@ -53,7 +53,7 b' list of commands:'
53 53
54 54 enabled extensions:
55 55
56 mq patch management and development
56 mq work with a stack of patches
57 57
58 58 use "hg -v help mq" to show aliases and global options
59 59 adding a
@@ -1,4 +1,4 b''
1 notify extension - hook extension to email notifications on commits/pushes
1 notify extension - send e-mail notifications for commits/pushes
2 2
3 3 Subscriptions can be managed through hgrc. Default mode is to print
4 4 messages to stdout, for testing and configuring.
General Comments 0
You need to be logged in to leave comments. Login now