Mercurial > hgsubversion
annotate svncommands.py @ 284:f8f9a2993705
Implement parseurl support (#revision in repository urls)
Note: Normally when using parseurl, hg clone will treat the revision after # as
if it was passed in as --rev, treats that rev as a head and won't clone beyond
that. This wasn't implemented here, hence all the TODO's in the comments.
All we do is use the checkout parameter where appropriate to update the wc to
the selected revision.
author | Martijn Pieters <mj@zopatista.com> |
---|---|
date | Mon, 27 Apr 2009 09:39:39 -0500 |
parents | a119ab6135f3 |
children | ba8e91a7c077 |
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 |
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
13 |
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
14 |
255
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
15 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
|
16 tag_locations='tags', authors=None, filemap=None, **opts): |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
17 """show incoming revisions from Subversion |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
18 """ |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
19 svn_url = util.normalize_url(svn_url) |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
20 |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
21 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
|
22 user, passwd = util.getuserpass(opts) |
255
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
23 svn = svnwrap.SubversionRepo(svn_url, user, passwd) |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
24 author_host = "@%s" % svn.uuid |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
25 tag_locations = tag_locations.split(',') |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
26 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
|
27 ui_=ui, |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
28 subdir=svn.subdir, |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
29 author_host=author_host, |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
30 tag_locations=tag_locations, |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
31 authors=authors, |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
32 filemap=filemap) |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
33 if os.path.exists(hg_editor.uuid_file): |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
34 uuid = open(hg_editor.uuid_file).read() |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
35 assert uuid == svn.uuid |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
36 start = hg_editor.last_known_revision() |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
37 else: |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
38 open(hg_editor.uuid_file, 'w').write(svn.uuid) |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
39 open(hg_editor.svn_url_file, 'w').write(svn_url) |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
40 initializing_repo = True |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
41 start = skipto_rev |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
42 |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
43 if initializing_repo and start > 0: |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
44 raise hgutil.Abort('Revision skipping at repository initialization ' |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
45 'remains unimplemented.') |
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 rev_stuff = (('revision', 'revnum'), |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
48 ('user', 'author'), |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
49 ('date', 'date'), |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
50 ('message', 'message') |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
51 ) |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
52 |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
53 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
|
54 |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
55 for r in svn.revisions(start=start): |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
56 ui.status('\n') |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
57 for label, attr in rev_stuff: |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
58 l1 = label+':' |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
59 ui.status('%s%s\n' % (l1.ljust(13), |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
60 str(r.__getattribute__(attr)).strip(), )) |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
61 |
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
62 |
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
63 def rebuildmeta(ui, repo, hg_repo_path, args, **opts): |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
64 """rebuild hgsubversion metadata using values stored in revisions |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
65 """ |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
66 if len(args) != 1: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
67 raise hgutil.Abort('You must pass the svn URI used to create this repo.') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
68 uuid = None |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
69 url = args[0].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
|
70 user, passwd = util.getuserpass(opts) |
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
71 svn = svnwrap.SubversionRepo(url, user, passwd) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
72 subdir = svn.subdir |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
73 svnmetadir = os.path.join(repo.path, 'svn') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
74 if not os.path.exists(svnmetadir): |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
75 os.makedirs(svnmetadir) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
76 |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
77 revmap = open(os.path.join(svnmetadir, 'rev_map'), 'w') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
78 revmap.write('1\n') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
79 last_rev = -1 |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
80 branchinfo = {} |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
81 noderevnums = {} |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
82 for rev in repo: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
83 ctx = repo[rev] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
84 convinfo = ctx.extra().get('convert_revision', None) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
85 if convinfo: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
86 assert convinfo.startswith('svn:') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
87 revpath, revision = convinfo[40:].split('@') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
88 if subdir and subdir[0] != '/': |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
89 subdir = '/' + subdir |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
90 if subdir and subdir[-1] == '/': |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
91 subdir = subdir[:-1] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
92 assert revpath.startswith(subdir), ('That does not look like the ' |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
93 'right location in the repo.') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
94 if uuid is None: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
95 uuid = convinfo[4:40] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
96 assert uuid == svn.uuid, 'UUIDs did not match!' |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
97 urlfile = open(os.path.join(svnmetadir, 'url'), 'w') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
98 urlfile.write(url) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
99 urlfile.close() |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
100 uuidfile = open(os.path.join(svnmetadir, 'uuid'), 'w') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
101 uuidfile.write(uuid) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
102 uuidfile.close() |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
103 commitpath = revpath[len(subdir)+1:] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
104 if commitpath.startswith('branches'): |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
105 commitpath = commitpath[len('branches/'):] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
106 elif commitpath == 'trunk': |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
107 commitpath = '' |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
108 else: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
109 assert False, 'Unhandled case in rebuildmeta' |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
110 revmap.write('%s %s %s\n' % (revision, |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
111 node.hex(ctx.node()), |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
112 commitpath)) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
113 revision = int(revision) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
114 noderevnums[ctx.node()] = revision |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
115 if revision > last_rev: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
116 last_rev = revision |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
117 branch = ctx.branch() |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
118 if branch == 'default': |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
119 branch = None |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
120 if branch not in branchinfo: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
121 parent = ctx.parents()[0] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
122 if (parent.node() in noderevnums |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
123 and parent.branch() != ctx.branch()): |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
124 parentbranch = parent.branch() |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
125 if parentbranch == 'default': |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
126 parentbranch = None |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
127 else: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
128 parentbranch = None |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
129 branchinfo[branch] = (parentbranch, |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
130 noderevnums.get(parent.node(), 0), |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
131 revision) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
132 for c in ctx.children(): |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
133 if c.branch() == 'closed-branches': |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
134 if branch in branchinfo: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
135 del branchinfo[branch] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
136 branchinfofile = open(os.path.join(svnmetadir, 'branch_info'), 'w') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
137 pickle.dump(branchinfo, branchinfofile) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
138 branchinfofile.close() |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
139 |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
140 # now handle tags |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
141 tagsinfo = {} |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
142 realtags = svn.tags |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
143 tagsleft = realtags.items() |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
144 while tagsleft: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
145 tag, tagparent = tagsleft.pop(0) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
146 source, rev = tagparent |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
147 if source.startswith('tags/'): |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
148 src = source[len('tags/'):] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
149 if src in tagsinfo: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
150 tagsinfo[tag] = tagsinfo[src] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
151 elif src in realtags: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
152 if (realtags[src][1] <= last_rev |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
153 or realtags[src][0].startswith('tags/')): |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
154 tagsleft.append(src) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
155 else: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
156 older_tags = svn.tags_at_rev(rev) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
157 newsrc, newrev = older_tags[src] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
158 tagsleft.append((tag, (newsrc, newrev))) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
159 continue |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
160 else: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
161 # determine the branch |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
162 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
|
163 if source.startswith('branches/'): |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
164 source = source[len('branches/'):] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
165 elif source == 'trunk': |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
166 source = None |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
167 else: |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
168 source = '../' + source |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
169 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
|
170 tagsinfo[tag] = source, rev |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
171 |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
172 tagsinfofile = open(os.path.join(svnmetadir, 'tag_info'), 'w') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
173 pickle.dump(tagsinfo, tagsinfofile) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
174 tagsinfofile.close() |
247
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 |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
177 def help(ui, args=None, **opts): |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
178 """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
|
179 """ |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
180 if args: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
181 subcommand = args[0] |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
182 if subcommand not in table: |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
183 candidates = [] |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
184 for c in table: |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
185 if c.startswith(subcommand): |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
186 candidates.append(c) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
187 if len(candidates) == 1: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
188 subcommand = candidates[0] |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
189 elif len(candidates) > 1: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
190 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
|
191 ' '.join(candidates)) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
192 return |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
193 doc = table[subcommand].__doc__ |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
194 if doc is None: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
195 doc = "No documentation available for %s." % subcommand |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
196 ui.status(doc.strip(), '\n') |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
197 return |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
198 ui.status(_helpgen()) |
247
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 |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
201 def update(ui, args, repo, clean=False, **opts): |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
202 """update to a specified Subversion revision number |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
203 """ |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
204 assert len(args) == 1 |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
205 rev = int(args[0]) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
206 path = os.path.join(repo.path, 'svn', 'rev_map') |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
207 answers = [] |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
208 for k,v in util.parse_revmap(path).iteritems(): |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
209 if k[0] == rev: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
210 answers.append((v, k[1])) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
211 if len(answers) == 1: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
212 if clean: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
213 return hg.clean(repo, answers[0][0]) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
214 return hg.update(repo, answers[0][0]) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
215 elif len(answers) == 0: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
216 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
|
217 return 1 |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
218 else: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
219 ui.status('Ambiguous revision!\n') |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
220 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
|
221 answers]+[''])) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
222 return 1 |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
223 |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
224 |
274
a119ab6135f3
Add help to the list of nourl commands
Daniel Tang <dytang@cs.purdue.edu>
parents:
265
diff
changeset
|
225 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
|
226 table = { |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
227 'update': update, |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
228 'help': help, |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
229 'rebuildmeta': rebuildmeta, |
255
246aaefb1cc0
Add a basic incoming command.
Nat Williams <nat.williams@gmail.com>
parents:
253
diff
changeset
|
230 'incoming': incoming, |
253
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 table.update(utility_commands.table) |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
234 |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
235 |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
236 def _helpgen(): |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
237 ret = ['hg svn ...', '', |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
238 'subcommands for Subversion integration', '', |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
239 'list of subcommands:', ''] |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
240 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
|
241 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
|
242 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
|
243 return '\n'.join(ret) + '\n' |