Mercurial > evolve
annotate hgext/drophack.py @ 1404:848a04c078c7
evolve: add selector for trouble types
This patch adds command line flags to select the kind of troubles to solve.
Before this patch evolve was solving any kind of troubled. With this patch
evolve --all and evolve --rev can be configured to only solve only some type
of troubles (divergent, bumped or unstable). To give this choice to the
user we add three new command line flags to the evolve command: --bumped,
--divergent and --unstable.
author | Laurent Charignon <lcharignon@fb.com> |
---|---|
date | Tue, 16 Jun 2015 15:14:37 -0700 |
parents | 1f8428096078 |
children | ed63bf62ff02 |
rev | line source |
---|---|
790
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
1 # This software may be used and distributed according to the terms of the |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
2 # GNU General Public License version 2 or any later version. |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
3 '''This extension add a hacky command to drop changeset during review |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
4 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
5 This extension is intended as a temporary hack to allow Matt Mackall to use |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
6 evolve in the Mercurial review it self. You should probably not use it if your |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
7 name is not Matt Mackall. |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
8 ''' |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
9 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
10 import os |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
11 import time |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
12 import contextlib |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
13 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
14 from mercurial.i18n import _ |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
15 from mercurial import cmdutil |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
16 from mercurial import repair |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
17 from mercurial import scmutil |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
18 from mercurial import lock as lockmod |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
19 from mercurial import util |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
20 from mercurial import commands |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
21 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
22 cmdtable = {} |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
23 command = cmdutil.command(cmdtable) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
24 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
25 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
26 @contextlib.contextmanager |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
27 def timed(ui, caption): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
28 ostart = os.times() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
29 cstart = time.time() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
30 yield |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
31 cstop = time.time() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
32 ostop = os.times() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
33 wall = cstop - cstart |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
34 user = ostop[0] - ostart[0] |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
35 sys = ostop[1] - ostart[1] |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
36 comb = user + sys |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
37 ui.write("%s: wall %f comb %f user %f sys %f\n" |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
38 % (caption, wall, comb, user, sys)) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
39 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
40 def obsmarkerchainfrom(obsstore, nodes): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
41 """return all marker chain starting from node |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
42 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
43 Starting from mean "use as successors".""" |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
44 # XXX need something smarter for descendant of bumped changeset |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
45 seennodes = set(nodes) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
46 seenmarkers = set() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
47 pendingnodes = set(nodes) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
48 precursorsmarkers = obsstore.precursors |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
49 while pendingnodes: |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
50 current = pendingnodes.pop() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
51 new = set() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
52 for precmark in precursorsmarkers.get(current, ()): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
53 if precmark in seenmarkers: |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
54 continue |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
55 seenmarkers.add(precmark) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
56 new.add(precmark[0]) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
57 yield precmark |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
58 new -= seennodes |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
59 pendingnodes |= new |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
60 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
61 def stripmarker(ui, repo, markers): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
62 """remove <markers> from the repo obsstore |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
63 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
64 The old obsstore content is saved in a `obsstore.prestrip` file |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
65 """ |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
66 repo = repo.unfiltered() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
67 repo.destroying() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
68 oldmarkers = list(repo.obsstore._all) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
69 util.rename(repo.sjoin('obsstore'), |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
70 repo.join('obsstore.prestrip')) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
71 del repo.obsstore # drop the cache |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
72 newstore = repo.obsstore |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
73 assert not newstore # should be empty after rename |
812
60dd0c401034
drophack: major speedup to marker stripping
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
790
diff
changeset
|
74 newmarkers = [m for m in oldmarkers if m not in markers] |
790
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
75 tr = repo.transaction('drophack') |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
76 try: |
812
60dd0c401034
drophack: major speedup to marker stripping
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
790
diff
changeset
|
77 newstore.add(tr, newmarkers) |
790
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
78 tr.close() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
79 finally: |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
80 tr.release() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
81 repo.destroyed() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
82 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
83 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
84 @command('drop', [('r', 'rev', [], 'revision to update')], _('[-r] revs')) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
85 def cmddrop(ui, repo, *revs, **opts): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
86 """I'm hacky do not use me! |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
87 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
88 This command strip a changeset, its precursors and all obsolescence marker |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
89 associated to its chain. |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
90 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
91 There is no way to limit the extend of the purge yet. You may have to |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
92 repull from other source to get some changeset and obsolescence marker |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
93 back. |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
94 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
95 This intended for Matt Mackall usage only. do not use me. |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
96 """ |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
97 revs = list(revs) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
98 revs.extend(opts['rev']) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
99 if not revs: |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
100 revs = ['.'] |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
101 # get the changeset |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
102 revs = scmutil.revrange(repo, revs) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
103 if not revs: |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
104 ui.write_err('no revision to drop\n') |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
105 return 1 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
106 # lock from the beginning to prevent race |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
107 wlock = lock = None |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
108 try: |
1001
f7f4a1fac6c0
test: use `hg log` in the `getid` function
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
812
diff
changeset
|
109 wlock = repo.wlock() |
790
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
110 lock = repo.lock() |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
111 # check they have no children |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
112 if repo.revs('%ld and public()', revs): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
113 ui.write_err('cannot drop public revision') |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
114 return 1 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
115 if repo.revs('children(%ld) - %ld', revs, revs): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
116 ui.write_err('cannot drop revision with children') |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
117 return 1 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
118 if repo.revs('. and %ld', revs): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
119 newrevs = repo.revs('max(::. - %ld)', revs) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
120 if newrevs: |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
121 assert len(newrevs) == 1 |
1121
1a39b1b8e092
drophack: use `first` and `last` on smartset
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1001
diff
changeset
|
122 newrev = newrevs.first() |
790
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
123 else: |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
124 newrev = -1 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
125 commands.update(ui, repo, newrev) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
126 ui.status(_('working directory now at %s\n') % repo[newrev]) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
127 # get all markers and successors up to root |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
128 nodes = [repo[r].node() for r in revs] |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
129 with timed(ui, 'search obsmarker'): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
130 markers = set(obsmarkerchainfrom(repo.obsstore, nodes)) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
131 ui.write('%i obsmarkers found\n' % len(markers)) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
132 cl = repo.unfiltered().changelog |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
133 with timed(ui, 'search nodes'): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
134 allnodes = set(nodes) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
135 allnodes.update(m[0] for m in markers if cl.hasnode(m[0])) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
136 ui.write('%i nodes found\n' % len(allnodes)) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
137 cl = repo.changelog |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
138 visiblenodes = set(n for n in allnodes if cl.hasnode(n)) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
139 # check constraint again |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
140 if repo.revs('%ln and public()', visiblenodes): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
141 ui.write_err('cannot drop public revision') |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
142 return 1 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
143 if repo.revs('children(%ln) - %ln', visiblenodes, visiblenodes): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
144 ui.write_err('cannot drop revision with children') |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
145 return 1 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
146 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
147 if markers: |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
148 # strip them |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
149 with timed(ui, 'strip obsmarker'): |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
150 stripmarker(ui, repo, markers) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
151 # strip the changeset |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
152 with timed(ui, 'strip nodes'): |
1210
1f8428096078
drophack: fix to match upstream repair.strip
Durham Goode <durham@fb.com>
parents:
1121
diff
changeset
|
153 repair.strip(ui, repo, list(allnodes), backup="all", topic='drophack') |
790
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
154 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
155 finally: |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
156 lockmod.release(lock, wlock) |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
157 |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
158 # rewrite the whole file. |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
159 # print data. |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
160 # - time to compute the chain |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
161 # - time to strip the changeset |
5af309865040
drophack: add a new drop hack extension for Matt Mackall usage
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
diff
changeset
|
162 # - time to strip the obs marker. |