Mercurial > hgsubversion
annotate utility_commands.py @ 257:ffccf0080e54
Move wrappers for hg commands to their own module.
| author | Augie Fackler <durin42@gmail.com> |
|---|---|
| date | Fri, 10 Apr 2009 22:38:29 -0500 |
| parents | 7932d098cb5f |
| children | d978192f0d63 |
| rev | line source |
|---|---|
|
199
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
1 import os |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
2 |
|
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
3 from mercurial import node |
|
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
236
diff
changeset
|
4 from mercurial import util as hgutil |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
5 from hgext import rebase as hgrebase |
|
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
6 |
|
196
77812f98e250
Add a naive hg svn version command that works as long as hgsubversion is run from a checkout.
Augie Fackler <durin42@gmail.com>
parents:
185
diff
changeset
|
7 import svnwrap |
|
254
9ba31af57e4b
Move utility_commands.find_wc_parent_rev() to cmdutil.parentrev().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
253
diff
changeset
|
8 import cmdutil |
|
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
9 import util |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
10 import hg_delta_editor |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
11 |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
12 def url(ui, repo, hg_repo_path, **opts): |
|
185
57355b0e7bd1
Creating patch for documention messages.
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
181
diff
changeset
|
13 """show the location (URL) of the Subversion repository |
|
115
ed42f6e5705a
Clean up help text, document subcommands.
Luke Opperman <luke@loppear.com>
parents:
101
diff
changeset
|
14 """ |
|
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
15 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
16 ui_=ui) |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
17 ui.status(hge.url, '\n') |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
18 |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
19 |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
20 def genignore(ui, repo, hg_repo_path, force=False, **opts): |
|
199
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
21 """generate .hgignore from svn:ignore properties. |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
22 """ |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
23 ignpath = os.path.join(hg_repo_path, '.hgignore') |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
24 if not force and os.path.exists(ignpath): |
|
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
236
diff
changeset
|
25 raise hgutil.Abort('not overwriting existing .hgignore, try --force?') |
|
199
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
26 ignorefile = open(ignpath, 'w') |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
27 ignorefile.write('.hgignore\nsyntax:glob\n') |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
28 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
29 ui_=ui) |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
30 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
31 hge.revmap.iterkeys())) |
|
254
9ba31af57e4b
Move utility_commands.find_wc_parent_rev() to cmdutil.parentrev().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
253
diff
changeset
|
32 parent = cmdutil.parentrev(ui, repo, hge, svn_commit_hashes) |
|
199
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
33 r, br = svn_commit_hashes[parent.node()] |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
34 if br == None: |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
35 branchpath = 'trunk' |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
36 else: |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
37 branchpath = 'branches/%s' % br |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
38 url = hge.url |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
39 if url[-1] == '/': |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
40 url = url[:-1] |
|
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
236
diff
changeset
|
41 user = opts.get('username', hgutil.getuser()) |
|
234
33e885f5f86a
Add --username and --password options to all commands
Daniel Tang <dytang@cs.purdue.edu>
parents:
230
diff
changeset
|
42 passwd = opts.get('passwd', '') |
|
33e885f5f86a
Add --username and --password options to all commands
Daniel Tang <dytang@cs.purdue.edu>
parents:
230
diff
changeset
|
43 svn = svnwrap.SubversionRepo(url, user, passwd) |
|
199
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
44 dirs = [''] + [d[0] for d in svn.list_files(branchpath, r) if d[1] == 'd'] |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
45 for dir in dirs: |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
46 props = svn.list_props('%s/%s/' % (branchpath,dir), r) |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
47 if 'svn:ignore' in props: |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
48 lines = props['svn:ignore'].strip().split('\n') |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
49 for prop in lines: |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
50 if dir: |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
51 ignorefile.write('%s/%s\n' % (dir, prop)) |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
52 else: |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
53 ignorefile.write('%s\n' % prop) |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
54 |
|
91db8fc049b0
Add a genignore utility command that generates an hgignore file by scraping svn:ignore properties.
Augie Fackler <durin42@gmail.com>
parents:
196
diff
changeset
|
55 |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
56 def info(ui, repo, hg_repo_path, **opts): |
|
185
57355b0e7bd1
Creating patch for documention messages.
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
181
diff
changeset
|
57 """show Subversion details similar to `svn info' |
|
115
ed42f6e5705a
Clean up help text, document subcommands.
Luke Opperman <luke@loppear.com>
parents:
101
diff
changeset
|
58 """ |
|
64
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
59 hge = hg_delta_editor.HgChangeReceiver(hg_repo_path, |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
60 ui_=ui) |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
61 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
62 hge.revmap.iterkeys())) |
|
254
9ba31af57e4b
Move utility_commands.find_wc_parent_rev() to cmdutil.parentrev().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
253
diff
changeset
|
63 parent = cmdutil.parentrev(ui, repo, hge, svn_commit_hashes) |
|
219
794f473b9b49
info: stop failing if the rev is not a child of an svn rev.
Augie Fackler <durin42@gmail.com>
parents:
212
diff
changeset
|
64 pn = parent.node() |
|
794f473b9b49
info: stop failing if the rev is not a child of an svn rev.
Augie Fackler <durin42@gmail.com>
parents:
212
diff
changeset
|
65 if pn not in svn_commit_hashes: |
|
794f473b9b49
info: stop failing if the rev is not a child of an svn rev.
Augie Fackler <durin42@gmail.com>
parents:
212
diff
changeset
|
66 ui.status('Not a child of an svn revision.\n') |
|
794f473b9b49
info: stop failing if the rev is not a child of an svn rev.
Augie Fackler <durin42@gmail.com>
parents:
212
diff
changeset
|
67 return 0 |
|
794f473b9b49
info: stop failing if the rev is not a child of an svn rev.
Augie Fackler <durin42@gmail.com>
parents:
212
diff
changeset
|
68 r, br = svn_commit_hashes[pn] |
|
212
a421aca2b0f5
info: produce canonical URLs more of the time.
Augie Fackler <durin42@gmail.com>
parents:
199
diff
changeset
|
69 subdir = parent.extra()['convert_revision'][40:].split('@')[0] |
|
64
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
70 if br == None: |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
71 branchpath = '/trunk' |
|
212
a421aca2b0f5
info: produce canonical URLs more of the time.
Augie Fackler <durin42@gmail.com>
parents:
199
diff
changeset
|
72 elif br.startswith('../'): |
|
a421aca2b0f5
info: produce canonical URLs more of the time.
Augie Fackler <durin42@gmail.com>
parents:
199
diff
changeset
|
73 branchpath = '/%s' % br[3:] |
|
a421aca2b0f5
info: produce canonical URLs more of the time.
Augie Fackler <durin42@gmail.com>
parents:
199
diff
changeset
|
74 subdir = subdir.replace('branches/../', '') |
|
64
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
75 else: |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
76 branchpath = '/branches/%s' % br |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
77 url = hge.url |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
78 if url[-1] == '/': |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
79 url = url[:-1] |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
80 url = '%s%s' % (url, branchpath) |
|
226
bb2b78f9f4ce
Use a reverse lookup in authormap to determine the author for 'hg svn info'.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
212
diff
changeset
|
81 author = hge.svnauthorforauthor(parent.user()) |
|
160
7a5a0b5c8e34
info: Actually determine and show the repo root.
Augie Fackler <durin42@gmail.com>
parents:
157
diff
changeset
|
82 # cleverly figure out repo root w/o actually contacting the server |
|
7a5a0b5c8e34
info: Actually determine and show the repo root.
Augie Fackler <durin42@gmail.com>
parents:
157
diff
changeset
|
83 reporoot = url[:len(url)-len(subdir)] |
|
64
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
84 ui.status('''URL: %(url)s |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
85 Repository Root: %(reporoot)s |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
86 Repository UUID: %(uuid)s |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
87 Revision: %(revision)s |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
88 Node Kind: directory |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
89 Last Changed Author: %(author)s |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
90 Last Changed Rev: %(revision)s |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
91 Last Changed Date: %(date)s\n''' % |
|
160
7a5a0b5c8e34
info: Actually determine and show the repo root.
Augie Fackler <durin42@gmail.com>
parents:
157
diff
changeset
|
92 {'reporoot': reporoot, |
|
64
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
93 'uuid': open(hge.uuid_file).read(), |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
94 'url': url, |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
95 'author': author, |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
96 'revision': r, |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
97 # TODO I'd like to format this to the user's local TZ if possible |
|
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
236
diff
changeset
|
98 'date': hgutil.datestr(parent.date(), |
|
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
236
diff
changeset
|
99 '%Y-%m-%d %H:%M:%S %1%2 (%a, %d %b %Y)') |
|
64
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
100 }) |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
101 |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
102 |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
103 def rebase(ui, repo, extrafn=None, sourcerev=None, **opts): |
|
185
57355b0e7bd1
Creating patch for documention messages.
Dan Villiom Podlaski Christiansen <danchr@cs.au.dk>
parents:
181
diff
changeset
|
104 """rebase current unpushed revisions onto the Subversion head |
|
64
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
105 |
|
08be8ee73551
Add an hg svn info subsubcommand that prints out what you would expect from svn info.
Augie Fackler <durin42@gmail.com>
parents:
31
diff
changeset
|
106 This moves a line of development from making its own head to the top of |
|
31
05800c403321
Fix up the rebase docstring to be less vague.
Augie Fackler <durin42@gmail.com>
parents:
0
diff
changeset
|
107 Subversion development, linearizing the changes. In order to make sure you |
|
05800c403321
Fix up the rebase docstring to be less vague.
Augie Fackler <durin42@gmail.com>
parents:
0
diff
changeset
|
108 rebase on top of the current top of Subversion work, you should probably run |
|
05800c403321
Fix up the rebase docstring to be less vague.
Augie Fackler <durin42@gmail.com>
parents:
0
diff
changeset
|
109 'hg svn pull' before running this. |
|
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
110 """ |
|
150
58ae90a65f41
push: Improved the rebasing logic for push so that it doesn't break with
Augie Fackler <durin42@gmail.com>
parents:
149
diff
changeset
|
111 if extrafn is None: |
|
58ae90a65f41
push: Improved the rebasing logic for push so that it doesn't break with
Augie Fackler <durin42@gmail.com>
parents:
149
diff
changeset
|
112 def extrafn2(ctx, extra): |
|
58ae90a65f41
push: Improved the rebasing logic for push so that it doesn't break with
Augie Fackler <durin42@gmail.com>
parents:
149
diff
changeset
|
113 """defined here so we can add things easily. |
|
58ae90a65f41
push: Improved the rebasing logic for push so that it doesn't break with
Augie Fackler <durin42@gmail.com>
parents:
149
diff
changeset
|
114 """ |
|
58ae90a65f41
push: Improved the rebasing logic for push so that it doesn't break with
Augie Fackler <durin42@gmail.com>
parents:
149
diff
changeset
|
115 extra['branch'] = ctx.branch() |
|
58ae90a65f41
push: Improved the rebasing logic for push so that it doesn't break with
Augie Fackler <durin42@gmail.com>
parents:
149
diff
changeset
|
116 extrafn = extrafn2 |
|
152
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
150
diff
changeset
|
117 if sourcerev is None: |
|
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
150
diff
changeset
|
118 sourcerev = repo.parents()[0].node() |
|
230
4c3bad24f950
rebase: cleanup slightly.
Augie Fackler <durin42@gmail.com>
parents:
228
diff
changeset
|
119 hge = hg_delta_editor.HgChangeReceiver(repo=repo) |
|
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
120 svn_commit_hashes = dict(zip(hge.revmap.itervalues(), |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
121 hge.revmap.iterkeys())) |
|
152
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
150
diff
changeset
|
122 o_r = util.outgoing_revisions(ui, repo, hge, svn_commit_hashes, sourcerev=sourcerev) |
|
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
123 if not o_r: |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
124 ui.status('Nothing to rebase!\n') |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
125 return 0 |
|
152
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
150
diff
changeset
|
126 if len(repo[sourcerev].children()): |
|
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
127 ui.status('Refusing to rebase non-head commit like a coward\n') |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
128 return 0 |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
129 parent_rev = repo[o_r[-1]].parents()[0] |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
130 target_rev = parent_rev |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
131 p_n = parent_rev.node() |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
132 exhausted_choices = False |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
133 while target_rev.children() and not exhausted_choices: |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
134 for c in target_rev.children(): |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
135 exhausted_choices = True |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
136 n = c.node() |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
137 if (n in svn_commit_hashes and |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
138 svn_commit_hashes[n][1] == svn_commit_hashes[p_n][1]): |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
139 target_rev = c |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
140 exhausted_choices = False |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
141 break |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
142 if parent_rev == target_rev: |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
143 ui.status('Already up to date!\n') |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
144 return 0 |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
145 # TODO this is really hacky, there must be a more direct way |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
146 return hgrebase.rebase(ui, repo, dest=node.hex(target_rev.node()), |
|
152
1fde85a10f9e
push: Fix the bad implementation that required modifying the dirstate to push.
Augie Fackler <durin42@gmail.com>
parents:
150
diff
changeset
|
147 base=node.hex(sourcerev), |
|
149
04800fda7af5
rebase: preserve local branch names.
Augie Fackler <durin42@gmail.com>
parents:
115
diff
changeset
|
148 extrafn=extrafn) |
|
0
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
149 |
|
f2636cfed115
Initial import of hgsubversion into a public repository.
Augie Fackler <durin42@gmail.com>
parents:
diff
changeset
|
150 |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
151 def listauthors(ui, args, authors=None, **opts): |
|
236
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
152 """list all authors in a Subversion repository |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
153 """ |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
154 if not len(args): |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
155 ui.status('No repository specified.\n') |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
156 return |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
157 svn = svnwrap.SubversionRepo(util.normalize_url(args[0])) |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
158 author_set = set() |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
159 for rev in svn.revisions(): |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
160 author_set.add(str(rev.author)) # So None becomes 'None' |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
161 if authors: |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
162 authorfile = open(authors, 'w') |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
163 authorfile.write('%s=\n' % '=\n'.join(sorted(author_set))) |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
164 authorfile.close() |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
165 else: |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
166 ui.status('%s\n' % '\n'.join(sorted(author_set))) |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
167 |
|
c34abd2448b7
Issue #60: Add a svn sub-command to list all authors in a Subversion repository
Daniel Tang <dytang@cs.purdue.edu>
parents:
234
diff
changeset
|
168 |
|
196
77812f98e250
Add a naive hg svn version command that works as long as hgsubversion is run from a checkout.
Augie Fackler <durin42@gmail.com>
parents:
185
diff
changeset
|
169 def version(ui, **opts): |
|
77812f98e250
Add a naive hg svn version command that works as long as hgsubversion is run from a checkout.
Augie Fackler <durin42@gmail.com>
parents:
185
diff
changeset
|
170 """Show current version of hg and hgsubversion. |
|
77812f98e250
Add a naive hg svn version command that works as long as hgsubversion is run from a checkout.
Augie Fackler <durin42@gmail.com>
parents:
185
diff
changeset
|
171 """ |
|
250
79349fd04836
utils: standardizing imported name to hgutil, our_util to util
Daniel Tang <dytang@cs.purdue.edu>
parents:
236
diff
changeset
|
172 ui.status('hg: %s\n' % hgutil.version()) |
|
196
77812f98e250
Add a naive hg svn version command that works as long as hgsubversion is run from a checkout.
Augie Fackler <durin42@gmail.com>
parents:
185
diff
changeset
|
173 ui.status('svn bindings: %s\n' % svnwrap.version()) |
|
77812f98e250
Add a naive hg svn version command that works as long as hgsubversion is run from a checkout.
Augie Fackler <durin42@gmail.com>
parents:
185
diff
changeset
|
174 ui.status('hgsubversion: %s\n' % util.version(ui)) |
|
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
175 |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
176 |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
177 nourl = ['version', 'listauthors'] |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
178 table = { |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
179 'url': url, |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
180 'genignore': genignore, |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
181 'info': info, |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
182 'listauthors': listauthors, |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
183 'version': version, |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
184 'rebase': rebase, |
|
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
250
diff
changeset
|
185 } |
