equal
deleted
inserted
replaced
44 'debugstablesort', |
44 'debugstablesort', |
45 [ |
45 [ |
46 ('r', 'rev', [], 'heads to start from'), |
46 ('r', 'rev', [], 'heads to start from'), |
47 ('', 'method', 'branchpoint', "method used for sorting, one of: " |
47 ('', 'method', 'branchpoint', "method used for sorting, one of: " |
48 "branchpoint, basic-mergepoint and basic-headstart"), |
48 "branchpoint, basic-mergepoint and basic-headstart"), |
|
49 ('l', 'limit', '', 'number of revision display (default to all)') |
49 ] + commands.formatteropts, |
50 ] + commands.formatteropts, |
50 _('')) |
51 _('')) |
51 def debugstablesort(ui, repo, **opts): |
52 def debugstablesort(ui, repo, **opts): |
52 """display the ::REVS set topologically sorted in a stable way |
53 """display the ::REVS set topologically sorted in a stable way |
53 """ |
54 """ |
59 valid_method = ', '.join(sorted(_methodmap)) |
60 valid_method = ', '.join(sorted(_methodmap)) |
60 raise error.Abort('unknown sorting method: "%s"' % method, |
61 raise error.Abort('unknown sorting method: "%s"' % method, |
61 hint='pick one of: %s' % valid_method) |
62 hint='pick one of: %s' % valid_method) |
62 |
63 |
63 displayer = cmdutil.show_changeset(ui, repo, opts, buffered=True) |
64 displayer = cmdutil.show_changeset(ui, repo, opts, buffered=True) |
64 for r in sorting(repo, revs): |
65 kwargs = {} |
|
66 if opts['limit']: |
|
67 kwargs['limit'] = int(opts['limit']) |
|
68 for r in sorting(repo, revs, **kwargs): |
65 ctx = repo[r] |
69 ctx = repo[r] |
66 displayer.show(ctx) |
70 displayer.show(ctx) |
67 displayer.flush(ctx) |
71 displayer.flush(ctx) |
68 displayer.close() |
72 displayer.close() |
69 |
73 |
226 |
230 |
227 result.reverse() |
231 result.reverse() |
228 assert len(result) == len(resultset) |
232 assert len(result) == len(resultset) |
229 return result |
233 return result |
230 |
234 |
231 def stablesort_mergepoint_head_basic(repo, revs): |
235 def stablesort_mergepoint_head_basic(repo, revs, limit=None): |
232 heads = repo.revs('heads(%ld)', revs) |
236 heads = repo.revs('heads(%ld)', revs) |
233 if not heads: |
237 if not heads: |
234 return [] |
238 return [] |
235 elif 2 < len(heads): |
239 elif 2 < len(heads): |
236 raise error.Abort('cannot use head based merging, %d heads found' |
240 raise error.Abort('cannot use head based merging, %d heads found' |
237 % len(heads)) |
241 % len(heads)) |
238 head = heads.first() |
242 head = heads.first() |
239 return stablesort_mergepoint_bounded(repo, head, repo.revs('::%d', head)) |
243 revs = stablesort_mergepoint_bounded(repo, head, repo.revs('::%d', head)) |
|
244 if limit is None: |
|
245 return revs |
|
246 return revs[-limit:] |
240 |
247 |
241 _methodmap = { |
248 _methodmap = { |
242 'branchpoint': stablesort_branchpoint, |
249 'branchpoint': stablesort_branchpoint, |
243 'basic-mergepoint': stablesort_mergepoint_multirevs, |
250 'basic-mergepoint': stablesort_mergepoint_multirevs, |
244 'basic-headstart': stablesort_mergepoint_head_basic, |
251 'basic-headstart': stablesort_mergepoint_head_basic, |