Mercurial > hgsubversion
comparison utility_commands.py @ 152:1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Mon, 22 Dec 2008 21:22:11 -0600 |
parents | 58ae90a65f41 |
children | 91541523ea5c |
comparison
equal
deleted
inserted
replaced
151:2decec74ad0c | 152:1fde85a10f9e |
---|---|
21 """ | 21 """ |
22 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 22 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
23 ui_=ui) | 23 ui_=ui) |
24 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), | 24 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
25 hge.revmap.iterkeys())) | 25 hge.revmap.iterkeys())) |
26 o_r = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes) | 26 workingctx = repo.parents()[0] |
27 ha = repo.parents()[0] | 27 o_r = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes, workingctx.node()) |
28 if o_r: | 28 if o_r: |
29 ha = repo[o_r[-1]].parents()[0] | 29 workingctx = repo[o_r[-1]].parents()[0] |
30 r, br = svn_commit_hashes[ha.node()] | 30 r, br = svn_commit_hashes[workingctx.node()] |
31 if br == None: | 31 if br == None: |
32 branchpath = '/trunk' | 32 branchpath = '/trunk' |
33 else: | 33 else: |
34 branchpath = '/branches/%s' % br | 34 branchpath = '/branches/%s' % br |
35 url = hge.url | 35 url = hge.url |
36 if url[-1] == '/': | 36 if url[-1] == '/': |
37 url = url[:-1] | 37 url = url[:-1] |
38 url = '%s%s' % (url, branchpath) | 38 url = '%s%s' % (url, branchpath) |
39 author = '@'.join(ha.user().split('@')[:-1]) | 39 author = '@'.join(workingctx.user().split('@')[:-1]) |
40 ui.status('''URL: %(url)s | 40 ui.status('''URL: %(url)s |
41 Repository Root: %(reporoot)s | 41 Repository Root: %(reporoot)s |
42 Repository UUID: %(uuid)s | 42 Repository UUID: %(uuid)s |
43 Revision: %(revision)s | 43 Revision: %(revision)s |
44 Node Kind: directory | 44 Node Kind: directory |
49 'uuid': open(hge.uuid_file).read(), | 49 'uuid': open(hge.uuid_file).read(), |
50 'url': url, | 50 'url': url, |
51 'author': author, | 51 'author': author, |
52 'revision': r, | 52 'revision': r, |
53 # TODO I'd like to format this to the user's local TZ if possible | 53 # TODO I'd like to format this to the user's local TZ if possible |
54 'date': mutil.datestr(ha.date(), | 54 'date': mutil.datestr(workingctx.date(), |
55 '%Y-%m-%d %H:%M:%S %1%2 (%a, %d %b %Y)') | 55 '%Y-%m-%d %H:%M:%S %1%2 (%a, %d %b %Y)') |
56 }) | 56 }) |
57 | 57 |
58 | 58 |
59 @util.register_subcommand('parent') | 59 @util.register_subcommand('parent') |
63 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 63 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
64 ui_=ui) | 64 ui_=ui) |
65 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), | 65 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
66 hge.revmap.iterkeys())) | 66 hge.revmap.iterkeys())) |
67 ha = repo.parents()[0] | 67 ha = repo.parents()[0] |
68 o_r = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes) | 68 o_r = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes, ha.node()) |
69 if o_r: | 69 if o_r: |
70 ha = repo[o_r[-1]].parents()[0] | 70 ha = repo[o_r[-1]].parents()[0] |
71 if ha.node() != node.nullid: | 71 if ha.node() != node.nullid: |
72 r, br = svn_commit_hashes[ha.node()] | 72 r, br = svn_commit_hashes[ha.node()] |
73 ui.status('Working copy parent revision is %s: r%s on %s\n' % | 73 ui.status('Working copy parent revision is %s: r%s on %s\n' % |
76 ui.status('Working copy seems to have no parent svn revision.\n') | 76 ui.status('Working copy seems to have no parent svn revision.\n') |
77 return 0 | 77 return 0 |
78 | 78 |
79 | 79 |
80 @util.register_subcommand('rebase') | 80 @util.register_subcommand('rebase') |
81 def rebase_commits(ui, repo, hg_repo_path, extrafn=None, **opts): | 81 def rebase_commits(ui, repo, hg_repo_path, extrafn=None, sourcerev=None, **opts): |
82 """Rebases current unpushed revisions onto Subversion head | 82 """Rebases current unpushed revisions onto Subversion head |
83 | 83 |
84 This moves a line of development from making its own head to the top of | 84 This moves a line of development from making its own head to the top of |
85 Subversion development, linearizing the changes. In order to make sure you | 85 Subversion development, linearizing the changes. In order to make sure you |
86 rebase on top of the current top of Subversion work, you should probably run | 86 rebase on top of the current top of Subversion work, you should probably run |
90 def extrafn2(ctx, extra): | 90 def extrafn2(ctx, extra): |
91 """defined here so we can add things easily. | 91 """defined here so we can add things easily. |
92 """ | 92 """ |
93 extra['branch'] = ctx.branch() | 93 extra['branch'] = ctx.branch() |
94 extrafn = extrafn2 | 94 extrafn = extrafn2 |
95 if sourcerev is None: | |
96 sourcerev = repo.parents()[0].node() | |
95 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 97 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
96 ui_=ui) | 98 ui_=ui) |
97 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), | 99 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
98 hge.revmap.iterkeys())) | 100 hge.revmap.iterkeys())) |
99 o_r = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes) | 101 o_r = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes, sourcerev=sourcerev) |
100 if not o_r: | 102 if not o_r: |
101 ui.status('Nothing to rebase!\n') | 103 ui.status('Nothing to rebase!\n') |
102 return 0 | 104 return 0 |
103 if len(repo.parents()[0].children()): | 105 if len(repo[sourcerev].children()): |
104 ui.status('Refusing to rebase non-head commit like a coward\n') | 106 ui.status('Refusing to rebase non-head commit like a coward\n') |
105 return 0 | 107 return 0 |
106 parent_rev = repo[o_r[-1]].parents()[0] | 108 parent_rev = repo[o_r[-1]].parents()[0] |
107 target_rev = parent_rev | 109 target_rev = parent_rev |
108 p_n = parent_rev.node() | 110 p_n = parent_rev.node() |
119 if parent_rev == target_rev: | 121 if parent_rev == target_rev: |
120 ui.status('Already up to date!\n') | 122 ui.status('Already up to date!\n') |
121 return 0 | 123 return 0 |
122 # TODO this is really hacky, there must be a more direct way | 124 # TODO this is really hacky, there must be a more direct way |
123 return rebase.rebase(ui, repo, dest=node.hex(target_rev.node()), | 125 return rebase.rebase(ui, repo, dest=node.hex(target_rev.node()), |
124 base=node.hex(repo.parents()[0].node()), | 126 base=node.hex(sourcerev), |
125 extrafn=extrafn) | 127 extrafn=extrafn) |
126 | 128 |
127 | 129 |
128 @util.register_subcommand('outgoing') | 130 @util.register_subcommand('outgoing') |
129 def show_outgoing_to_svn(ui, repo, hg_repo_path, **opts): | 131 def show_outgoing_to_svn(ui, repo, hg_repo_path, **opts): |
131 """ | 133 """ |
132 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, | 134 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
133 ui_=ui) | 135 ui_=ui) |
134 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), | 136 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
135 hge.revmap.iterkeys())) | 137 hge.revmap.iterkeys())) |
136 o_r = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes) | 138 o_r = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes, repo.parents()[0]) |
137 if not (o_r and len(o_r)): | 139 if not (o_r and len(o_r)): |
138 ui.status('No outgoing changes found.\n') | 140 ui.status('No outgoing changes found.\n') |
139 return 0 | 141 return 0 |
140 displayer = cmdutil.show_changeset(ui, repo, opts, buffered=False) | 142 displayer = cmdutil.show_changeset(ui, repo, opts, buffered=False) |
141 for node in reversed(o_r): | 143 for node in reversed(o_r): |