Mercurial > hgsubversion
annotate hgsubversion/svncommands.py @ 573:00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Tue, 23 Feb 2010 17:16:51 +0100 |
parents | 4a1a68713773 |
children | de384e4e0423 |
rev | line source |
---|---|
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
1 import os |
493
41c333473dda
try to deal with weirdly located branches in rebuildmeta (#118)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
474
diff
changeset
|
2 import posixpath |
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
3 import cPickle as pickle |
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
4 |
242
06130689a2c8
Move push into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
241
diff
changeset
|
5 from mercurial import hg |
06130689a2c8
Move push into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
241
diff
changeset
|
6 from mercurial import node |
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
7 from mercurial import util as hgutil |
573
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
8 from mercurial import error |
242
06130689a2c8
Move push into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
241
diff
changeset
|
9 |
448
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
10 import maps |
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
11 import svnwrap |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
12 import svnrepo |
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
13 import util |
242
06130689a2c8
Move push into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
241
diff
changeset
|
14 import utility_commands |
291
ba8e91a7c077
Add 'updateexternals' to synchronize externals with remote repo.
Patrick Mezard <pmezard@gmail.com>
parents:
274
diff
changeset
|
15 import svnexternals |
241
4950b18cf949
Move fetch_command.fetch_revisions() to svncommands.pull().
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
diff
changeset
|
16 |
395
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
17 def verify(ui, repo, *args, **opts): |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
18 '''verify current revision against Subversion repository |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
19 ''' |
573
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
20 |
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
21 if repo is None: |
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
22 raise error.RepoError("There is no Mercurial repository" |
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
23 " here (.hg not found)") |
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
24 |
441
de085126dbd4
svncommands: use rev instead of verifynode -- should not have to be a node
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
427
diff
changeset
|
25 ctx = repo[opts.get('rev', '.')] |
395
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
26 if 'close' in ctx.extra(): |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
27 ui.write('cannot verify closed branch') |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
28 return 0 |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
29 srev = ctx.extra().get('convert_revision') |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
30 if srev is None: |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
31 raise hgutil.Abort('revision %s not from SVN' % ctx) |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
32 |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
33 srev = int(srev.split('@')[1]) |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
34 ui.write('verifying %s against r%i\n' % (ctx, srev)) |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
35 |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
36 url = repo.ui.expandpath('default') |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
37 if args: |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
38 url = args[0] |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
39 svn = svnrepo.svnremoterepo(ui, url).svn |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
40 meta = repo.svnmeta(svn.uuid, svn.subdir) |
395
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
41 |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
42 btypes = {'default': 'trunk'} |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
43 if meta.layout == 'standard': |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
44 branchpath = btypes.get(ctx.branch(), 'branches/%s' % ctx.branch()) |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
45 else: |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
46 branchpath = '' |
395
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
47 svnfiles = set() |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
48 result = 0 |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
49 for fn, type in svn.list_files(posixpath.normpath(branchpath), srev): |
395
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
50 if type != 'f': |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
51 continue |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
52 svnfiles.add(fn) |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
53 fp = fn |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
54 if branchpath: |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
55 fp = branchpath + '/' + fn |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
56 data, mode = svn.get_file(posixpath.normpath(fp), srev) |
395
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
57 fctx = ctx[fn] |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
58 dmatch = fctx.data() == data |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
59 mmatch = fctx.flags() == mode |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
60 if not (dmatch and mmatch): |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
61 ui.write('difference in file %s' % fn) |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
62 result = 1 |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
63 |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
64 hgfiles = set(ctx) |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
65 hgfiles.discard('.hgtags') |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
66 hgfiles.discard('.hgsvnexternals') |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
67 if hgfiles != svnfiles: |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
68 missing = set(hgfiles).symmetric_difference(svnfiles) |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
69 ui.write('missing files: %s' % (', '.join(missing))) |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
70 result = 1 |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
71 |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
72 return result |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
73 |
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
74 |
573
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
75 def rebuildmeta(ui, repo, args, **opts): |
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
76 """rebuild hgsubversion metadata using values stored in revisions |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
77 """ |
573
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
78 |
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
79 if repo is None: |
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
80 raise error.RepoError("There is no Mercurial repository" |
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
81 " here (.hg not found)") |
00393e9abff8
svncommands: make repo optional (useful for things like listauthors)
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
566
diff
changeset
|
82 |
453
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
83 dest = None |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
84 if len(args) == 1: |
419
3ed71e63f64c
imported patch import-cleanup
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
414
diff
changeset
|
85 dest = args[0] |
453
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
86 elif len(args) > 1: |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
87 raise hgutil.Abort('rebuildmeta takes 1 or no arguments') |
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
88 uuid = None |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
89 url = repo.ui.expandpath(dest or 'default-push', dest or 'default') |
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
90 svn = svnrepo.svnremoterepo(ui, url).svn |
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
91 subdir = svn.subdir |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
92 svnmetadir = os.path.join(repo.path, 'svn') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
93 if not os.path.exists(svnmetadir): |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
94 os.makedirs(svnmetadir) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
95 |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
96 revmap = open(os.path.join(svnmetadir, 'rev_map'), 'w') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
97 revmap.write('1\n') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
98 last_rev = -1 |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
99 branchinfo = {} |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
100 noderevnums = {} |
458
974102998578
rebuildmeta: remove any existing tagmap file.
Augie Fackler <durin42@gmail.com>
parents:
453
diff
changeset
|
101 tagfile = os.path.join(svnmetadir, 'tagmap') |
974102998578
rebuildmeta: remove any existing tagmap file.
Augie Fackler <durin42@gmail.com>
parents:
453
diff
changeset
|
102 if os.path.exists(maps.TagMap.filepath(repo)): |
974102998578
rebuildmeta: remove any existing tagmap file.
Augie Fackler <durin42@gmail.com>
parents:
453
diff
changeset
|
103 os.unlink(maps.TagMap.filepath(repo)) |
448
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
104 tags = maps.TagMap(repo) |
452
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
448
diff
changeset
|
105 |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
106 layout = None |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
107 |
452
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
448
diff
changeset
|
108 skipped = set() |
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
448
diff
changeset
|
109 |
566
4a1a68713773
rebuildmeta: use ui.progress for better user feedback
Augie Fackler <durin42@gmail.com>
parents:
504
diff
changeset
|
110 numrevs = len(repo) |
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
111 for rev in repo: |
566
4a1a68713773
rebuildmeta: use ui.progress for better user feedback
Augie Fackler <durin42@gmail.com>
parents:
504
diff
changeset
|
112 ui.progress('rebuild', rev, total=numrevs) |
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
113 ctx = repo[rev] |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
114 convinfo = ctx.extra().get('convert_revision', None) |
371
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
115 if not convinfo: |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
116 continue |
448
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
117 if '.hgtags' in ctx.files(): |
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
118 parent = ctx.parents()[0] |
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
119 parentdata = '' |
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
120 if '.hgtags' in parent: |
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
121 parentdata = parent.filectx('.hgtags').data() |
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
122 newdata = ctx.filectx('.hgtags').data() |
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
123 for newtag in newdata[len(parentdata):-1].split('\n'): |
fbc7cf4fd701
tags: reinstate a tag map file in a better way
Augie Fackler <durin42@gmail.com>
parents:
447
diff
changeset
|
124 ha, tag = newtag.split(' ', 1) |
453
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
125 tagged = repo[ha].extra().get('convert_revision', None) |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
126 if tagged is None: |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
127 tagged = -1 |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
128 else: |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
129 tagged = int(tagged[40:].split('@')[1]) |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
130 # This is max(tagged rev, tagging rev) because if it is a normal |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
131 # tag, the tagging revision has the right rev number. However, if it |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
132 # was an edited tag, then the tagged revision has the correct revision |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
133 # number. |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
134 tagging = int(convinfo[40:].split('@')[1]) |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
135 tagrev = max(tagged, tagging) |
bb612e625be6
tags: handle copyfrom old versions of tags more correctly
Augie Fackler <durin42@gmail.com>
parents:
452
diff
changeset
|
136 tags[tag] = node.bin(ha), tagrev |
371
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
137 |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
138 # check that the conversion metadata matches expectations |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
139 assert convinfo.startswith('svn:') |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
140 revpath, revision = convinfo[40:].split('@') |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
141 if subdir and subdir[0] != '/': |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
142 subdir = '/' + subdir |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
143 if subdir and subdir[-1] == '/': |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
144 subdir = subdir[:-1] |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
145 assert revpath.startswith(subdir), ('That does not look like the ' |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
146 'right location in the repo.') |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
147 |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
148 if layout is None: |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
149 if (subdir or '/') == revpath: |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
150 layout = 'single' |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
151 else: |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
152 layout = 'standard' |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
153 f = open(os.path.join(svnmetadir, 'layout'), 'w') |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
154 f.write(layout) |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
155 f.close() |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
156 elif layout == 'single': |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
157 assert (subdir or '/') == revpath, ('Possible layout detection' |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
158 ' defect in replay') |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
159 |
371
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
160 # write repository uuid if required |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
161 if uuid is None: |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
162 uuid = convinfo[4:40] |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
163 assert uuid == svn.uuid, 'UUIDs did not match!' |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
164 uuidfile = open(os.path.join(svnmetadir, 'uuid'), 'w') |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
165 uuidfile.write(uuid) |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
166 uuidfile.close() |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
167 |
423
021bdbf391bb
put convert_revision in branch-closing csets
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
419
diff
changeset
|
168 # don't reflect closed branches |
452
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
448
diff
changeset
|
169 if (ctx.extra().get('close') and not ctx.files() or |
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
448
diff
changeset
|
170 ctx.parents()[0].node() in skipped): |
ae35c389cdef
tags: allow editing tags of closed branches without reopening the branch
Augie Fackler <durin42@gmail.com>
parents:
448
diff
changeset
|
171 skipped.add(ctx.node()) |
423
021bdbf391bb
put convert_revision in branch-closing csets
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
419
diff
changeset
|
172 continue |
021bdbf391bb
put convert_revision in branch-closing csets
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
419
diff
changeset
|
173 |
371
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
174 # find commitpath, write to revmap |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
175 commitpath = revpath[len(subdir)+1:] |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
176 if layout == 'standard': |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
177 if commitpath.startswith('branches/'): |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
178 commitpath = commitpath[len('branches/'):] |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
179 elif commitpath == 'trunk': |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
180 commitpath = '' |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
181 else: |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
182 if commitpath.startswith('tags/') and ctx.extra().get('close'): |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
183 continue |
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
184 commitpath = '../' + commitpath |
371
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
185 else: |
499
1fd3cfa47c5e
Support for single-directory clones.
Augie Fackler <durin42@gmail.com>
parents:
493
diff
changeset
|
186 commitpath = '' |
371
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
187 revmap.write('%s %s %s\n' % (revision, ctx.hex(), commitpath)) |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
188 |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
189 revision = int(revision) |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
190 noderevnums[ctx.node()] = revision |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
191 if revision > last_rev: |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
192 last_rev = revision |
375
af9fc01299b4
Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
371
diff
changeset
|
193 |
af9fc01299b4
Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
371
diff
changeset
|
194 # deal with branches |
423
021bdbf391bb
put convert_revision in branch-closing csets
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
419
diff
changeset
|
195 if ctx.extra().get('close'): |
375
af9fc01299b4
Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
371
diff
changeset
|
196 continue |
371
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
197 branch = ctx.branch() |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
198 if branch == 'default': |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
199 branch = None |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
200 if branch not in branchinfo: |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
201 parent = ctx.parents()[0] |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
202 if (parent.node() in noderevnums |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
203 and parent.branch() != ctx.branch()): |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
204 parentbranch = parent.branch() |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
205 if parentbranch == 'default': |
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
206 parentbranch = None |
371
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
207 else: |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
208 parentbranch = None |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
209 branchinfo[branch] = (parentbranch, |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
210 noderevnums.get(parent.node(), 0), |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
211 revision) |
474
63cb630d667d
tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents:
464
diff
changeset
|
212 droprev = lambda x: x.rsplit('@', 1)[0] |
375
af9fc01299b4
Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
371
diff
changeset
|
213 for cctx in ctx.children(): |
474
63cb630d667d
tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents:
464
diff
changeset
|
214 # check if a child of this change closes this branch |
63cb630d667d
tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents:
464
diff
changeset
|
215 # that's true if the close flag is set and the svn revision |
63cb630d667d
tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents:
464
diff
changeset
|
216 # path is the same. droprev removes the revnumber so we |
63cb630d667d
tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents:
464
diff
changeset
|
217 # can verify it is the same branch easily |
63cb630d667d
tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents:
464
diff
changeset
|
218 if (cctx.extra().get('close') |
63cb630d667d
tags: handle the most recent commit being an edit to an svn tag properly
Augie Fackler <durin42@gmail.com>
parents:
464
diff
changeset
|
219 and droprev(cctx.extra().get('convert_revision', '@')) == droprev(convinfo)): |
371
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
220 branchinfo.pop(branch, None) |
375
af9fc01299b4
Make branch closing more Mercurial-like.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
371
diff
changeset
|
221 break |
566
4a1a68713773
rebuildmeta: use ui.progress for better user feedback
Augie Fackler <durin42@gmail.com>
parents:
504
diff
changeset
|
222 ui.progress('rebuild', None, total=numrevs) |
371
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
223 |
b45671850969
Add some comments for rebuildmeta, simplify a little.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
342
diff
changeset
|
224 # save off branch info |
246
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
225 branchinfofile = open(os.path.join(svnmetadir, 'branch_info'), 'w') |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
226 pickle.dump(branchinfo, branchinfofile) |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
227 branchinfofile.close() |
074f27c68818
Move rebuildmeta into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
244
diff
changeset
|
228 |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
229 |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
230 def help(ui, args=None, **opts): |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
231 """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
|
232 """ |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
233 if args: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
234 subcommand = args[0] |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
235 if subcommand not in table: |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
236 candidates = [] |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
237 for c in table: |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
238 if c.startswith(subcommand): |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
239 candidates.append(c) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
240 if len(candidates) == 1: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
241 subcommand = candidates[0] |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
242 elif len(candidates) > 1: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
243 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
|
244 ' '.join(candidates)) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
245 return |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
246 doc = table[subcommand].__doc__ |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
247 if doc is None: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
248 doc = "No documentation available for %s." % subcommand |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
249 ui.status(doc.strip(), '\n') |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
250 return |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
251 ui.status(_helpgen()) |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
252 |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
253 |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
254 def update(ui, args, repo, clean=False, **opts): |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
255 """update to a specified Subversion revision number |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
256 """ |
446
cbd230043379
svncommands: get update working again
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
441
diff
changeset
|
257 |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
258 assert len(args) == 1 |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
259 rev = int(args[0]) |
464
0f7095f53ca3
Extend svnrepos with SubversionRepo and SVNMeta
Patrick Mezard <pmezard@gmail.com>
parents:
463
diff
changeset
|
260 meta = repo.svnmeta() |
446
cbd230043379
svncommands: get update working again
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
441
diff
changeset
|
261 |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
262 answers = [] |
446
cbd230043379
svncommands: get update working again
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
441
diff
changeset
|
263 for k, v in meta.revmap.iteritems(): |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
264 if k[0] == rev: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
265 answers.append((v, k[1])) |
446
cbd230043379
svncommands: get update working again
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
441
diff
changeset
|
266 |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
267 if len(answers) == 1: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
268 if clean: |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
269 return hg.clean(repo, answers[0][0]) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
270 return hg.update(repo, answers[0][0]) |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
271 elif len(answers) == 0: |
446
cbd230043379
svncommands: get update working again
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
441
diff
changeset
|
272 ui.status('revision %s did not produce an hg revision\n' % rev) |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
273 return 1 |
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
274 else: |
446
cbd230043379
svncommands: get update working again
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
441
diff
changeset
|
275 ui.status('ambiguous revision!\n') |
cbd230043379
svncommands: get update working again
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
441
diff
changeset
|
276 revs = ['%s on %s' % (node.hex(a[0]), a[1]) for a in answers] + [''] |
cbd230043379
svncommands: get update working again
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
441
diff
changeset
|
277 ui.status('\n'.join(revs)) |
247
1272e87546ed
Move help, update into svncommands.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
246
diff
changeset
|
278 return 1 |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
279 |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
280 |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
281 table = { |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
282 'update': update, |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
283 'help': help, |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
284 'rebuildmeta': rebuildmeta, |
291
ba8e91a7c077
Add 'updateexternals' to synchronize externals with remote repo.
Patrick Mezard <pmezard@gmail.com>
parents:
274
diff
changeset
|
285 'updateexternals': svnexternals.updateexternals, |
395
636e9bf5d49c
svncommands: add verify command
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
384
diff
changeset
|
286 'verify': verify, |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
287 } |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
288 |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
289 table.update(utility_commands.table) |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
290 |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
291 |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
292 def _helpgen(): |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
293 ret = ['hg svn ...', '', |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
294 'subcommands for Subversion integration', '', |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
295 'list of subcommands:', ''] |
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
296 for name, func in sorted(table.items()): |
504
bc117ea4c95a
do not assume that doc-strings are present.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
499
diff
changeset
|
297 if func.__doc__: |
bc117ea4c95a
do not assume that doc-strings are present.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
499
diff
changeset
|
298 short_description = func.__doc__.splitlines()[0] |
bc117ea4c95a
do not assume that doc-strings are present.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
499
diff
changeset
|
299 else: |
bc117ea4c95a
do not assume that doc-strings are present.
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
499
diff
changeset
|
300 short_description = '' |
253
c3d5c4ae9c7c
Work with simple command table instead of decorators.
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
247
diff
changeset
|
301 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
|
302 return '\n'.join(ret) + '\n' |