Mercurial > hgsubversion
comparison util.py @ 304:ce676eff002b
First merge, totally untested.
author | Dan Villiom Podlaski Christiansen <danchr@gmail.com> |
---|---|
date | Fri, 01 May 2009 10:28:59 +0200 |
parents | f8f9a2993705 |
children | 33736e2e25f0 |
comparison
equal
deleted
inserted
replaced
303:f423a8780832 | 304:ce676eff002b |
---|---|
1 import os | 1 import os |
2 import shutil | 2 import shutil |
3 | 3 |
4 from mercurial import hg | 4 from mercurial import hg |
5 from mercurial import node | 5 from mercurial import node |
6 from mercurial import util as hgutil | |
6 | 7 |
7 svn_subcommands = { } | |
8 def register_subcommand(name): | |
9 def inner(fn): | |
10 svn_subcommands[name] = fn | |
11 return fn | |
12 return inner | |
13 | 8 |
14 svn_commands_nourl = set() | 9 def getuserpass(opts): |
15 def command_needs_no_url(fn): | 10 # DO NOT default the user to hg's getuser(). If you provide |
16 svn_commands_nourl.add(fn) | 11 # *any* default username to Subversion, it won't use any remembered |
17 return fn | 12 # username for the desired realm, breaking OS X Keychain support, |
13 # GNOME keyring support, and all similar tools. | |
14 return opts.get('username', None), opts.get('password', '') | |
18 | 15 |
19 | 16 |
20 def version(ui): | 17 def version(ui): |
21 """Guess the version of hgsubversion. | 18 """Guess the version of hgsubversion. |
22 """ | 19 """ |
24 repo = hg.repository(ui, os.path.dirname(__file__)) | 21 repo = hg.repository(ui, os.path.dirname(__file__)) |
25 ver = repo.dirstate.parents()[0] | 22 ver = repo.dirstate.parents()[0] |
26 return node.hex(ver)[:12] | 23 return node.hex(ver)[:12] |
27 | 24 |
28 | 25 |
29 def generate_help(): | 26 def normalize_url(svnurl): |
30 ret = ['hg svn ...', '', | 27 if svnurl.startswith('svn+http'): |
31 'subcommands for Subversion integration', '', | 28 svnurl = svnurl[4:] |
32 'list of subcommands:', ''] | 29 url, revs, checkout = hg.parseurl(svnurl) |
30 url = url.rstrip('/') | |
31 if checkout: | |
32 url = '%s#%s' % (url, checkout) | |
33 return url | |
33 | 34 |
34 for name, func in sorted(svn_subcommands.items()): | |
35 short_description = (func.__doc__ or '').splitlines()[0] | |
36 ret.append(" %-10s %s" % (name, short_description)) | |
37 | |
38 return "\n".join(ret) + '\n' | |
39 | |
40 | |
41 def normalize_url(svn_url): | |
42 return svn_url.rstrip('/') | |
43 | |
44 | |
45 def wipe_all_files(hg_wc_path): | |
46 files = [f for f in os.listdir(hg_wc_path) if f != '.hg'] | |
47 for f in files: | |
48 f = os.path.join(hg_wc_path, f) | |
49 if os.path.isdir(f): | |
50 shutil.rmtree(f) | |
51 else: | |
52 os.remove(f) | |
53 | 35 |
54 REVMAP_FILE_VERSION = 1 | 36 REVMAP_FILE_VERSION = 1 |
55 def parse_revmap(revmap_filename): | 37 def parse_revmap(revmap_filename): |
56 revmap = {} | 38 revmap = {} |
57 f = open(revmap_filename) | 39 f = open(revmap_filename) |
92 sourcerev = repo[sourcerev] | 74 sourcerev = repo[sourcerev] |
93 while (not sourcerev.node() in reverse_map | 75 while (not sourcerev.node() in reverse_map |
94 and sourcerev.node() != node.nullid): | 76 and sourcerev.node() != node.nullid): |
95 outgoing_rev_hashes.append(sourcerev.node()) | 77 outgoing_rev_hashes.append(sourcerev.node()) |
96 sourcerev = sourcerev.parents() | 78 sourcerev = sourcerev.parents() |
97 assert len(sourcerev) == 1 | 79 if len(sourcerev) != 1: |
80 raise hgutil.Abort("Sorry, can't find svn parent of a merge revision.") | |
98 sourcerev = sourcerev[0] | 81 sourcerev = sourcerev[0] |
99 if sourcerev.node() != node.nullid: | 82 if sourcerev.node() != node.nullid: |
100 return outgoing_rev_hashes | 83 return outgoing_rev_hashes |
101 | 84 |
102 def build_extra(revnum, branch, uuid, subdir): | 85 def build_extra(revnum, branch, uuid, subdir): |
103 # TODO this needs to be fixed with the new revmap | |
104 extra = {} | 86 extra = {} |
105 branchpath = 'trunk' | 87 branchpath = 'trunk' |
106 if branch: | 88 if branch: |
107 extra['branch'] = branch | 89 extra['branch'] = branch |
108 branchpath = 'branches/%s' % branch | 90 branchpath = 'branches/%s' % branch |
131 | 113 |
132 ui.status(('[r%d] %s: %s' % (r.revnum, r.author, msg))[:80] + '\n') | 114 ui.status(('[r%d] %s: %s' % (r.revnum, r.author, msg))[:80] + '\n') |
133 | 115 |
134 def describe_commit(ui, h, b): | 116 def describe_commit(ui, h, b): |
135 ui.note(' committed to "%s" as %s\n' % ((b or 'default'), node.short(h))) | 117 ui.note(' committed to "%s" as %s\n' % ((b or 'default'), node.short(h))) |
118 | |
119 | |
120 def swap_out_encoding(new_encoding="UTF-8"): | |
121 """ Utility for mercurial incompatibility changes, can be removed after 1.3 | |
122 """ | |
123 from mercurial import encoding | |
124 old = encoding.encoding | |
125 encoding.encoding = new_encoding | |
126 return old |