Mercurial > hgsubversion
annotate svncommands.py @ 331:75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
The 'hg svn url' command has been killed; the replacement is
'.hg/hgrc'. More stuff related to its disappearance has been stripped,
including two tests.
HgChangeReceiver now takes a UUID argument, which it uses to ensure
that remote repositories remain unchanged. This is a temporary
solution, and I'm not entirely satisfied with how it's done either.
Access to the UUID file has been isolated in a HgChangeReceiver
property.
Some more tests have been updated to use ui.pushbuffer()/popbuffer(),
and to pass through the Mercurial API.
Moved the arguments to wrappers.pull() to the UI configuration.
Also, remove HgChangeReceiver.opts in favour of a 'usebranchnames'
instance & configuration variable. The name is taken from the
ConvertExtension.
| author | Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
|---|---|
| date | Fri, 15 May 2009 19:18:43 +0200 |
| parents | 1d48d9a34c19 |
| children |
| rev | line source |
|---|---|
|
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
1 import os |
|
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
2 import cPickle as pickle |
|
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
3 |
|
242
06130689a2c8
Move push into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
241
diff
changeset
|
4 from mercurial import hg |
|
06130689a2c8
Move push into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
241
diff
changeset
|
5 from mercurial import node |
|
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
6 from mercurial import util as hgutil |
|
242
06130689a2c8
Move push into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
241
diff
changeset
|
7 |
|
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
8 |
|
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
9 import hg_delta_editor |
|
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
10 import svnwrap |
|
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
11 import util |
|
242
06130689a2c8
Move push into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
241
diff
changeset
|
12 import utility_commands |
|
291
ba8e91a7c077
Add 'updateexternals' to synchronize externals with remote repo.
Patrick Mezard <pmezard@gmail.com>
parents:
274
diff
changeset
|
13 import svnexternals |
|
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
14 |
|
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
15 |
|
255
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
16 def incoming(ui, svn_url, hg_repo_path, skipto_rev=0, stupid=None, |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
17 tag_locations='tags', authors=None, filemap=None, **opts): |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
18 """show incoming revisions from Subversion |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
19 """ |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
20 svn_url = util.normalize_url(svn_url) |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
21 |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
22 initializing_repo = False |
|
265
9f0738587f94
Re-re-refix username support, add a comment so maybe I remember this time.
Augie Fackler <durin42@gmail.com>
parents:
257
diff
changeset
|
23 user, passwd = util.getuserpass(opts) |
|
255
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
24 svn = svnwrap.SubversionRepo(svn_url, user, passwd) |
|
307
1d48d9a34c19
Put authormap into a separate file, and make it much better too.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
291
diff
changeset
|
25 author_host = ui.config('hgsubversion', 'defaulthost', svn.uuid) |
|
255
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
26 tag_locations = tag_locations.split(',') |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
27 hg_editor = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
28 ui_=ui, |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
29 subdir=svn.subdir, |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
30 author_host=author_host, |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
31 tag_locations=tag_locations, |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
32 authors=authors, |
|
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
307
diff
changeset
|
33 filemap=filemap, |
|
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
307
diff
changeset
|
34 uuid=svn.uuid) |
|
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
307
diff
changeset
|
35 start = max(hg_editor.last_known_revision(), skipto_rev) |
|
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
307
diff
changeset
|
36 initializing_repo = (hg_editor.last_known_revision() <= 0) |
|
255
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
37 |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
38 if initializing_repo and start > 0: |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
39 raise hgutil.Abort('Revision skipping at repository initialization ' |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
40 'remains unimplemented.') |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
41 |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
42 rev_stuff = (('revision', 'revnum'), |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
43 ('user', 'author'), |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
44 ('date', 'date'), |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
45 ('message', 'message') |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
46 ) |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
47 |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
48 ui.status('incoming changes from %s\n' % svn_url) |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
49 |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
50 for r in svn.revisions(start=start): |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
51 ui.status('\n') |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
52 for label, attr in rev_stuff: |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
53 l1 = label+':' |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
54 ui.status('%s%s\n' % (l1.ljust(13), |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
55 str(r.__getattribute__(attr)).strip(), )) |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
56 |
|
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
57 |
|
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
58 def rebuildmeta(ui, repo, hg_repo_path, args, **opts): |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
59 """rebuild hgsubversion metadata using values stored in revisions |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
60 """ |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
61 if len(args) != 1: |
|
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
307
diff
changeset
|
62 url = repo.ui.expandpath(dest or 'default-push', dest or 'default') |
|
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
307
diff
changeset
|
63 else: |
|
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
307
diff
changeset
|
64 url = args[0] |
|
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
307
diff
changeset
|
65 if not (url.startswith('svn+') or url.startswith('svn:')): |
|
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
307
diff
changeset
|
66 raise hgutil.Abort('No valid Subversion URI found; please specify one.') |
|
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
67 uuid = None |
|
331
75f082b5897e
Switch to using url scheme wrappers instead of duplicating each command we wrap.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
307
diff
changeset
|
68 url = util.normalize_url(url.rstrip('/')) |
|
265
9f0738587f94
Re-re-refix username support, add a comment so maybe I remember this time.
Augie Fackler <durin42@gmail.com>
parents:
257
diff
changeset
|
69 user, passwd = util.getuserpass(opts) |
|
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
70 svn = svnwrap.SubversionRepo(url, user, passwd) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
71 subdir = svn.subdir |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
72 svnmetadir = os.path.join(repo.path, 'svn') |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
73 if not os.path.exists(svnmetadir): |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
74 os.makedirs(svnmetadir) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
75 |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
76 revmap = open(os.path.join(svnmetadir, 'rev_map'), 'w') |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
77 revmap.write('1\n') |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
78 last_rev = -1 |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
79 branchinfo = {} |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
80 noderevnums = {} |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
81 for rev in repo: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
82 ctx = repo[rev] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
83 convinfo = ctx.extra().get('convert_revision', None) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
84 if convinfo: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
85 assert convinfo.startswith('svn:') |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
86 revpath, revision = convinfo[40:].split('@') |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
87 if subdir and subdir[0] != '/': |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
88 subdir = '/' + subdir |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
89 if subdir and subdir[-1] == '/': |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
90 subdir = subdir[:-1] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
91 assert revpath.startswith(subdir), ('That does not look like the ' |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
92 'right location in the repo.') |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
93 if uuid is None: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
94 uuid = convinfo[4:40] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
95 assert uuid == svn.uuid, 'UUIDs did not match!' |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
96 uuidfile = open(os.path.join(svnmetadir, 'uuid'), 'w') |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
97 uuidfile.write(uuid) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
98 uuidfile.close() |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
99 commitpath = revpath[len(subdir)+1:] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
100 if commitpath.startswith('branches'): |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
101 commitpath = commitpath[len('branches/'):] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
102 elif commitpath == 'trunk': |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
103 commitpath = '' |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
104 else: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
105 assert False, 'Unhandled case in rebuildmeta' |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
106 revmap.write('%s %s %s\n' % (revision, |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
107 node.hex(ctx.node()), |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
108 commitpath)) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
109 revision = int(revision) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
110 noderevnums[ctx.node()] = revision |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
111 if revision > last_rev: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
112 last_rev = revision |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
113 branch = ctx.branch() |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
114 if branch == 'default': |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
115 branch = None |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
116 if branch not in branchinfo: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
117 parent = ctx.parents()[0] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
118 if (parent.node() in noderevnums |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
119 and parent.branch() != ctx.branch()): |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
120 parentbranch = parent.branch() |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
121 if parentbranch == 'default': |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
122 parentbranch = None |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
123 else: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
124 parentbranch = None |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
125 branchinfo[branch] = (parentbranch, |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
126 noderevnums.get(parent.node(), 0), |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
127 revision) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
128 for c in ctx.children(): |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
129 if c.branch() == 'closed-branches': |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
130 if branch in branchinfo: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
131 del branchinfo[branch] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
132 branchinfofile = open(os.path.join(svnmetadir, 'branch_info'), 'w') |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
133 pickle.dump(branchinfo, branchinfofile) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
134 branchinfofile.close() |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
135 |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
136 # now handle tags |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
137 tagsinfo = {} |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
138 realtags = svn.tags |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
139 tagsleft = realtags.items() |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
140 while tagsleft: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
141 tag, tagparent = tagsleft.pop(0) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
142 source, rev = tagparent |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
143 if source.startswith('tags/'): |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
144 src = source[len('tags/'):] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
145 if src in tagsinfo: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
146 tagsinfo[tag] = tagsinfo[src] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
147 elif src in realtags: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
148 if (realtags[src][1] <= last_rev |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
149 or realtags[src][0].startswith('tags/')): |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
150 tagsleft.append(src) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
151 else: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
152 older_tags = svn.tags_at_rev(rev) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
153 newsrc, newrev = older_tags[src] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
154 tagsleft.append((tag, (newsrc, newrev))) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
155 continue |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
156 else: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
157 # determine the branch |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
158 assert not source.startswith('tags/'), "Tags can't be tags of other tags." |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
159 if source.startswith('branches/'): |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
160 source = source[len('branches/'):] |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
161 elif source == 'trunk': |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
162 source = None |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
163 else: |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
164 source = '../' + source |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
165 if rev <= last_rev and (source or 'default') in repo.branchtags(): |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
166 tagsinfo[tag] = source, rev |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
167 |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
168 tagsinfofile = open(os.path.join(svnmetadir, 'tag_info'), 'w') |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
169 pickle.dump(tagsinfo, tagsinfofile) |
|
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
170 tagsinfofile.close() |
|
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
171 |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
172 |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
173 def help(ui, args=None, **opts): |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
174 """show help for a given subcommands or a help overview |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
175 """ |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
176 if args: |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
177 subcommand = args[0] |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
178 if subcommand not in table: |
|
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
179 candidates = [] |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
180 for c in table: |
|
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
181 if c.startswith(subcommand): |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
182 candidates.append(c) |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
183 if len(candidates) == 1: |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
184 subcommand = candidates[0] |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
185 elif len(candidates) > 1: |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
186 ui.status('Ambiguous command. Could have been:\n%s\n' % |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
187 ' '.join(candidates)) |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
188 return |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
189 doc = table[subcommand].__doc__ |
|
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
190 if doc is None: |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
191 doc = "No documentation available for %s." % subcommand |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
192 ui.status(doc.strip(), '\n') |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
193 return |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
194 ui.status(_helpgen()) |
|
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
195 |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
196 |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
197 def update(ui, args, repo, clean=False, **opts): |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
198 """update to a specified Subversion revision number |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
199 """ |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
200 assert len(args) == 1 |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
201 rev = int(args[0]) |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
202 path = os.path.join(repo.path, 'svn', 'rev_map') |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
203 answers = [] |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
204 for k,v in util.parse_revmap(path).iteritems(): |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
205 if k[0] == rev: |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
206 answers.append((v, k[1])) |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
207 if len(answers) == 1: |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
208 if clean: |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
209 return hg.clean(repo, answers[0][0]) |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
210 return hg.update(repo, answers[0][0]) |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
211 elif len(answers) == 0: |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
212 ui.status('Revision %s did not produce an hg revision.\n' % rev) |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
213 return 1 |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
214 else: |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
215 ui.status('Ambiguous revision!\n') |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
216 ui.status('\n'.join(['%s on %s' % (node.hex(a[0]), a[1]) for a in |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
217 answers]+[''])) |
|
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
218 return 1 |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
219 |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
220 |
|
274
a119ab6135f3
Add help to the list of nourl commands
Daniel Tang <dytang@cs.purdue.edu>
parents:
265
diff
changeset
|
221 nourl = ['rebuildmeta', 'help'] + utility_commands.nourl |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
222 table = { |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
223 'update': update, |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
224 'help': help, |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
225 'rebuildmeta': rebuildmeta, |
|
255
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
226 'incoming': incoming, |
|
291
ba8e91a7c077
Add 'updateexternals' to synchronize externals with remote repo.
Patrick Mezard <pmezard@gmail.com>
parents:
274
diff
changeset
|
227 'updateexternals': svnexternals.updateexternals, |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
228 } |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
229 |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
230 table.update(utility_commands.table) |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
231 |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
232 |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
233 def _helpgen(): |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
234 ret = ['hg svn ...', '', |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
235 'subcommands for Subversion integration', '', |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
236 'list of subcommands:', ''] |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
237 for name, func in sorted(table.items()): |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
238 short_description = (func.__doc__ or '').splitlines()[0] |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
239 ret.append(" %-10s %s" % (name, short_description)) |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
240 return '\n'.join(ret) + '\n' |
