author | Pulkit Goyal <7895pulkit@gmail.com> |
Fri, 19 Jan 2018 17:29:48 +0530 | |
changeset 3467 | 41ce24cf288d |
parent 3466 | 0a8e3130ad00 |
child 3468 | a3052824101d |
permissions | -rw-r--r-- |
81
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
1 |
# Copyright 2011 Peter Arrenbrecht <peter.arrenbrecht@gmail.com> |
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
2 |
# Logilab SA <contact@logilab.fr> |
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
3 |
# Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
519
9825c7da5b54
ensure all file have a copyright notice
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
517
diff
changeset
|
4 |
# Patrick Mezard <patrick@mezard.eu> |
81
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
5 |
# |
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
6 |
# This software may be used and distributed according to the terms of the |
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
7 |
# GNU General Public License version 2 or any later version. |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
8 |
"""extends Mercurial feature related to Changeset Evolution |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
9 |
|
2292
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
10 |
This extension: |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
11 |
|
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
12 |
- provides several commands to mutate history and deal with resulting issues, |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
13 |
- enable the changeset-evolution feature for Mercurial, |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
14 |
- improves some aspect of the early implementation in Mercurial core, |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
15 |
|
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
16 |
Note that a version dedicated to server usage only (no local working copy) is |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
17 |
available as 'evolve.serveronly'. |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
18 |
|
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
19 |
While many feature related to changeset evolution are directly handled by core |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
20 |
this extensions contains significant additions recommended to any user of |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
21 |
changeset evolution. |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
22 |
|
2678
da2b3e5e4f69
docs: some fixes to the help text
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2667
diff
changeset
|
23 |
With the extension various evolution events will display warning (new unstable |
2292
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
24 |
changesets, obsolete working copy parent, improved error when accessing hidden |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
25 |
revision, etc). |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
26 |
|
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
27 |
In addition, the extension contains better discovery protocol for obsolescence |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
28 |
markers. This means less obs-markers will have to be pushed and pulled around, |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
29 |
speeding up such operation. |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
30 |
|
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
31 |
Some improvement and bug fixes available in newer version of Mercurial are also |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
32 |
backported to older version of Mercurial by this extension. Some older |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
33 |
experimental protocol are also supported for a longer time in the extensions to |
f026e85bd0b2
evolve: update extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2290
diff
changeset
|
34 |
help people transitioning. (The extensions is currently compatible down to |
3141
f9faa5b6f937
compat: mark version 4.1 as the minimum version required
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3124
diff
changeset
|
35 |
Mercurial version 4.1). |
2311
26d638e419df
auto-push: move config help in the extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2294
diff
changeset
|
36 |
|
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2895
diff
changeset
|
37 |
New Config:: |
2311
26d638e419df
auto-push: move config help in the extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2294
diff
changeset
|
38 |
|
26d638e419df
auto-push: move config help in the extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2294
diff
changeset
|
39 |
[experimental] |
26d638e419df
auto-push: move config help in the extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2294
diff
changeset
|
40 |
# Set to control the behavior when pushing draft changesets to a publishing |
26d638e419df
auto-push: move config help in the extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2294
diff
changeset
|
41 |
# repository. Possible value: |
26d638e419df
auto-push: move config help in the extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2294
diff
changeset
|
42 |
# * ignore: current core behavior (default) |
26d638e419df
auto-push: move config help in the extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2294
diff
changeset
|
43 |
# * warn: proceed with the push, but issue a warning |
26d638e419df
auto-push: move config help in the extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2294
diff
changeset
|
44 |
# * abort: abort the push |
26d638e419df
auto-push: move config help in the extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2294
diff
changeset
|
45 |
auto-publish = ignore |
26d638e419df
auto-push: move config help in the extension help
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2294
diff
changeset
|
46 |
|
2521
29fc90b0e59c
obsdiscovery: add an option to disable all obsdiscovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2504
diff
changeset
|
47 |
# For some large repository with few markers, the current for obsolescence |
29fc90b0e59c
obsdiscovery: add an option to disable all obsdiscovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2504
diff
changeset
|
48 |
# markers discovery can get in the way. You can disable it with the |
29fc90b0e59c
obsdiscovery: add an option to disable all obsdiscovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2504
diff
changeset
|
49 |
# configuration option below. This means all pushes and pulls will |
29fc90b0e59c
obsdiscovery: add an option to disable all obsdiscovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2504
diff
changeset
|
50 |
# re-exchange all markers every time. |
29fc90b0e59c
obsdiscovery: add an option to disable all obsdiscovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2504
diff
changeset
|
51 |
evolution.obsdiscovery = yes |
29fc90b0e59c
obsdiscovery: add an option to disable all obsdiscovery
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2504
diff
changeset
|
52 |
|
2460
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
53 |
Obsolescence Markers Discovery Experiment |
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
54 |
========================================= |
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
55 |
|
2550
d8a48234efad
obshashrange: basic proof reading of the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2549
diff
changeset
|
56 |
We are experimenting with a new protocol to discover common markers between |
d8a48234efad
obshashrange: basic proof reading of the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2549
diff
changeset
|
57 |
local and remote repositories. This experiment is still at an early stage but |
d8a48234efad
obshashrange: basic proof reading of the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2549
diff
changeset
|
58 |
is already raising better results than the previous version (when usable). |
d8a48234efad
obshashrange: basic proof reading of the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2549
diff
changeset
|
59 |
|
d8a48234efad
obshashrange: basic proof reading of the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2549
diff
changeset
|
60 |
"Large" repositories (hundreds of thousand) are currently unsupported. Some key |
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3198
diff
changeset
|
61 |
algorithm has a naive implementation with too aggressive caching, creating |
2460
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
62 |
memory consumption issue (this will get fixed). |
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
63 |
|
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3198
diff
changeset
|
64 |
Medium sized repositories works fine, but be prepared for a noticeable initial |
2460
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
65 |
cache filling. for the Mercurial repository, this is around 20 seconds |
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
66 |
|
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
67 |
The following config control the experiment:: |
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
68 |
|
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
69 |
[experimental] |
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
70 |
|
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
71 |
# enable new discovery protocol |
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
72 |
# (needed on both client and server) |
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
73 |
obshashrange = yes |
64cc0b059073
obshashrange: document the experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2443
diff
changeset
|
74 |
|
3368
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3365
diff
changeset
|
75 |
# control cache warming at the end of transaction |
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3365
diff
changeset
|
76 |
# yes: warm all caches at the end of each transaction, |
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3365
diff
changeset
|
77 |
# off: warm no caches at the end of transaction, |
3369
c7fbb79cd366
caches: switch to 'auto' warming by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3368
diff
changeset
|
78 |
# auto: warm cache at the end of server side transaction (default). |
3368
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3365
diff
changeset
|
79 |
obshashrange.warm-cache = 'auto' |
2475
84982b441e82
documentation: recomment using blackbox with the obshashrange experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2465
diff
changeset
|
80 |
|
3368
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3365
diff
changeset
|
81 |
The initial cache warming might be a bit slow. To make sure it is build you |
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3365
diff
changeset
|
82 |
can run one of the following commands in your repository:: |
2715
61e73c8fe169
obshashrange: add cache warming instruction to the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2714
diff
changeset
|
83 |
|
3368
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3365
diff
changeset
|
84 |
$ hg debugupdatecache # mercurial 4.3 and above |
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3365
diff
changeset
|
85 |
$ hg debugobshashrange --rev 'head() # mercurial 4.2 and below |
2715
61e73c8fe169
obshashrange: add cache warming instruction to the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2714
diff
changeset
|
86 |
|
2678
da2b3e5e4f69
docs: some fixes to the help text
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2667
diff
changeset
|
87 |
It is recommended to enable the blackbox extension. It gathers useful data about |
2687
4a02781d90ce
evolve: fix documentation formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2678
diff
changeset
|
88 |
the experiment. It is shipped with Mercurial so no extra install is needed:: |
2475
84982b441e82
documentation: recomment using blackbox with the obshashrange experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2465
diff
changeset
|
89 |
|
84982b441e82
documentation: recomment using blackbox with the obshashrange experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2465
diff
changeset
|
90 |
[extensions] |
84982b441e82
documentation: recomment using blackbox with the obshashrange experiment
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2465
diff
changeset
|
91 |
blackbox = |
2493
3ee8e9a12f41
doc: add documentation about effectflag experiment
Boris Feld <boris.feld@octobus.net>
parents:
2488
diff
changeset
|
92 |
|
2550
d8a48234efad
obshashrange: basic proof reading of the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2549
diff
changeset
|
93 |
Finally some extra options are available to help tame the experimental |
2687
4a02781d90ce
evolve: fix documentation formatting
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2678
diff
changeset
|
94 |
implementation of some of the algorithms:: |
2504
d95006fe4dd0
stablerange: use last recently used caching for revisions associated to ranges
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2493
diff
changeset
|
95 |
|
d95006fe4dd0
stablerange: use last recently used caching for revisions associated to ranges
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2493
diff
changeset
|
96 |
[experimental] |
d95006fe4dd0
stablerange: use last recently used caching for revisions associated to ranges
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2493
diff
changeset
|
97 |
# restrict cache size to reduce memory consumption |
d95006fe4dd0
stablerange: use last recently used caching for revisions associated to ranges
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2493
diff
changeset
|
98 |
obshashrange.lru-size = 2000 # default is 2000 |
d95006fe4dd0
stablerange: use last recently used caching for revisions associated to ranges
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2493
diff
changeset
|
99 |
|
2551
ecd47c63b6de
obshashrange: add an option to protect from accidental activation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2550
diff
changeset
|
100 |
# automatically disable obshashrange related computation and capabilities |
ecd47c63b6de
obshashrange: add an option to protect from accidental activation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2550
diff
changeset
|
101 |
# if the repository has more than N revisions. This is meant to help large |
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3198
diff
changeset
|
102 |
# server deployment to enable the feature on smaller repositories while |
2551
ecd47c63b6de
obshashrange: add an option to protect from accidental activation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2550
diff
changeset
|
103 |
# ensuring no large repository will get affected. |
ecd47c63b6de
obshashrange: add an option to protect from accidental activation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2550
diff
changeset
|
104 |
obshashrange.max-revs = 100000 # default is None |
ecd47c63b6de
obshashrange: add an option to protect from accidental activation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2550
diff
changeset
|
105 |
|
2714
7eff426f999b
evolve: explain how to disable markers discovery in the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2699
diff
changeset
|
106 |
For very large repositories. it is currently recommended to disable obsmarkers |
7eff426f999b
evolve: explain how to disable markers discovery in the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2699
diff
changeset
|
107 |
discovery (Make sure you follow release announcement to know when you can turn |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2895
diff
changeset
|
108 |
it back on):: |
2714
7eff426f999b
evolve: explain how to disable markers discovery in the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2699
diff
changeset
|
109 |
|
7eff426f999b
evolve: explain how to disable markers discovery in the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2699
diff
changeset
|
110 |
[experimental] |
7eff426f999b
evolve: explain how to disable markers discovery in the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2699
diff
changeset
|
111 |
evolution.obsdiscovery = no |
7eff426f999b
evolve: explain how to disable markers discovery in the documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2699
diff
changeset
|
112 |
|
2493
3ee8e9a12f41
doc: add documentation about effectflag experiment
Boris Feld <boris.feld@octobus.net>
parents:
2488
diff
changeset
|
113 |
Effect Flag Experiment |
3ee8e9a12f41
doc: add documentation about effectflag experiment
Boris Feld <boris.feld@octobus.net>
parents:
2488
diff
changeset
|
114 |
====================== |
3ee8e9a12f41
doc: add documentation about effectflag experiment
Boris Feld <boris.feld@octobus.net>
parents:
2488
diff
changeset
|
115 |
|
2689
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
116 |
Evolve also records what changed between two evolutions of a changeset. For |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
117 |
example, having this information is helpful to understand what changed between |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
118 |
an obsolete changeset and its tipmost successors. |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
119 |
|
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
120 |
Evolve currently records: |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
121 |
|
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
122 |
- Meta changes, user, date |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
123 |
- Tree movement, branch and parent, did the changeset moved? |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
124 |
- Description, was the commit description edited |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
125 |
- Diff, was there apart from potential diff change due to rebase a change in the diff? |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
126 |
|
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
127 |
These flags are lightweight and can be combined, so it's easy to see if 4 |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
128 |
evolutions of the same changeset has just updated the description or if the |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
129 |
content changed and you need to review again the diff. |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
130 |
|
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
131 |
The effect flag recording is enabled by default in Evolve 6.4.0 so you have |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
132 |
nothing to do to enjoy it. Now every new evolution that you create will have |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
133 |
the effect flag attached. |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
134 |
|
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
135 |
The following config control the effect flag recording:: |
2493
3ee8e9a12f41
doc: add documentation about effectflag experiment
Boris Feld <boris.feld@octobus.net>
parents:
2488
diff
changeset
|
136 |
|
3ee8e9a12f41
doc: add documentation about effectflag experiment
Boris Feld <boris.feld@octobus.net>
parents:
2488
diff
changeset
|
137 |
[experimental] |
2689
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
138 |
# uncomment to deactivate the registration of effect flags in obs markers |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
139 |
# evolution.effect-flags = false |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
140 |
|
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
141 |
You can display the effect flags with the command obslog, so if you have a |
2923
8c2d3c474fc6
doc: make paragraphs before example code end with "::" for reST syntax
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2895
diff
changeset
|
142 |
changeset and you update only the message, you will see:: |
2689
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
143 |
|
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
144 |
$ hg commit -m "WIP |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
145 |
$ hg commit -m "A better commit message!" |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
146 |
$ hg obslog . |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
147 |
@ 8e9045855628 (3133) A better commit message! |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
148 |
| |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
149 |
x 7863a5bb5763 (3132) WIP |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
150 |
rewritten(description) by Boris Feld <boris.feld@octobus.net> (Fri Jun 02 12:00:24 2017 +0200) as 8e9045855628 |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
151 |
|
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
152 |
Servers does not need to activate the effect flag recording. Effect flags that |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
153 |
you create will not cause interference with other clients or servers without |
9e84b407fde5
doc: update effect flag documentation
Boris Feld <boris.feld@octobus.net>
parents:
2687
diff
changeset
|
154 |
the effect flag recording. |
2556
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
155 |
|
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
156 |
Templates |
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
157 |
========= |
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
158 |
|
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
159 |
Evolve ship several templates that you can use to have a better visibility |
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
160 |
about your obs history: |
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
161 |
|
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
162 |
- precursors, for each obsolete changeset show the closest visible |
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
163 |
precursors. |
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3198
diff
changeset
|
164 |
- successors, for each obsolete changeset show the closest visible |
2556
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
165 |
successors. It is useful when your working directory is obsolete to see |
2678
da2b3e5e4f69
docs: some fixes to the help text
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2667
diff
changeset
|
166 |
what are its successors. This information can also be retrieved with the |
2556
d5b97b5dec5b
doc: document the evolve templates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2551
diff
changeset
|
167 |
obslog command and the --all option. |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
168 |
- obsfate, for each obsolete changeset display a line summarizing what |
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3198
diff
changeset
|
169 |
changed between the changeset and its successors. Depending on the |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
170 |
verbosity level (-q and -v) it display the changeset successors, the users |
2678
da2b3e5e4f69
docs: some fixes to the help text
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2667
diff
changeset
|
171 |
that created the obsmarkers and the date range of these changes. |
2591
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
172 |
|
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
173 |
The template itself is not complex, the data are basically a list of |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
174 |
successortset. Each successorset is a dict with these fields: |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
175 |
|
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
176 |
- "verb", how did the revision changed, pruned or rewritten for the moment |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
177 |
- "users" a sorted list of users that have create obs marker between current |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
178 |
changeset and one of its successor |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
179 |
- "min_date" the tiniest date of the first obs marker between current |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
180 |
changeset and one of its successor |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
181 |
- "max_date" the biggest date between current changeset and one of its |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
182 |
successor |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
183 |
- "successors" a sorted list of locally know successors node ids |
1991935fb603
obsfate: add a new obsfate template
Boris Feld <boris.feld@octobus.net>
parents:
2586
diff
changeset
|
184 |
- "markers" the raw list of changesets. |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
185 |
""" |
2049
b81d3775006b
evolve: move extension metadata in their own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2048
diff
changeset
|
186 |
|
1414
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
187 |
evolutionhelptext = """ |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
188 |
Obsolescence markers make it possible to mark changesets that have been |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
189 |
deleted or superset in a new version of the changeset. |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
190 |
|
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
191 |
Unlike the previous way of handling such changes, by stripping the old |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
192 |
changesets from the repository, obsolescence markers can be propagated |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
193 |
between repositories. This allows for a safe and simple way of exchanging |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
194 |
mutable history and altering it after the fact. Changeset phases are |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
195 |
respected, such that only draft and secret changesets can be altered (see |
1709
989ed2f30d41
help: fix evolution hg phases reference
timeless@gmail.com
parents:
1702
diff
changeset
|
196 |
:hg:`help phases` for details). |
1414
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
197 |
|
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
198 |
Obsolescence is tracked using "obsolete markers", a piece of metadata |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
199 |
tracking which changesets have been made obsolete, potential successors for |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
200 |
a given changeset, the moment the changeset was marked as obsolete, and the |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
201 |
user who performed the rewriting operation. The markers are stored |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
202 |
separately from standard changeset data can be exchanged without any of the |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
203 |
precursor changesets, preventing unnecessary exchange of obsolescence data. |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
204 |
|
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
205 |
The complete set of obsolescence markers describes a history of changeset |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
206 |
modifications that is orthogonal to the repository history of file |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
207 |
modifications. This changeset history allows for detection and automatic |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
208 |
resolution of edge cases arising from multiple users rewriting the same part |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
209 |
of history concurrently. |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
210 |
|
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
211 |
Current feature status |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
212 |
====================== |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
213 |
|
1710 | 214 |
This feature is still in development. If you see this help, you have enabled an |
1414
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
215 |
extension that turned this feature on. |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
216 |
|
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
217 |
Obsolescence markers will be exchanged between repositories that explicitly |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
218 |
assert support for the obsolescence feature (this can currently only be done |
2782
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
219 |
via an extension). |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
220 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
221 |
Instability |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
222 |
========== |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
223 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
224 |
(note: the vocabulary is in the process of being updated) |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
225 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
226 |
Rewriting changesets might introduce instability (currently 'trouble'). |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
227 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
228 |
There are two main kinds of instability: orphaning and diverging. |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
229 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
230 |
Orphans are changesets left behind when their ancestors are rewritten, (currently: 'unstable'). |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
231 |
Divergence has two variants: |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
232 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
233 |
* Content-divergence occurs when independent rewrites of the same changesets |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
234 |
lead to different results. (currently: 'divergent') |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
235 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
236 |
* Phase-divergence occurs when the old (obsolete) version of a changeset |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
237 |
becomes public. (currently: 'bumped') |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
238 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
239 |
If it possible to prevent local creation of orphans by using the following config:: |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
240 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
241 |
[experimental] |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
242 |
evolution=createmarkers,allnewcommands,exchange |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
243 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
244 |
You can also enable that option explicitly:: |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
245 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
246 |
[experimental] |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
247 |
evolution=createmarkers,allnewcommands,allowunstable,exchange |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
248 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
249 |
or simply:: |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
250 |
|
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
251 |
[experimental] |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
252 |
evolution=all |
2bd0b0996cfb
evolve: document the various instability/troubles
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2772
diff
changeset
|
253 |
""".strip() |
1414
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
254 |
|
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
255 |
import sys |
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
256 |
import collections |
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
257 |
import struct |
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
258 |
|
1678 | 259 |
try: |
260 |
import StringIO as io |
|
261 |
StringIO = io.StringIO |
|
262 |
except ImportError: |
|
263 |
import io |
|
264 |
StringIO = io.StringIO |
|
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
265 |
|
481
4e0f1aae8d24
evolve: touch command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
477
diff
changeset
|
266 |
|
1825
377d94d6c889
evolve: proactively detect bad version early
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1824
diff
changeset
|
267 |
try: |
377d94d6c889
evolve: proactively detect bad version early
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1824
diff
changeset
|
268 |
from mercurial import registrar |
377d94d6c889
evolve: proactively detect bad version early
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1824
diff
changeset
|
269 |
registrar.templatekeyword # new in hg-3.8 |
377d94d6c889
evolve: proactively detect bad version early
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1824
diff
changeset
|
270 |
except ImportError: |
2049
b81d3775006b
evolve: move extension metadata in their own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2048
diff
changeset
|
271 |
from . import metadata |
2895
e4ee0b6170e9
compat: make it more clear that evolve need Mercurial >= minversion
Philippe Pepiot <phil@philpep.org>
parents:
2859
diff
changeset
|
272 |
raise ImportError('evolve needs Mercurial version %s or above' % |
2049
b81d3775006b
evolve: move extension metadata in their own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2048
diff
changeset
|
273 |
min(metadata.testedwith.split())) |
1825
377d94d6c889
evolve: proactively detect bad version early
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1824
diff
changeset
|
274 |
|
670
97ce1f801309
evolve: drop unused import
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
663
diff
changeset
|
275 |
import mercurial |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
276 |
from mercurial import util |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
277 |
|
1834
f23a97d14895
compat: drop compat for older wireproto implementation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1833
diff
changeset
|
278 |
from mercurial import obsolete |
f23a97d14895
compat: drop compat for older wireproto implementation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1833
diff
changeset
|
279 |
if not obsolete._enabled: |
f23a97d14895
compat: drop compat for older wireproto implementation
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1833
diff
changeset
|
280 |
obsolete._enabled = True |
617
469befc27b26
detect incompatibility with future mercurial 2.5
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
616
diff
changeset
|
281 |
|
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
282 |
from mercurial import ( |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
283 |
bookmarks as bookmarksmod, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
284 |
cmdutil, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
285 |
commands, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
286 |
context, |
2465
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
287 |
dirstate, |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
288 |
error, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
289 |
extensions, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
290 |
help, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
291 |
hg, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
292 |
lock as lockmod, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
293 |
node, |
2524
d912380ec685
evolve: fix import order
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2521
diff
changeset
|
294 |
obsolete, |
1823
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
295 |
patch, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
296 |
phases, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
297 |
revset, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
298 |
scmutil, |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
299 |
) |
649d7a574c3f
evolve: cleanup imports
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1822
diff
changeset
|
300 |
|
2762
610581a2fb74
commands: move split to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2761
diff
changeset
|
301 |
from mercurial.commands import mergetoolopts |
81
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
302 |
from mercurial.i18n import _ |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
303 |
from mercurial.node import nullid |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
304 |
|
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
305 |
from . import ( |
2245
a14e05e4bb20
checkheads: import our own copy of the checkheads code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2123
diff
changeset
|
306 |
checkheads, |
2525
5adb8bdb935e
compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
2524
diff
changeset
|
307 |
compat, |
2123
cf7b4ab31f0c
split: move the debugcommand into a dedicated module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2122
diff
changeset
|
308 |
debugcmd, |
2772
394b836e475b
commands: rewrite the 'evocommands' module to 'cmdrewrite'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2766
diff
changeset
|
309 |
cmdrewrite, |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
310 |
state, |
3461
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3460
diff
changeset
|
311 |
evolvecmd, |
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
312 |
exthelper, |
2049
b81d3775006b
evolve: move extension metadata in their own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2048
diff
changeset
|
313 |
metadata, |
2294
75996eafab43
perf: adds some cache key helper on the obsstore class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2293
diff
changeset
|
314 |
obscache, |
75996eafab43
perf: adds some cache key helper on the obsstore class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2293
diff
changeset
|
315 |
obsexchange, |
2524
d912380ec685
evolve: fix import order
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2521
diff
changeset
|
316 |
obshistory, |
2756
f4dd6e6d4c73
rewriteutil: create a rewriteutil module to host utility function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2755
diff
changeset
|
317 |
rewriteutil, |
2286
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2275
diff
changeset
|
318 |
safeguard, |
2524
d912380ec685
evolve: fix import order
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2521
diff
changeset
|
319 |
templatekw, |
2047
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2044
diff
changeset
|
320 |
utility, |
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
321 |
) |
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
322 |
|
3373
3ff0da45d4c7
evolve: use compat.TROUBLES to show troubles in user interface
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3369
diff
changeset
|
323 |
TROUBLES = compat.TROUBLES |
2049
b81d3775006b
evolve: move extension metadata in their own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2048
diff
changeset
|
324 |
__version__ = metadata.__version__ |
b81d3775006b
evolve: move extension metadata in their own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2048
diff
changeset
|
325 |
testedwith = metadata.testedwith |
b81d3775006b
evolve: move extension metadata in their own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2048
diff
changeset
|
326 |
minimumhgversion = metadata.minimumhgversion |
b81d3775006b
evolve: move extension metadata in their own module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2048
diff
changeset
|
327 |
buglink = metadata.buglink |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1836
diff
changeset
|
328 |
|
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
329 |
# Flags for enabling optional parts of evolve |
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
330 |
commandopt = 'allnewcommands' |
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
331 |
|
2047
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2044
diff
changeset
|
332 |
obsexcmsg = utility.obsexcmsg |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2762
diff
changeset
|
333 |
shorttemplate = utility.shorttemplate |
1838
6942750831bb
serveronly: deduplicate code with the main evolve extension
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1836
diff
changeset
|
334 |
|
2404
c07f752137f4
label: rename 'evolve.short_node' to 'evolve.node'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2403
diff
changeset
|
335 |
colortable = {'evolve.node': 'yellow', |
2337
c0ed4adf965e
obshistory: add some color
Boris Feld <boris.feld@octobus.net>
parents:
2336
diff
changeset
|
336 |
'evolve.user': 'green', |
c0ed4adf965e
obshistory: add some color
Boris Feld <boris.feld@octobus.net>
parents:
2336
diff
changeset
|
337 |
'evolve.rev': 'blue', |
c0ed4adf965e
obshistory: add some color
Boris Feld <boris.feld@octobus.net>
parents:
2336
diff
changeset
|
338 |
'evolve.short_description': '', |
c0ed4adf965e
obshistory: add some color
Boris Feld <boris.feld@octobus.net>
parents:
2336
diff
changeset
|
339 |
'evolve.date': 'cyan', |
c0ed4adf965e
obshistory: add some color
Boris Feld <boris.feld@octobus.net>
parents:
2336
diff
changeset
|
340 |
'evolve.current_rev': 'bold', |
c0ed4adf965e
obshistory: add some color
Boris Feld <boris.feld@octobus.net>
parents:
2336
diff
changeset
|
341 |
'evolve.verb': '', |
c0ed4adf965e
obshistory: add some color
Boris Feld <boris.feld@octobus.net>
parents:
2336
diff
changeset
|
342 |
} |
c0ed4adf965e
obshistory: add some color
Boris Feld <boris.feld@octobus.net>
parents:
2336
diff
changeset
|
343 |
|
820
a9a66143e2ec
exchange: actually use _pushkeyescape fallback
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
819
diff
changeset
|
344 |
_pack = struct.pack |
1597
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
345 |
_unpack = struct.unpack |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
346 |
|
1296
23819e1d61fd
evolve: add -i flag to amend command
Laurent Charignon <lcharignon@fb.com>
parents:
1281
diff
changeset
|
347 |
aliases, entry = cmdutil.findcmd('commit', commands.table) |
2772
394b836e475b
commands: rewrite the 'evocommands' module to 'cmdrewrite'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2766
diff
changeset
|
348 |
commitopts3 = cmdrewrite.commitopts3 |
394b836e475b
commands: rewrite the 'evocommands' module to 'cmdrewrite'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2766
diff
changeset
|
349 |
interactiveopt = cmdrewrite.interactiveopt |
2759
3137185b1bfe
rewriteutil: move the 'rewrite' function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2758
diff
changeset
|
350 |
rewrite = rewriteutil.rewrite |
2724
e6bc6eaa17c5
amend: extract into a 'evolve.evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2716
diff
changeset
|
351 |
|
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
352 |
# This extension contains the following code |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
353 |
# |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
354 |
# - Extension Helper code |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
355 |
# - Obsolescence cache |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
356 |
# - ... |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
357 |
# - Older format compat |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
358 |
|
2041
3b6550261614
exthelper: extract into its own submodule
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2032
diff
changeset
|
359 |
eh = exthelper.exthelper() |
2123
cf7b4ab31f0c
split: move the debugcommand into a dedicated module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2122
diff
changeset
|
360 |
eh.merge(debugcmd.eh) |
2053
f3765c4a352a
exchange: rename the module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2051
diff
changeset
|
361 |
eh.merge(obsexchange.eh) |
2245
a14e05e4bb20
checkheads: import our own copy of the checkheads code
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2123
diff
changeset
|
362 |
eh.merge(checkheads.eh) |
2286
a4c5744a7b93
safeguard: add an option to disable automatic publishing
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2275
diff
changeset
|
363 |
eh.merge(safeguard.eh) |
2294
75996eafab43
perf: adds some cache key helper on the obsstore class
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2293
diff
changeset
|
364 |
eh.merge(obscache.eh) |
2415
89a5dabbb43d
obshistory: move the command into the obshistory module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2414
diff
changeset
|
365 |
eh.merge(obshistory.eh) |
2485
e6ecd35e99ec
refactor: extract templates into a new file
Boris Feld <boris.feld@octobus.net>
parents:
2481
diff
changeset
|
366 |
eh.merge(templatekw.eh) |
2525
5adb8bdb935e
compatibility: backport mercurial 176d1a0ce385
Boris Feld <boris.feld@octobus.net>
parents:
2524
diff
changeset
|
367 |
eh.merge(compat.eh) |
2772
394b836e475b
commands: rewrite the 'evocommands' module to 'cmdrewrite'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2766
diff
changeset
|
368 |
eh.merge(cmdrewrite.eh) |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
369 |
uisetup = eh.final_uisetup |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
370 |
extsetup = eh.final_extsetup |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
371 |
reposetup = eh.final_reposetup |
2043
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
372 |
cmdtable = eh.cmdtable |
3080
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
3074
diff
changeset
|
373 |
configtable = eh.configtable |
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
3074
diff
changeset
|
374 |
|
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
3074
diff
changeset
|
375 |
# Configuration |
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
3074
diff
changeset
|
376 |
eh.configitem('experimental', 'evolutioncommands') |
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
3074
diff
changeset
|
377 |
eh.configitem('experimental', 'evolution.allnewcommands') |
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
3074
diff
changeset
|
378 |
eh.configitem('experimental', 'prunestrip') |
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
3074
diff
changeset
|
379 |
|
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
3074
diff
changeset
|
380 |
# hack around because we need an actual default there |
3093
9c04bd928056
compat: conditionally access config item
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3080
diff
changeset
|
381 |
if configtable: |
9c04bd928056
compat: conditionally access config item
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3080
diff
changeset
|
382 |
configtable['experimental']['evolution.allnewcommands'].default = None |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
383 |
|
2465
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
384 |
# pre hg 4.0 compat |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
385 |
|
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
386 |
if not util.safehasattr(dirstate.dirstate, 'parentchange'): |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
387 |
import contextlib |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
388 |
|
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
389 |
@contextlib.contextmanager |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
390 |
def parentchange(self): |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
391 |
'''Context manager for handling dirstate parents. |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
392 |
|
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
393 |
If an exception occurs in the scope of the context manager, |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
394 |
the incoherent dirstate won't be written when wlock is |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
395 |
released. |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
396 |
''' |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
397 |
self._parentwriters += 1 |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
398 |
yield |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
399 |
# Typically we want the "undo" step of a context manager in a |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
400 |
# finally block so it happens even when an exception |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
401 |
# occurs. In this case, however, we only want to decrement |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
402 |
# parentwriters if the code in the with statement exits |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
403 |
# normally, so we don't have a try/finally here on purpose. |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
404 |
self._parentwriters -= 1 |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
405 |
dirstate.dirstate.parentchange = parentchange |
479646a3873a
deprecation: fix dirstate.beginparentchange deprecation warning
Boris Feld <boris.feld@octobus.net>
parents:
2460
diff
changeset
|
406 |
|
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
407 |
##################################################################### |
1213
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
408 |
### Option configuration ### |
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
409 |
##################################################################### |
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
410 |
|
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
411 |
@eh.reposetup # must be the first of its kin. |
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
412 |
def _configureoptions(ui, repo): |
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
413 |
# If no capabilities are specified, enable everything. |
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
414 |
# This is so existing evolve users don't need to change their config. |
3185
0c64d0242ac2
config: clarify that config is only enabled on the repository is it setup for
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3155
diff
changeset
|
415 |
evolveopts = repo.ui.configlist('experimental', 'evolution') |
1213
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
416 |
if not evolveopts: |
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
417 |
evolveopts = ['all'] |
3185
0c64d0242ac2
config: clarify that config is only enabled on the repository is it setup for
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3155
diff
changeset
|
418 |
repo.ui.setconfig('experimental', 'evolution', evolveopts, 'evolve') |
3149
79a926b557f1
compat: drop support for older exchange protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3141
diff
changeset
|
419 |
if obsolete.isenabled(repo, 'exchange'): |
79a926b557f1
compat: drop support for older exchange protocol
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3141
diff
changeset
|
420 |
repo.ui.setconfig('server', 'bundle1', False) |
1213
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
421 |
|
3365
911c91ce686f
caches: record 'desc' attribute on transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3298
diff
changeset
|
422 |
class trdescrepo(repo.__class__): |
911c91ce686f
caches: record 'desc' attribute on transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3298
diff
changeset
|
423 |
|
911c91ce686f
caches: record 'desc' attribute on transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3298
diff
changeset
|
424 |
def transaction(self, desc, *args, **kwargs): |
911c91ce686f
caches: record 'desc' attribute on transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3298
diff
changeset
|
425 |
tr = super(trdescrepo, self).transaction(desc, *args, **kwargs) |
911c91ce686f
caches: record 'desc' attribute on transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3298
diff
changeset
|
426 |
tr.desc = desc |
911c91ce686f
caches: record 'desc' attribute on transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3298
diff
changeset
|
427 |
return tr |
911c91ce686f
caches: record 'desc' attribute on transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3298
diff
changeset
|
428 |
|
911c91ce686f
caches: record 'desc' attribute on transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3298
diff
changeset
|
429 |
repo.__class__ = trdescrepo |
911c91ce686f
caches: record 'desc' attribute on transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3298
diff
changeset
|
430 |
|
1226
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
431 |
@eh.uisetup |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
432 |
def _configurecmdoptions(ui): |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
433 |
# Unregister evolve commands if the command capability is not specified. |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
434 |
# |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
435 |
# This must be in the same function as the option configuration above to |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
436 |
# guarantee it happens after the above configuration, but before the |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
437 |
# extsetup functions. |
3080
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
3074
diff
changeset
|
438 |
evolvecommands = ui.configlist('experimental', 'evolutioncommands', []) |
1226
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
439 |
evolveopts = ui.configlist('experimental', 'evolution') |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
440 |
if evolveopts and (commandopt not in evolveopts and |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
441 |
'all' not in evolveopts): |
1441
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
442 |
# We build whitelist containing the commands we want to enable |
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
443 |
whitelist = set() |
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
444 |
for cmd in evolvecommands: |
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
445 |
matchingevolvecommands = [e for e in cmdtable.keys() if cmd in e] |
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
446 |
if not matchingevolvecommands: |
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
447 |
raise error.Abort(_('unknown command: %s') % cmd) |
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
448 |
elif len(matchingevolvecommands) > 1: |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
449 |
msg = _('ambiguous command specification: "%s" matches %r') |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
450 |
raise error.Abort(msg % (cmd, matchingevolvecommands)) |
1441
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
451 |
else: |
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
452 |
whitelist.add(matchingevolvecommands[0]) |
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
453 |
for disabledcmd in set(cmdtable) - whitelist: |
a4abe588d77f
evolve: mechanism to load some commands selectively
Laurent Charignon <lcharignon@fb.com>
parents:
1440
diff
changeset
|
454 |
del cmdtable[disabledcmd] |
1213
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
455 |
|
7118996bdf43
config: enable all obsolete options
Durham Goode <durham@fb.com>
parents:
1212
diff
changeset
|
456 |
##################################################################### |
805
66c02a2e8e2f
prune: wrap mercurial internal to add parent information in prune marker
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
804
diff
changeset
|
457 |
### experimental behavior ### |
66c02a2e8e2f
prune: wrap mercurial internal to add parent information in prune marker
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
804
diff
changeset
|
458 |
##################################################################### |
66c02a2e8e2f
prune: wrap mercurial internal to add parent information in prune marker
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
804
diff
changeset
|
459 |
|
590
02cadd3dc9f4
evolve: adapt to 2.4 code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
589
diff
changeset
|
460 |
getrevs = obsolete.getrevs |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
461 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
462 |
##################################################################### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
463 |
### Additional Utilities ### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
464 |
##################################################################### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
465 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
466 |
# This section contains a lot of small utility function and method |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
467 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
468 |
# - Function to create markers |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
469 |
# - useful alias pstatus and pdiff (should probably go in evolve) |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
470 |
# - "troubles" method on changectx |
1661 | 471 |
# - function to travel through the obsolescence graph |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
472 |
# - function to find useful changeset to stabilize |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
473 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
474 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
475 |
### Useful alias |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
476 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
477 |
@eh.uisetup |
2953
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
478 |
def setupparentcommand(ui): |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
479 |
|
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
480 |
_alias, statuscmd = cmdutil.findcmd('status', commands.table) |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
481 |
pstatusopts = [o for o in statuscmd[1] if o[1] != 'rev'] |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
482 |
|
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
483 |
@eh.command('pstatus', pstatusopts) |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
484 |
def pstatus(ui, repo, *args, **kwargs): |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
485 |
"""show status combining committed and uncommited changes |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
486 |
|
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
487 |
This show the combined status of the current working copy parent commit and |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
488 |
the uncommitted change in the working copy itself. The status displayed |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
489 |
match the content of the commit that a bare :hg:`amend` will creates. |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
490 |
|
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
491 |
See :hg:`help status` for details.""" |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
492 |
kwargs['rev'] = ['.^'] |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
493 |
return statuscmd[0](ui, repo, *args, **kwargs) |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
494 |
|
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
495 |
_alias, diffcmd = cmdutil.findcmd('diff', commands.table) |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
496 |
pdiffopts = [o for o in diffcmd[1] if o[1] != 'rev'] |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
497 |
|
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
498 |
@eh.command('pdiff', pdiffopts) |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
499 |
def pdiff(ui, repo, *args, **kwargs): |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
500 |
"""show diff combining committed and uncommited changes |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
501 |
|
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
502 |
This show the combined diff of the current working copy parent commit and |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
503 |
the uncommitted change in the working copy itself. The diff displayed |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
504 |
match the content of the commit that a bare :hg:`amend` will creates. |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
505 |
|
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
506 |
See :hg:`help diff` for details.""" |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
507 |
kwargs['rev'] = ['.^'] |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
508 |
return diffcmd[0](ui, repo, *args, **kwargs) |
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
509 |
|
b9aea9e48203
commands: upgrade pdiff and pstatus to full commands
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2952
diff
changeset
|
510 |
@eh.uisetup |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
511 |
def _installalias(ui): |
3072
ec97e7b11119
config: stop passing useless default value to config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3068
diff
changeset
|
512 |
if ui.config('alias', 'odiff') is None: |
949
2b2a4ab0eb68
evolve: make most line lenghts 80 characters or less
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
948
diff
changeset
|
513 |
ui.setconfig('alias', 'odiff', |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
514 |
"diff --hidden --rev 'limit(precursors(.),1)' --rev .", |
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
515 |
'evolve') |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
516 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
517 |
### Troubled revset symbol |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
518 |
|
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
519 |
@eh.revset('troubled()') |
594 | 520 |
def revsettroubled(repo, subset, x): |
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
521 |
"""Changesets with troubles. |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
522 |
""" |
993
8a4a8fe50c26
evolve: do not use _ as an unused variable
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
988
diff
changeset
|
523 |
revset.getargs(x, 0, 0, 'troubled takes no arguments') |
1381
61849d45d47e
evolve: move 'troubled()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1380
diff
changeset
|
524 |
troubled = set() |
2845
9fc6a4615ae5
revset: unstable volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2844
diff
changeset
|
525 |
troubled.update(getrevs(repo, 'orphan')) |
2847
a1805a65ce21
revset: bumped volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2846
diff
changeset
|
526 |
troubled.update(getrevs(repo, 'phasedivergent')) |
2846
9c019996bce0
revset: divergent volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2845
diff
changeset
|
527 |
troubled.update(getrevs(repo, 'contentdivergent')) |
1381
61849d45d47e
evolve: move 'troubled()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1380
diff
changeset
|
528 |
troubled = revset.baseset(troubled) |
61849d45d47e
evolve: move 'troubled()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1380
diff
changeset
|
529 |
troubled.sort() # set is non-ordered, enforce order |
61849d45d47e
evolve: move 'troubled()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1380
diff
changeset
|
530 |
return subset & troubled |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
531 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
532 |
### Obsolescence graph |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
533 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
534 |
# XXX SOME MAJOR CLEAN UP TO DO HERE XXX |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
535 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
536 |
def _precursors(repo, s): |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
537 |
"""Precursor of a changeset""" |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
538 |
cs = set() |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
539 |
nm = repo.changelog.nodemap |
2840
dfad30be866c
context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2838
diff
changeset
|
540 |
markerbysubj = repo.obsstore.predecessors |
1377
01bdeb847f81
evolve: avoid creating changectx object in _precursors
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1376
diff
changeset
|
541 |
node = repo.changelog.node |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
542 |
for r in s: |
1377
01bdeb847f81
evolve: avoid creating changectx object in _precursors
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1376
diff
changeset
|
543 |
for p in markerbysubj.get(node(r), ()): |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
544 |
pr = nm.get(p[0]) |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
545 |
if pr is not None: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
546 |
cs.add(pr) |
1383
cf62abb62941
evolve: move 'precursors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1382
diff
changeset
|
547 |
cs -= repo.changelog.filteredrevs # nodemap has no filtering |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
548 |
return cs |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
549 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
550 |
def _allprecursors(repo, s): # XXX we need a better naming |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
551 |
"""transitive precursors of a subset""" |
1378
a127f0f3bf5f
evolve: avoid creating changectx object in _allprecursors
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1377
diff
changeset
|
552 |
node = repo.changelog.node |
a127f0f3bf5f
evolve: avoid creating changectx object in _allprecursors
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1377
diff
changeset
|
553 |
toproceed = [node(r) for r in s] |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
554 |
seen = set() |
2840
dfad30be866c
context: precursors was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2838
diff
changeset
|
555 |
allsubjects = repo.obsstore.predecessors |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
556 |
while toproceed: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
557 |
nc = toproceed.pop() |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
558 |
for mark in allsubjects.get(nc, ()): |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
559 |
np = mark[0] |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
560 |
if np not in seen: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
561 |
seen.add(np) |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
562 |
toproceed.append(np) |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
563 |
nm = repo.changelog.nodemap |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
564 |
cs = set() |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
565 |
for p in seen: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
566 |
pr = nm.get(p) |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
567 |
if pr is not None: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
568 |
cs.add(pr) |
1384
64c8b8c27811
evolve: move 'allprecursors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1383
diff
changeset
|
569 |
cs -= repo.changelog.filteredrevs # nodemap has no filtering |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
570 |
return cs |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
571 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
572 |
def _successors(repo, s): |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
573 |
"""Successors of a changeset""" |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
574 |
cs = set() |
1379
693cdcd809f2
evolve: avoid creating changectx object in _successors
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1378
diff
changeset
|
575 |
node = repo.changelog.node |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
576 |
nm = repo.changelog.nodemap |
590
02cadd3dc9f4
evolve: adapt to 2.4 code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
589
diff
changeset
|
577 |
markerbyobj = repo.obsstore.successors |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
578 |
for r in s: |
1379
693cdcd809f2
evolve: avoid creating changectx object in _successors
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1378
diff
changeset
|
579 |
for p in markerbyobj.get(node(r), ()): |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
580 |
for sub in p[1]: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
581 |
sr = nm.get(sub) |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
582 |
if sr is not None: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
583 |
cs.add(sr) |
1385
c2584407afbf
evolve: move 'successors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1384
diff
changeset
|
584 |
cs -= repo.changelog.filteredrevs # nodemap has no filtering |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
585 |
return cs |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
586 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
587 |
def _allsuccessors(repo, s, haltonflags=0): # XXX we need a better naming |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
588 |
"""transitive successors of a subset |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
589 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
590 |
haltonflags allows to provide flags which prevent the evaluation of a |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
591 |
marker. """ |
1380
43dcf62237be
evolve: avoid creating changectx object in _allsuccessors
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1379
diff
changeset
|
592 |
node = repo.changelog.node |
43dcf62237be
evolve: avoid creating changectx object in _allsuccessors
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1379
diff
changeset
|
593 |
toproceed = [node(r) for r in s] |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
594 |
seen = set() |
590
02cadd3dc9f4
evolve: adapt to 2.4 code
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
589
diff
changeset
|
595 |
allobjects = repo.obsstore.successors |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
596 |
while toproceed: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
597 |
nc = toproceed.pop() |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
598 |
for mark in allobjects.get(nc, ()): |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
599 |
if mark[2] & haltonflags: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
600 |
continue |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
601 |
for sub in mark[1]: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
602 |
if sub == nullid: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
603 |
continue # should not be here! |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
604 |
if sub not in seen: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
605 |
seen.add(sub) |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
606 |
toproceed.append(sub) |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
607 |
nm = repo.changelog.nodemap |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
608 |
cs = set() |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
609 |
for s in seen: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
610 |
sr = nm.get(s) |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
611 |
if sr is not None: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
612 |
cs.add(sr) |
1386
b5eaec8a53d0
evolve: move 'allsuccessors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1385
diff
changeset
|
613 |
cs -= repo.changelog.filteredrevs # nodemap has no filtering |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
614 |
return cs |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
615 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
616 |
##################################################################### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
617 |
### Extending revset and template ### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
618 |
##################################################################### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
619 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
620 |
# this section add several useful revset symbol not yet in core. |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
621 |
# they are subject to changes |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
622 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
623 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
624 |
### XXX I'm not sure this revset is useful |
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
625 |
@eh.revset('suspended()') |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
626 |
def revsetsuspended(repo, subset, x): |
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
627 |
"""Obsolete changesets with non-obsolete descendants. |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
628 |
""" |
1307
677c5da57b9c
evolve: remove unused variables
Laurent Charignon <lcharignon@fb.com>
parents:
1306
diff
changeset
|
629 |
revset.getargs(x, 0, 0, 'suspended takes no arguments') |
1382
c431f827f366
evolve: move 'suspended()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1381
diff
changeset
|
630 |
suspended = revset.baseset(getrevs(repo, 'suspended')) |
c431f827f366
evolve: move 'suspended()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1381
diff
changeset
|
631 |
suspended.sort() |
c431f827f366
evolve: move 'suspended()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1381
diff
changeset
|
632 |
return subset & suspended |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
633 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
634 |
|
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
635 |
@eh.revset('precursors(set)') |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
636 |
def revsetprecursors(repo, subset, x): |
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
637 |
"""Immediate precursors of changesets in set. |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
638 |
""" |
1204
161b8f6e7402
evolve: use 3.2+ fullreposet to evaluate argument set (issue4515)
Yuya Nishihara <yuya@tcha.org>
parents:
1203
diff
changeset
|
639 |
s = revset.getset(repo, revset.fullreposet(repo), x) |
1383
cf62abb62941
evolve: move 'precursors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1382
diff
changeset
|
640 |
s = revset.baseset(_precursors(repo, s)) |
cf62abb62941
evolve: move 'precursors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1382
diff
changeset
|
641 |
s.sort() |
cf62abb62941
evolve: move 'precursors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1382
diff
changeset
|
642 |
return subset & s |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
643 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
644 |
|
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
645 |
@eh.revset('allprecursors(set)') |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
646 |
def revsetallprecursors(repo, subset, x): |
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
647 |
"""Transitive precursors of changesets in set. |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
648 |
""" |
1204
161b8f6e7402
evolve: use 3.2+ fullreposet to evaluate argument set (issue4515)
Yuya Nishihara <yuya@tcha.org>
parents:
1203
diff
changeset
|
649 |
s = revset.getset(repo, revset.fullreposet(repo), x) |
1384
64c8b8c27811
evolve: move 'allprecursors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1383
diff
changeset
|
650 |
s = revset.baseset(_allprecursors(repo, s)) |
64c8b8c27811
evolve: move 'allprecursors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1383
diff
changeset
|
651 |
s.sort() |
64c8b8c27811
evolve: move 'allprecursors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1383
diff
changeset
|
652 |
return subset & s |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
653 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
654 |
|
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
655 |
@eh.revset('successors(set)') |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
656 |
def revsetsuccessors(repo, subset, x): |
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
657 |
"""Immediate successors of changesets in set. |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
658 |
""" |
1204
161b8f6e7402
evolve: use 3.2+ fullreposet to evaluate argument set (issue4515)
Yuya Nishihara <yuya@tcha.org>
parents:
1203
diff
changeset
|
659 |
s = revset.getset(repo, revset.fullreposet(repo), x) |
1385
c2584407afbf
evolve: move 'successors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1384
diff
changeset
|
660 |
s = revset.baseset(_successors(repo, s)) |
c2584407afbf
evolve: move 'successors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1384
diff
changeset
|
661 |
s.sort() |
c2584407afbf
evolve: move 'successors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1384
diff
changeset
|
662 |
return subset & s |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
663 |
|
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
664 |
@eh.revset('allsuccessors(set)') |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
665 |
def revsetallsuccessors(repo, subset, x): |
2925
9efedcedd9dd
evolve: use registrar.revsetpredicate to register revset predicate functions
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
2923
diff
changeset
|
666 |
"""Transitive successors of changesets in set. |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
667 |
""" |
1204
161b8f6e7402
evolve: use 3.2+ fullreposet to evaluate argument set (issue4515)
Yuya Nishihara <yuya@tcha.org>
parents:
1203
diff
changeset
|
668 |
s = revset.getset(repo, revset.fullreposet(repo), x) |
1386
b5eaec8a53d0
evolve: move 'allsuccessors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1385
diff
changeset
|
669 |
s = revset.baseset(_allsuccessors(repo, s)) |
b5eaec8a53d0
evolve: move 'allsuccessors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1385
diff
changeset
|
670 |
s.sort() |
b5eaec8a53d0
evolve: move 'allsuccessors()' to smarted usage
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1385
diff
changeset
|
671 |
return subset & s |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
672 |
|
1399
9ff6d9240f16
template: add a troubles keyword
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
949
diff
changeset
|
673 |
|
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
674 |
##################################################################### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
675 |
### Various trouble warning ### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
676 |
##################################################################### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
677 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
678 |
# This section take care of issue warning to the user when troubles appear |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
679 |
|
3363
380fa6e8baf2
evolve: don't show working directory obsolete message if we were on it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3362
diff
changeset
|
680 |
def _warnobsoletewc(ui, repo, prevnode=None, wasobs=None): |
2289
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
681 |
rev = repo['.'] |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
682 |
|
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
683 |
if not rev.obsolete(): |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
684 |
return |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
685 |
|
3363
380fa6e8baf2
evolve: don't show working directory obsolete message if we were on it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3362
diff
changeset
|
686 |
if rev.node() == prevnode and wasobs: |
380fa6e8baf2
evolve: don't show working directory obsolete message if we were on it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3362
diff
changeset
|
687 |
return |
2289
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
688 |
msg = _("working directory parent is obsolete! (%s)\n") |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
689 |
shortnode = node.short(rev.node()) |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
690 |
|
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
691 |
ui.warn(msg % shortnode) |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
692 |
|
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
693 |
# Check that evolve is activated for performance reasons |
3455
f7ecb11d71bb
update: show "use 'hg evolve' to..." hint iff evolve command enabled
Martin von Zweigbergk <martinvonz@google.com>
parents:
3427
diff
changeset
|
694 |
evolvecommandenabled = any('evolve' in e for e in cmdtable) |
f7ecb11d71bb
update: show "use 'hg evolve' to..." hint iff evolve command enabled
Martin von Zweigbergk <martinvonz@google.com>
parents:
3427
diff
changeset
|
695 |
if ui.quiet or not evolvecommandenabled: |
2289
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
696 |
return |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
697 |
|
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
698 |
# Show a warning for helping the user to solve the issue |
2488
1bdbe8f55339
refactor: extract obs fate algorithm from _getobsoletereason
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
699 |
reason, successors = obshistory._getobsfateandsuccs(repo, rev.node()) |
2289
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
700 |
|
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
701 |
if reason == 'pruned': |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
702 |
solvemsg = _("use 'hg evolve' to update to its parent successor") |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
703 |
elif reason == 'diverged': |
3154
406992d0d611
evolve: rename --contentdivergent flag to --content-divergent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
704 |
debugcommand = "hg evolve --list --content-divergent" |
2289
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
705 |
basemsg = _("%s has diverged, use '%s' to resolve the issue") |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
706 |
solvemsg = basemsg % (shortnode, debugcommand) |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
707 |
elif reason == 'superseed': |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
708 |
msg = _("use 'hg evolve' to update to its successor: %s") |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
709 |
solvemsg = msg % successors[0] |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
710 |
elif reason == 'superseed_split': |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
711 |
msg = _("use 'hg evolve' to update to its tipmost successor: %s") |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
712 |
|
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
713 |
if len(successors) <= 2: |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
714 |
solvemsg = msg % ", ".join(successors) |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
715 |
else: |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
716 |
firstsuccessors = ", ".join(successors[:2]) |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
717 |
remainingnumber = len(successors) - 2 |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
718 |
successorsmsg = _("%s and %d more") % (firstsuccessors, remainingnumber) |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
719 |
solvemsg = msg % successorsmsg |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
720 |
else: |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
721 |
raise ValueError(reason) |
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
722 |
|
61d073590fb7
ui: add better messages when the working copy become obsolete.
Boris Feld <boris.feld@octobus.net>
parents:
2286
diff
changeset
|
723 |
ui.warn("(%s)\n" % solvemsg) |
1527
e080d2ae2656
parents: avoid locking the repository during 'hg parents'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1519
diff
changeset
|
724 |
|
2293
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
725 |
if util.safehasattr(context, '_filterederror'): |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
726 |
# if < hg-4.2 we do not update the message |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
727 |
@eh.wrapfunction(context, '_filterederror') |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
728 |
def evolve_filtererror(original, repo, changeid): |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
729 |
"""build an exception to be raised about a filtered changeid |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
730 |
|
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
731 |
This is extracted in a function to help extensions (eg: evolve) to |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
732 |
experiment with various message variants.""" |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
733 |
if repo.filtername.startswith('visible'): |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
734 |
|
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
735 |
unfilteredrepo = repo.unfiltered() |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
736 |
rev = unfilteredrepo[changeid] |
2488
1bdbe8f55339
refactor: extract obs fate algorithm from _getobsoletereason
Boris Feld <boris.feld@octobus.net>
parents:
2485
diff
changeset
|
737 |
reason, successors = obshistory._getobsfateandsuccs(unfilteredrepo, rev.node()) |
2293
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
738 |
|
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
739 |
# Be more precise in cqse the revision is superseed |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
740 |
if reason == 'superseed': |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
741 |
reason = _("successor: %s") % successors[0] |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
742 |
elif reason == 'superseed_split': |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
743 |
if len(successors) <= 2: |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
744 |
reason = _("successors: %s") % ", ".join(successors) |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
745 |
else: |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
746 |
firstsuccessors = ", ".join(successors[:2]) |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
747 |
remainingnumber = len(successors) - 2 |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
748 |
successorsmsg = _("%s and %d more") % (firstsuccessors, remainingnumber) |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
749 |
reason = _("successors: %s") % successorsmsg |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
750 |
|
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
751 |
msg = _("hidden revision '%s'") % changeid |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
752 |
hint = _('use --hidden to access hidden revisions; %s') % reason |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
753 |
return error.FilteredRepoLookupError(msg, hint=hint) |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
754 |
msg = _("filtered revision '%s' (not in '%s' subset)") |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
755 |
msg %= (changeid, repo.filtername) |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
756 |
return error.FilteredRepoLookupError(msg) |
1659b42c28c2
compat: only install the better filtered message for mercurial 4.2 and above
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2292
diff
changeset
|
757 |
|
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
758 |
@eh.wrapcommand("update") |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
759 |
@eh.wrapcommand("pull") |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
760 |
def wrapmayobsoletewc(origfn, ui, repo, *args, **opts): |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
761 |
"""Warn that the working directory parent is an obsolete changeset""" |
3363
380fa6e8baf2
evolve: don't show working directory obsolete message if we were on it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3362
diff
changeset
|
762 |
ctx = repo['.'] |
380fa6e8baf2
evolve: don't show working directory obsolete message if we were on it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3362
diff
changeset
|
763 |
node = ctx.node() |
380fa6e8baf2
evolve: don't show working directory obsolete message if we were on it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3362
diff
changeset
|
764 |
isobs = ctx.obsolete() |
380fa6e8baf2
evolve: don't show working directory obsolete message if we were on it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3362
diff
changeset
|
765 |
|
1452
1bcbd14cf159
merge back with 3.3 compat branch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1451
diff
changeset
|
766 |
def warnobsolete(): |
3363
380fa6e8baf2
evolve: don't show working directory obsolete message if we were on it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3362
diff
changeset
|
767 |
_warnobsoletewc(ui, repo, node, isobs) |
1452
1bcbd14cf159
merge back with 3.3 compat branch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1451
diff
changeset
|
768 |
wlock = None |
1bcbd14cf159
merge back with 3.3 compat branch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1451
diff
changeset
|
769 |
try: |
1bcbd14cf159
merge back with 3.3 compat branch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1451
diff
changeset
|
770 |
wlock = repo.wlock() |
1bcbd14cf159
merge back with 3.3 compat branch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1451
diff
changeset
|
771 |
repo._afterlock(warnobsolete) |
1bcbd14cf159
merge back with 3.3 compat branch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1451
diff
changeset
|
772 |
res = origfn(ui, repo, *args, **opts) |
1bcbd14cf159
merge back with 3.3 compat branch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1451
diff
changeset
|
773 |
finally: |
1bcbd14cf159
merge back with 3.3 compat branch
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1451
diff
changeset
|
774 |
lockmod.release(wlock) |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
775 |
return res |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
776 |
|
1527
e080d2ae2656
parents: avoid locking the repository during 'hg parents'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1519
diff
changeset
|
777 |
@eh.wrapcommand("parents") |
e080d2ae2656
parents: avoid locking the repository during 'hg parents'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1519
diff
changeset
|
778 |
def wrapparents(origfn, ui, repo, *args, **opts): |
e080d2ae2656
parents: avoid locking the repository during 'hg parents'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1519
diff
changeset
|
779 |
res = origfn(ui, repo, *args, **opts) |
e080d2ae2656
parents: avoid locking the repository during 'hg parents'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1519
diff
changeset
|
780 |
_warnobsoletewc(ui, repo) |
e080d2ae2656
parents: avoid locking the repository during 'hg parents'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1519
diff
changeset
|
781 |
return res |
e080d2ae2656
parents: avoid locking the repository during 'hg parents'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1519
diff
changeset
|
782 |
|
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
783 |
# XXX this could wrap transaction code |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
784 |
# XXX (but this is a bit a layer violation) |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
785 |
@eh.wrapcommand("commit") |
763
966e2659e989
import: warn about new unstable changesets
Dan Villiom Podlaski Christiansen <dan@cabo.dk>
parents:
762
diff
changeset
|
786 |
@eh.wrapcommand("import") |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
787 |
@eh.wrapcommand("push") |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
788 |
@eh.wrapcommand("pull") |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
789 |
@eh.wrapcommand("graft") |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
790 |
@eh.wrapcommand("phase") |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
791 |
@eh.wrapcommand("unbundle") |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
792 |
def warnobserrors(orig, ui, repo, *args, **kwargs): |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
793 |
"""display warning is the command resulted in more instable changeset""" |
3427
cbeee8d31d58
trouble-reports: yield to in code reporting of new troubles
Martin von Zweigbergk <martinvonz@google.com>
parents:
3395
diff
changeset
|
794 |
# hg < 4.4 does not have the feature built in. bail out otherwise. |
cbeee8d31d58
trouble-reports: yield to in code reporting of new troubles
Martin von Zweigbergk <martinvonz@google.com>
parents:
3395
diff
changeset
|
795 |
if util.safehasattr(scmutil, '_reportstroubledchangesets'): |
cbeee8d31d58
trouble-reports: yield to in code reporting of new troubles
Martin von Zweigbergk <martinvonz@google.com>
parents:
3395
diff
changeset
|
796 |
return orig(ui, repo, *args, **kwargs) |
cbeee8d31d58
trouble-reports: yield to in code reporting of new troubles
Martin von Zweigbergk <martinvonz@google.com>
parents:
3395
diff
changeset
|
797 |
|
658
2a2b8c95bb43
evolve: remove revset calls in warnobserror
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
657
diff
changeset
|
798 |
# part of the troubled stuff may be filtered (stash ?) |
2a2b8c95bb43
evolve: remove revset calls in warnobserror
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
657
diff
changeset
|
799 |
# This needs a better implementation but will probably wait for core. |
2a2b8c95bb43
evolve: remove revset calls in warnobserror
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
657
diff
changeset
|
800 |
filtered = repo.changelog.filteredrevs |
2845
9fc6a4615ae5
revset: unstable volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2844
diff
changeset
|
801 |
priorunstables = len(set(getrevs(repo, 'orphan')) - filtered) |
2847
a1805a65ce21
revset: bumped volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2846
diff
changeset
|
802 |
priorbumpeds = len(set(getrevs(repo, 'phasedivergent')) - filtered) |
2846
9c019996bce0
revset: divergent volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2845
diff
changeset
|
803 |
priordivergents = len(set(getrevs(repo, 'contentdivergent')) - filtered) |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
804 |
ret = orig(ui, repo, *args, **kwargs) |
658
2a2b8c95bb43
evolve: remove revset calls in warnobserror
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
657
diff
changeset
|
805 |
filtered = repo.changelog.filteredrevs |
949
2b2a4ab0eb68
evolve: make most line lenghts 80 characters or less
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
948
diff
changeset
|
806 |
newunstables = \ |
2845
9fc6a4615ae5
revset: unstable volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2844
diff
changeset
|
807 |
len(set(getrevs(repo, 'orphan')) - filtered) - priorunstables |
949
2b2a4ab0eb68
evolve: make most line lenghts 80 characters or less
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
948
diff
changeset
|
808 |
newbumpeds = \ |
2847
a1805a65ce21
revset: bumped volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2846
diff
changeset
|
809 |
len(set(getrevs(repo, 'phasedivergent')) - filtered) - priorbumpeds |
949
2b2a4ab0eb68
evolve: make most line lenghts 80 characters or less
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
948
diff
changeset
|
810 |
newdivergents = \ |
2846
9c019996bce0
revset: divergent volatile set was deprecated
Boris Feld <boris.feld@octobus.net>
parents:
2845
diff
changeset
|
811 |
len(set(getrevs(repo, 'contentdivergent')) - filtered) - priordivergents |
2854
66796d7b5415
warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents:
2847
diff
changeset
|
812 |
|
66796d7b5415
warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents:
2847
diff
changeset
|
813 |
base_msg = _('%i new %s changesets\n') |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
814 |
if newunstables > 0: |
2854
66796d7b5415
warning: rename unstable warning message
Boris Feld <boris.feld@octobus.net>
parents:
2847
diff
changeset
|
815 |
ui.warn(base_msg % (newunstables, compat.TROUBLES['ORPHAN'])) |
593
26f76b38f879
evolve: Rename latecomer into bumped
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
588
diff
changeset
|
816 |
if newbumpeds > 0: |
2855
1db0137297f4
warning: rename bumped warning message
Boris Feld <boris.feld@octobus.net>
parents:
2854
diff
changeset
|
817 |
ui.warn(base_msg % (newbumpeds, compat.TROUBLES['PHASEDIVERGENT'])) |
586
f01721161532
evolve: rename conflicting into divergent
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
585
diff
changeset
|
818 |
if newdivergents > 0: |
2857
0c286d054bcd
warning: use 'divergent', not 'contentdivergent' on old Mercurial
Martin von Zweigbergk <martinvonz@google.com>
parents:
2856
diff
changeset
|
819 |
ui.warn(base_msg % (newdivergents, compat.TROUBLES['CONTENTDIVERGENT'])) |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
820 |
return ret |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
821 |
|
1122
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
822 |
@eh.wrapfunction(mercurial.exchange, 'push') |
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
823 |
def push(orig, repo, *args, **opts): |
492
7ecd41520dae
rename `stabilize` to `evolve`
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
491
diff
changeset
|
824 |
"""Add a hint for "hg evolve" when troubles make push fails |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
825 |
""" |
1122
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
826 |
try: |
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
827 |
return orig(repo, *args, **opts) |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
828 |
except error.Abort as ex: |
1122
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
829 |
hint = _("use 'hg evolve' to get a stable history " |
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
830 |
"or --force to ignore warnings") |
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
831 |
if (len(ex.args) >= 1 |
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
832 |
and ex.args[0].startswith('push includes ') |
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
833 |
and ex.hint is None): |
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
834 |
ex.hint = hint |
c8750f4388c8
evolve: wrap exchange.push() for compatability with core mercurial 4d52e6eb98ea
Matt Harbison <matt_harbison@yahoo.com>
parents:
1120
diff
changeset
|
835 |
raise |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
836 |
|
788
e973dd5bf583
evolve: register a summary hook instead of wrapping the summary command
Simon Heimberg <simohe@besonet.ch>
parents:
776
diff
changeset
|
837 |
def summaryhook(ui, repo): |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
838 |
evolvestate = state.cmdstate(repo) |
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
839 |
if evolvestate: |
1640 | 840 |
# i18n: column positioning for "hg summary" |
3198
390c87f8c65d
summaryhook: respect -q flag
Martin von Zweigbergk <martinvonz@google.com>
parents:
3197
diff
changeset
|
841 |
ui.status(_('evolve: (evolve --continue)\n')) |
788
e973dd5bf583
evolve: register a summary hook instead of wrapping the summary command
Simon Heimberg <simohe@besonet.ch>
parents:
776
diff
changeset
|
842 |
|
e973dd5bf583
evolve: register a summary hook instead of wrapping the summary command
Simon Heimberg <simohe@besonet.ch>
parents:
776
diff
changeset
|
843 |
@eh.extsetup |
e973dd5bf583
evolve: register a summary hook instead of wrapping the summary command
Simon Heimberg <simohe@besonet.ch>
parents:
776
diff
changeset
|
844 |
def obssummarysetup(ui): |
e973dd5bf583
evolve: register a summary hook instead of wrapping the summary command
Simon Heimberg <simohe@besonet.ch>
parents:
776
diff
changeset
|
845 |
cmdutil.summaryhooks.add('evolve', summaryhook) |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
846 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
847 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
848 |
##################################################################### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
849 |
### Core Other extension compat ### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
850 |
##################################################################### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
851 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
852 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
853 |
@eh.extsetup |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
854 |
def _rebasewrapping(ui): |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
855 |
# warning about more obsolete |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
856 |
try: |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
857 |
rebase = extensions.find('rebase') |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
858 |
if rebase: |
572
dc107acd0bd2
adapt to core rebase support
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
571
diff
changeset
|
859 |
extensions.wrapcommand(rebase.cmdtable, 'rebase', warnobserrors) |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
860 |
except KeyError: |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
861 |
pass # rebase not found |
678
718262019c6f
evolve: warn for troubles created by histedit too.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
677
diff
changeset
|
862 |
try: |
718262019c6f
evolve: warn for troubles created by histedit too.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
677
diff
changeset
|
863 |
histedit = extensions.find('histedit') |
718262019c6f
evolve: warn for troubles created by histedit too.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
677
diff
changeset
|
864 |
if histedit: |
718262019c6f
evolve: warn for troubles created by histedit too.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
677
diff
changeset
|
865 |
extensions.wrapcommand(histedit.cmdtable, 'histedit', warnobserrors) |
718262019c6f
evolve: warn for troubles created by histedit too.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
677
diff
changeset
|
866 |
except KeyError: |
1575 | 867 |
pass # histedit not found |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
868 |
|
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
869 |
##################################################################### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
870 |
### Old Evolve extension content ### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
871 |
##################################################################### |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
872 |
|
81
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
873 |
### new command |
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
874 |
############################# |
716
4c0f6d555032
prune: add --user and --date options
Levi Bard <levi@unity3d.com>
parents:
715
diff
changeset
|
875 |
|
953
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
876 |
@eh.uisetup |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
877 |
def _installimportobsolete(ui): |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
878 |
entry = cmdutil.findcmd('import', commands.table)[1] |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
879 |
entry[1].append(('', 'obsolete', False, |
1162
5c07f464981e
help: fix typo in help for 'obsolete' option added to import command
Mike Edgar <adgar@google.com>
parents:
1160
diff
changeset
|
880 |
_('mark the old node as obsoleted by ' |
953
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
881 |
'the created commit'))) |
930
cac35bef8aee
import: --obsolete flag for automatic obsolescence marker creation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
927
diff
changeset
|
882 |
|
953
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
883 |
@eh.wrapfunction(mercurial.cmdutil, 'tryimportone') |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
884 |
def tryimportone(orig, ui, repo, hunk, parents, opts, *args, **kwargs): |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
885 |
extracted = patch.extract(ui, hunk) |
1830
53aae4b4e791
compat: drop compatibility layer for 'tryimportone'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1829
diff
changeset
|
886 |
expected = extracted.get('nodeid') |
1115
cc19b6400dae
import: fix the "is None" check for the Node
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1109
diff
changeset
|
887 |
if expected is not None: |
1055
cfe1b9d3e5d9
import: handle patch with no node information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1054
diff
changeset
|
888 |
expected = node.bin(expected) |
953
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
889 |
oldextract = patch.extract |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
890 |
try: |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
891 |
patch.extract = lambda ui, hunk: extracted |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
892 |
ret = orig(ui, repo, hunk, parents, opts, *args, **kwargs) |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
893 |
finally: |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
894 |
patch.extract = oldextract |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
895 |
created = ret[1] |
1055
cfe1b9d3e5d9
import: handle patch with no node information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1054
diff
changeset
|
896 |
if (opts['obsolete'] and None not in (created, expected) |
cfe1b9d3e5d9
import: handle patch with no node information
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1054
diff
changeset
|
897 |
and created != expected): |
953
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
898 |
tr = repo.transaction('import-obs') |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
899 |
try: |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
900 |
metadata = {'user': ui.username()} |
1054
93e920feff5e
import: compare binary node with binary node when using --obsolete
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1052
diff
changeset
|
901 |
repo.obsstore.create(tr, expected, (created,), |
953
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
902 |
metadata=metadata) |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
903 |
tr.close() |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
904 |
finally: |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
905 |
tr.release() |
a02e5916a7e3
import: drop version check for ``import --obsolete``
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
952
diff
changeset
|
906 |
return ret |
930
cac35bef8aee
import: --obsolete flag for automatic obsolescence marker creation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
927
diff
changeset
|
907 |
|
81
5cec25ce019c
Basic kill command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
908 |
|
894
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
909 |
def _deprecatealias(oldalias, newalias): |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
910 |
'''Deprecates an alias for a command in favour of another |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
911 |
|
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
912 |
Creates a new entry in the command table for the old alias. It creates a |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
913 |
wrapper that has its synopsis set to show that is has been deprecated. |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
914 |
The documentation will be replace with a pointer to the new alias. |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
915 |
If a user invokes the command a deprecation warning will be printed and |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
916 |
the command of the *new* alias will be invoked. |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
917 |
|
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
918 |
This function is loosely based on the extensions.wrapcommand function. |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
919 |
''' |
1226
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
920 |
try: |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
921 |
aliases, entry = cmdutil.findcmd(newalias, cmdtable) |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
922 |
except error.UnknownCommand: |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
923 |
# Commands may be disabled |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
924 |
return |
1680
7caa5f2040c5
py3: use items() instead of iteritems()
timeless@gmail.com
parents:
1679
diff
changeset
|
925 |
for alias, e in cmdtable.items(): |
894
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
926 |
if e is entry: |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
927 |
break |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
928 |
|
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
929 |
synopsis = '(DEPRECATED)' |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
930 |
if len(entry) > 2: |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
931 |
fn, opts, _syn = entry |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
932 |
else: |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
933 |
fn, opts, = entry |
1496 | 934 |
deprecationwarning = _('%s have been deprecated in favor of %s\n') % ( |
935 |
oldalias, newalias) |
|
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
936 |
|
894
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
937 |
def newfn(*args, **kwargs): |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
938 |
ui = args[0] |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
939 |
ui.warn(deprecationwarning) |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
940 |
util.checksignature(fn)(*args, **kwargs) |
2952
f1bbc536602a
gup/gdown: properly mark these commands as deprecated
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2925
diff
changeset
|
941 |
newfn.__doc__ = deprecationwarning + ' (DEPRECATED)' |
2043
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
942 |
cmdwrapper = eh.command(oldalias, opts, synopsis) |
894
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
943 |
cmdwrapper(newfn) |
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
944 |
|
895
17ac69db9329
evolve: deprecate gup and gdown aliases
Olle Lundberg <geek@nerd.sh>
parents:
894
diff
changeset
|
945 |
@eh.extsetup |
17ac69db9329
evolve: deprecate gup and gdown aliases
Olle Lundberg <geek@nerd.sh>
parents:
894
diff
changeset
|
946 |
def deprecatealiases(ui): |
17ac69db9329
evolve: deprecate gup and gdown aliases
Olle Lundberg <geek@nerd.sh>
parents:
894
diff
changeset
|
947 |
_deprecatealias('gup', 'next') |
17ac69db9329
evolve: deprecate gup and gdown aliases
Olle Lundberg <geek@nerd.sh>
parents:
894
diff
changeset
|
948 |
_deprecatealias('gdown', 'previous') |
894
4f21a3279a60
evolve: add function to deprecate an alias
Olle Lundberg <geek@nerd.sh>
parents:
890
diff
changeset
|
949 |
|
1357
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
950 |
def _singlesuccessor(repo, p): |
1369
4ed67cce8c23
evolve: properly evolve stacked unstable with --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1364
diff
changeset
|
951 |
"""returns p (as rev) if not obsolete or its unique latest successors |
1357
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
952 |
|
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
953 |
fail if there are no such successor""" |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
954 |
|
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
955 |
if not p.obsolete(): |
1369
4ed67cce8c23
evolve: properly evolve stacked unstable with --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1364
diff
changeset
|
956 |
return p.rev() |
1357
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
957 |
obs = repo[p] |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
958 |
ui = repo.ui |
2693
f4b0351fa813
evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2689
diff
changeset
|
959 |
newer = compat.successorssets(repo, obs.node()) |
466
b98490b689a5
stabilize: handle killed changeset in stabilize.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
465
diff
changeset
|
960 |
# search of a parent which is not killed |
1440
afe46c3b15db
evolve: clarify code in _singlesuccessor
Laurent Charignon <lcharignon@fb.com>
parents:
1428
diff
changeset
|
961 |
while not newer: |
466
b98490b689a5
stabilize: handle killed changeset in stabilize.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
465
diff
changeset
|
962 |
ui.debug("stabilize target %s is plain dead," |
1145
fb51113a1c08
evolve: add the missing newline to output messages where needed
Matt Harbison <matt_harbison@yahoo.com>
parents:
1144
diff
changeset
|
963 |
" trying to stabilize on its parent\n" % |
1144
b2a78b950a51
evolve: add the missing argument to a debug statement
Matt Harbison <matt_harbison@yahoo.com>
parents:
1143
diff
changeset
|
964 |
obs) |
466
b98490b689a5
stabilize: handle killed changeset in stabilize.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
465
diff
changeset
|
965 |
obs = obs.parents()[0] |
2693
f4b0351fa813
evolve: adapt to function migrate to obsutil
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2689
diff
changeset
|
966 |
newer = compat.successorssets(repo, obs.node()) |
1428
20a3b0b27bfe
evolve: raise MultipleSuccessorsError when computing dependency for split commits
Laurent Charignon <lcharignon@fb.com>
parents:
1427
diff
changeset
|
967 |
if len(newer) > 1 or len(newer[0]) > 1: |
3467
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
968 |
raise utility.MultipleSuccessorsError(newer) |
1408
b3afdc0815d0
evolve: skip unstable changesets with multiple successorssets
Laurent Charignon <lcharignon@fb.com>
parents:
1407
diff
changeset
|
969 |
|
1357
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
970 |
return repo[newer[0][0]].rev() |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
971 |
|
1361
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
972 |
def builddependencies(repo, revs): |
1411
64515965c0df
evolve: some style fix
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1410
diff
changeset
|
973 |
"""returns dependency graphs giving an order to solve instability of revs |
64515965c0df
evolve: some style fix
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1410
diff
changeset
|
974 |
(see _orderrevs for more information on usage)""" |
1361
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
975 |
|
1357
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
976 |
# For each troubled revision we keep track of what instability if any should |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
977 |
# be resolved in order to resolve it. Example: |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
978 |
# dependencies = {3: [6], 6:[]} |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
979 |
# Means that: 6 has no dependency, 3 depends on 6 to be solved |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
980 |
dependencies = {} |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
981 |
# rdependencies is the inverted dict of dependencies |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
982 |
rdependencies = collections.defaultdict(set) |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
983 |
|
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
984 |
for r in revs: |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
985 |
dependencies[r] = set() |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
986 |
for p in repo[r].parents(): |
1408
b3afdc0815d0
evolve: skip unstable changesets with multiple successorssets
Laurent Charignon <lcharignon@fb.com>
parents:
1407
diff
changeset
|
987 |
try: |
b3afdc0815d0
evolve: skip unstable changesets with multiple successorssets
Laurent Charignon <lcharignon@fb.com>
parents:
1407
diff
changeset
|
988 |
succ = _singlesuccessor(repo, p) |
3467
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
989 |
except utility.MultipleSuccessorsError as exc: |
1408
b3afdc0815d0
evolve: skip unstable changesets with multiple successorssets
Laurent Charignon <lcharignon@fb.com>
parents:
1407
diff
changeset
|
990 |
dependencies[r] = exc.successorssets |
1418
ed9a8b1ee9bd
evolve: fix error in builddependencies
Laurent Charignon <lcharignon@fb.com>
parents:
1415
diff
changeset
|
991 |
continue |
1357
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
992 |
if succ in revs: |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
993 |
dependencies[r].add(succ) |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
994 |
rdependencies[succ].add(r) |
1361
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
995 |
return dependencies, rdependencies |
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
996 |
|
1410
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
997 |
|
1411
64515965c0df
evolve: some style fix
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1410
diff
changeset
|
998 |
def _orderrevs(repo, revs): |
64515965c0df
evolve: some style fix
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1410
diff
changeset
|
999 |
"""Compute an ordering to solve instability for the given revs |
1361
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
1000 |
|
1571
0e8936e7cb89
evolve: improve the confusing docstring for _orderrevs()
Greg Ward <greg@gerg.ca>
parents:
1570
diff
changeset
|
1001 |
revs is a list of unstable revisions. |
0e8936e7cb89
evolve: improve the confusing docstring for _orderrevs()
Greg Ward <greg@gerg.ca>
parents:
1570
diff
changeset
|
1002 |
|
0e8936e7cb89
evolve: improve the confusing docstring for _orderrevs()
Greg Ward <greg@gerg.ca>
parents:
1570
diff
changeset
|
1003 |
Returns the same revisions ordered to solve their instability from the |
1361
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
1004 |
bottom to the top of the stack that the stabilization process will produce |
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
1005 |
eventually. |
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
1006 |
|
1571
0e8936e7cb89
evolve: improve the confusing docstring for _orderrevs()
Greg Ward <greg@gerg.ca>
parents:
1570
diff
changeset
|
1007 |
This ensures the minimal number of stabilizations, as we can stabilize each |
0e8936e7cb89
evolve: improve the confusing docstring for _orderrevs()
Greg Ward <greg@gerg.ca>
parents:
1570
diff
changeset
|
1008 |
revision on its final stabilized destination. |
1361
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
1009 |
""" |
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
1010 |
# Step 1: Build the dependency graph |
043e5ca9322f
evolve: extract the code computing dependencies in a separate function
Laurent Charignon <lcharignon@fb.com>
parents:
1357
diff
changeset
|
1011 |
dependencies, rdependencies = builddependencies(repo, revs) |
1357
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1012 |
# Step 2: Build the ordering |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1013 |
# Remove the revisions with no dependency(A) and add them to the ordering. |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1014 |
# Removing these revisions leads to new revisions with no dependency (the |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1015 |
# one depending on A) that we can remove from the dependency graph and add |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1016 |
# to the ordering. We progress in a similar fashion until the ordering is |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1017 |
# built |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1018 |
solvablerevs = collections.deque([r for r in sorted(dependencies.keys()) |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1019 |
if not dependencies[r]]) |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1020 |
ordering = [] |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1021 |
while solvablerevs: |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1022 |
rev = solvablerevs.popleft() |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1023 |
for dependent in rdependencies[rev]: |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1024 |
dependencies[dependent].remove(rev) |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1025 |
if not dependencies[dependent]: |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1026 |
solvablerevs.append(dependent) |
1412
8794a4680bdd
evolve: warn about every skipped evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1411
diff
changeset
|
1027 |
del dependencies[rev] |
1357
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1028 |
ordering.append(rev) |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1029 |
|
1412
8794a4680bdd
evolve: warn about every skipped evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1411
diff
changeset
|
1030 |
ordering.extend(sorted(dependencies)) |
1357
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1031 |
return ordering |
3bb7a080da4d
evolve: add ordering of the revisions for evolve --rev
Laurent Charignon <lcharignon@fb.com>
parents:
1354
diff
changeset
|
1032 |
|
2043
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1033 |
@eh.command( |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1034 |
'^evolve|stabilize|solve', |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1035 |
[('n', 'dry-run', False, |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1036 |
_('do not perform actions, just print what would be done')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1037 |
('', 'confirm', False, |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1038 |
_('ask for confirmation before performing the action')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1039 |
('A', 'any', False, |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1040 |
_('also consider troubled changesets unrelated to current working ' |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1041 |
'directory')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1042 |
('r', 'rev', [], _('solves troubles of these revisions')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1043 |
('', 'bumped', False, _('solves only bumped changesets')), |
3155
b237c1c6dc19
evolve: rename --phasedivergent flag to --phase-divergent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3154
diff
changeset
|
1044 |
('', 'phase-divergent', False, _('solves only phase-divergent changesets')), |
2859
2a228fb6c23e
evolve: undo change from "divergent" to "phasedivergent" for --divergent
Martin von Zweigbergk <martinvonz@google.com>
parents:
2858
diff
changeset
|
1045 |
('', 'divergent', False, _('solves only divergent changesets')), |
3154
406992d0d611
evolve: rename --contentdivergent flag to --content-divergent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
1046 |
('', 'content-divergent', False, _('solves only content-divergent changesets')), |
2834
38db1466c6fb
log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents:
2803
diff
changeset
|
1047 |
('', 'unstable', False, _('solves only unstable changesets')), |
38db1466c6fb
log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents:
2803
diff
changeset
|
1048 |
('', 'orphan', False, _('solves only orphan changesets (default)')), |
2043
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1049 |
('a', 'all', False, _('evolve all troubled changesets related to the ' |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1050 |
'current working directory and its descendants')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1051 |
('c', 'continue', False, _('continue an interrupted evolution')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1052 |
('l', 'list', False, 'provide details on troubled changesets in the repo'), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1053 |
] + mergetoolopts, |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1054 |
_('[OPTIONS]...') |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1055 |
) |
492
7ecd41520dae
rename `stabilize` to `evolve`
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
491
diff
changeset
|
1056 |
def evolve(ui, repo, **opts): |
1528
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1057 |
"""solve troubled changesets in your repository |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1058 |
|
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1059 |
Modifying history can lead to various types of troubled changesets: |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1060 |
unstable, bumped, or divergent. The evolve command resolves your troubles |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1061 |
by executing one of the following actions: |
1528
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1062 |
|
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1063 |
- update working copy to a successor |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1064 |
- rebase an unstable changeset |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1065 |
- extract the desired changes from a bumped changeset |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1066 |
- fuse divergent changesets back together |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1067 |
|
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1068 |
If you pass no arguments, evolve works in automatic mode: it will execute a |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1069 |
single action to reduce instability related to your working copy. There are |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1070 |
two cases for this action. First, if the parent of your working copy is |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1071 |
obsolete, evolve updates to the parent's successor. Second, if the working |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1072 |
copy parent is not obsolete but has obsolete predecessors, then evolve |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1073 |
determines if there is an unstable changeset that can be rebased onto the |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1074 |
working copy parent in order to reduce instability. |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1075 |
If so, evolve rebases that changeset. If not, evolve refuses to guess your |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1076 |
intention, and gives a hint about what you might want to do next. |
1528
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1077 |
|
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1078 |
Any time evolve creates a changeset, it updates the working copy to the new |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1079 |
changeset. (Currently, every successful evolve operation involves an update |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1080 |
as well; this may change in future.) |
1528
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1081 |
|
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1082 |
Automatic mode only handles common use cases. For example, it avoids taking |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1083 |
action in the case of ambiguity, and it ignores unstable changesets that |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1084 |
are not related to your working copy. |
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3198
diff
changeset
|
1085 |
It also refuses to solve bumped or divergent changesets unless you |
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3198
diff
changeset
|
1086 |
explicitly request such behavior (see below). |
1528
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1087 |
|
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1088 |
Eliminating all instability around your working copy may require multiple |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1089 |
invocations of :hg:`evolve`. Alternately, use ``--all`` to recursively |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1090 |
select and evolve all unstable changesets that can be rebased onto the |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1091 |
working copy parent. |
1528
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1092 |
This is more powerful than successive invocations, since ``--all`` handles |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1093 |
ambiguous cases (e.g. unstable changesets with multiple children) by |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1094 |
evolving all branches. |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1095 |
|
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1096 |
When your repository cannot be handled by automatic mode, you might need to |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1097 |
use ``--rev`` to specify a changeset to evolve. For example, if you have |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1098 |
an unstable changeset that is not related to the working copy parent, |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1099 |
you could use ``--rev`` to evolve it. Or, if some changeset has multiple |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1100 |
unstable children, evolve in automatic mode refuses to guess which one to |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1101 |
evolve; you have to use ``--rev`` in that case. |
1528
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1102 |
|
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1103 |
Alternately, ``--any`` makes evolve search for the next evolvable changeset |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1104 |
regardless of whether it is related to the working copy parent. |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1105 |
|
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1106 |
You can supply multiple revisions to evolve multiple troubled changesets |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1107 |
in a single invocation. In revset terms, ``--any`` is equivalent to ``--rev |
1528
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1108 |
first(unstable())``. ``--rev`` and ``--all`` are mutually exclusive, as are |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1109 |
``--rev`` and ``--any``. |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1110 |
|
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1111 |
``hg evolve --any --all`` is useful for cleaning up instability across all |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1112 |
branches, letting evolve figure out the appropriate order and destination. |
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1113 |
|
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1114 |
When you have troubled changesets that are not unstable, :hg:`evolve` |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1115 |
refuses to consider them unless you specify the category of trouble you |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1116 |
wish to resolve, with ``--bumped`` or ``--divergent``. These options are |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1117 |
currently mutually exclusive with each other and with ``--unstable`` |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1118 |
(the default). You can combine ``--bumped`` or ``--divergent`` with |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1119 |
``--rev``, ``--all``, or ``--any``. |
1528
afb0a33c4f6c
evolve: rewrite command help (evolve command only)
Greg Ward <greg@gerg.ca>
parents:
1527
diff
changeset
|
1120 |
|
1634
9ae4e79a28f3
evolve--list: initial implementation
Kostia Balytskyi <ikostia@fb.com>
parents:
1633
diff
changeset
|
1121 |
You can also use the evolve command to list the troubles affecting your |
9ae4e79a28f3
evolve--list: initial implementation
Kostia Balytskyi <ikostia@fb.com>
parents:
1633
diff
changeset
|
1122 |
repository by using the --list flag. You can choose to display only some |
9ae4e79a28f3
evolve--list: initial implementation
Kostia Balytskyi <ikostia@fb.com>
parents:
1633
diff
changeset
|
1123 |
categories of troubles with the --unstable, --divergent or --bumped flags. |
269
6c6bb7a23bb5
stabilize: improve unstable selection heuristic
Patrick Mezard <patrick@mezard.eu>
parents:
268
diff
changeset
|
1124 |
""" |
145
928f217c1701
stabilize: stabilize my topological branch only
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
142
diff
changeset
|
1125 |
|
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1126 |
opts = evolvecmd._checkevolveopts(repo, opts) |
1325
1fe3da0b4601
evolve: add --rev option to the evolve command
Laurent Charignon <lcharignon@fb.com>
parents:
1324
diff
changeset
|
1127 |
# Options |
465
4a039a8c1cf3
stabilize: --continue support !!!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
464
diff
changeset
|
1128 |
contopt = opts['continue'] |
4a039a8c1cf3
stabilize: --continue support !!!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
464
diff
changeset
|
1129 |
anyopt = opts['any'] |
704 | 1130 |
allopt = opts['all'] |
1318
29363f79514f
evolve: move code to track progress and start node
Laurent Charignon <lcharignon@fb.com>
parents:
1317
diff
changeset
|
1131 |
startnode = repo['.'] |
703
a246b02499d9
evolve: extract evolve --any implementation into a function.
Levi Bard <levi@unity3d.com>
parents:
663
diff
changeset
|
1132 |
dryrunopt = opts['dry_run'] |
1047
d830377bf186
evolve: adds a --confirm option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1046
diff
changeset
|
1133 |
confirmopt = opts['confirm'] |
1325
1fe3da0b4601
evolve: add --rev option to the evolve command
Laurent Charignon <lcharignon@fb.com>
parents:
1324
diff
changeset
|
1134 |
revopt = opts['rev'] |
2834
38db1466c6fb
log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents:
2803
diff
changeset
|
1135 |
|
3155
b237c1c6dc19
evolve: rename --phasedivergent flag to --phase-divergent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3154
diff
changeset
|
1136 |
troublecategories = ['phase_divergent', 'content_divergent', 'orphan'] |
3154
406992d0d611
evolve: rename --contentdivergent flag to --content-divergent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
1137 |
specifiedcategories = [t.replace('_', '') |
406992d0d611
evolve: rename --contentdivergent flag to --content-divergent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
1138 |
for t in troublecategories |
406992d0d611
evolve: rename --contentdivergent flag to --content-divergent
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3149
diff
changeset
|
1139 |
if opts[t]] |
3386
2a51107e60cf
evolve: add a utility fn to check validity of opts passed to `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3385
diff
changeset
|
1140 |
if opts['list']: |
3068
8adf34767c29
pager: add support to `hg evolve --list`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
2953
diff
changeset
|
1141 |
compat.startpager(ui, 'evolve') |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1142 |
evolvecmd.listtroubles(ui, repo, specifiedcategories, **opts) |
1634
9ae4e79a28f3
evolve--list: initial implementation
Kostia Balytskyi <ikostia@fb.com>
parents:
1633
diff
changeset
|
1143 |
return |
9ae4e79a28f3
evolve--list: initial implementation
Kostia Balytskyi <ikostia@fb.com>
parents:
1633
diff
changeset
|
1144 |
|
2834
38db1466c6fb
log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents:
2803
diff
changeset
|
1145 |
targetcat = 'orphan' |
1404
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1146 |
if 1 < len(specifiedcategories): |
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1147 |
msg = _('cannot specify more than one trouble category to solve (yet)') |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1148 |
raise error.Abort(msg) |
1404
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1149 |
elif len(specifiedcategories) == 1: |
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1150 |
targetcat = specifiedcategories[0] |
1409
3276730e4b32
evolve: move the 'update' if '.' is obsolete earlier
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1408
diff
changeset
|
1151 |
elif repo['.'].obsolete(): |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1152 |
displayer = cmdutil.show_changeset(ui, repo, |
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1153 |
{'template': shorttemplate}) |
1409
3276730e4b32
evolve: move the 'update' if '.' is obsolete earlier
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1408
diff
changeset
|
1154 |
# no args and parent is obsolete, update to successors |
3276730e4b32
evolve: move the 'update' if '.' is obsolete earlier
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1408
diff
changeset
|
1155 |
try: |
3276730e4b32
evolve: move the 'update' if '.' is obsolete earlier
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1408
diff
changeset
|
1156 |
ctx = repo[_singlesuccessor(repo, repo['.'])] |
3467
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3466
diff
changeset
|
1157 |
except utility.MultipleSuccessorsError as exc: |
1409
3276730e4b32
evolve: move the 'update' if '.' is obsolete earlier
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1408
diff
changeset
|
1158 |
repo.ui.write_err('parent is obsolete with multiple successors:\n') |
3276730e4b32
evolve: move the 'update' if '.' is obsolete earlier
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1408
diff
changeset
|
1159 |
for ln in exc.successorssets: |
3276730e4b32
evolve: move the 'update' if '.' is obsolete earlier
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1408
diff
changeset
|
1160 |
for n in ln: |
3276730e4b32
evolve: move the 'update' if '.' is obsolete earlier
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1408
diff
changeset
|
1161 |
displayer.show(repo[n]) |
3276730e4b32
evolve: move the 'update' if '.' is obsolete earlier
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1408
diff
changeset
|
1162 |
return 2 |
3276730e4b32
evolve: move the 'update' if '.' is obsolete earlier
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1408
diff
changeset
|
1163 |
|
1410
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1164 |
ui.status(_('update:')) |
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1165 |
if not ui.quiet: |
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1166 |
displayer.show(ctx) |
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1167 |
|
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1168 |
if dryrunopt: |
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1169 |
return 0 |
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1170 |
res = hg.update(repo, ctx.rev()) |
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1171 |
if ctx != startnode: |
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1172 |
ui.status(_('working directory is now at %s\n') % ctx) |
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1173 |
return res |
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1174 |
|
986
c1f8ece4182d
evolve: add --tool option so we don't have to use HGMERGE
Greg Ward <greg@gerg.ca>
parents:
985
diff
changeset
|
1175 |
ui.setconfig('ui', 'forcemerge', opts.get('tool', ''), 'evolve') |
1323
603104c880f7
evolve: simplify the evolve function
Laurent Charignon <lcharignon@fb.com>
parents:
1322
diff
changeset
|
1176 |
troubled = set(repo.revs('troubled()')) |
145
928f217c1701
stabilize: stabilize my topological branch only
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
142
diff
changeset
|
1177 |
|
1318
29363f79514f
evolve: move code to track progress and start node
Laurent Charignon <lcharignon@fb.com>
parents:
1317
diff
changeset
|
1178 |
# Progress handling |
29363f79514f
evolve: move code to track progress and start node
Laurent Charignon <lcharignon@fb.com>
parents:
1317
diff
changeset
|
1179 |
seen = 1 |
1323
603104c880f7
evolve: simplify the evolve function
Laurent Charignon <lcharignon@fb.com>
parents:
1322
diff
changeset
|
1180 |
count = allopt and len(troubled) or 1 |
1319
8376fe35ebda
evolve: add new variable and comment
Laurent Charignon <lcharignon@fb.com>
parents:
1318
diff
changeset
|
1181 |
showprogress = allopt |
1318
29363f79514f
evolve: move code to track progress and start node
Laurent Charignon <lcharignon@fb.com>
parents:
1317
diff
changeset
|
1182 |
|
29363f79514f
evolve: move code to track progress and start node
Laurent Charignon <lcharignon@fb.com>
parents:
1317
diff
changeset
|
1183 |
def progresscb(): |
1325
1fe3da0b4601
evolve: add --rev option to the evolve command
Laurent Charignon <lcharignon@fb.com>
parents:
1324
diff
changeset
|
1184 |
if revopt or allopt: |
1624
081605c2e9b6
evolve: mark progress units for translation
Anton Shestakov <av6@dwimlabs.net>
parents:
1623
diff
changeset
|
1185 |
ui.progress(_('evolve'), seen, unit=_('changesets'), total=count) |
1099
bac4e0bc9f6a
evolve: write a status message when the working directory changes
David Soria Parra <davidsp@fb.com>
parents:
1067
diff
changeset
|
1186 |
|
1319
8376fe35ebda
evolve: add new variable and comment
Laurent Charignon <lcharignon@fb.com>
parents:
1318
diff
changeset
|
1187 |
# Continuation handling |
465
4a039a8c1cf3
stabilize: --continue support !!!
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
464
diff
changeset
|
1188 |
if contopt: |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1189 |
evolvestate = state.cmdstate(repo) |
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1190 |
if not evolvestate: |
1597
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1191 |
raise error.Abort('no evolve to continue') |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1192 |
evolvestate.load() |
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1193 |
orig = repo[evolvestate['current']] |
3385
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1194 |
with repo.wlock(), repo.lock(): |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1195 |
ctx = orig |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1196 |
source = ctx.extra().get('source') |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1197 |
extra = {} |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1198 |
if source: |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1199 |
extra['source'] = source |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1200 |
extra['intermediate-source'] = ctx.hex() |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1201 |
else: |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1202 |
extra['source'] = ctx.hex() |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1203 |
user = ctx.user() |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1204 |
date = ctx.date() |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1205 |
message = ctx.description() |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1206 |
ui.status(_('evolving %d:%s "%s"\n') % (ctx.rev(), ctx, |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1207 |
message.split('\n', 1)[0])) |
3388
be41e4740a25
evolve: use phases.new-commit config to retain phase information (issue5720)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3386
diff
changeset
|
1208 |
targetphase = max(ctx.phase(), phases.draft) |
be41e4740a25
evolve: use phases.new-commit config to retain phase information (issue5720)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3386
diff
changeset
|
1209 |
overrides = {('phases', 'new-commit'): targetphase} |
be41e4740a25
evolve: use phases.new-commit config to retain phase information (issue5720)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3386
diff
changeset
|
1210 |
|
be41e4740a25
evolve: use phases.new-commit config to retain phase information (issue5720)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3386
diff
changeset
|
1211 |
with repo.ui.configoverride(overrides, 'evolve-continue'): |
be41e4740a25
evolve: use phases.new-commit config to retain phase information (issue5720)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3386
diff
changeset
|
1212 |
node = repo.commit(text=message, user=user, |
be41e4740a25
evolve: use phases.new-commit config to retain phase information (issue5720)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3386
diff
changeset
|
1213 |
date=date, extra=extra) |
be41e4740a25
evolve: use phases.new-commit config to retain phase information (issue5720)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3386
diff
changeset
|
1214 |
|
3385
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1215 |
obsolete.createmarkers(repo, [(ctx, (repo[node],))]) |
3457
82e9f9603b1b
evolvestate: rename the file to state.py and class name to cmdstate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3456
diff
changeset
|
1216 |
evolvestate.delete() |
3385
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1217 |
return |
823031b51d81
evolve: don't use graftstate for continuing `hg evolve`
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3375
diff
changeset
|
1218 |
|
1402
08ae023882f1
evolve: check for uncommited change earlier
Laurent Charignon <lcharignon@fb.com>
parents:
1398
diff
changeset
|
1219 |
cmdutil.bailifchanged(repo) |
08ae023882f1
evolve: check for uncommited change earlier
Laurent Charignon <lcharignon@fb.com>
parents:
1398
diff
changeset
|
1220 |
|
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1221 |
revs = evolvecmd._selectrevs(repo, allopt, revopt, anyopt, targetcat) |
1410
2c451fece7a6
evolve: unify revision handling and rework error message
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1409
diff
changeset
|
1222 |
|
1404
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1223 |
if not revs: |
3465
ffe566999920
evolvecmd: move code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3464
diff
changeset
|
1224 |
return evolvecmd._handlenotrouble(ui, repo, allopt, revopt, anyopt, targetcat) |
1404
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1225 |
|
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1226 |
# For the progress bar to show |
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1227 |
count = len(revs) |
3459
218fbcc3220c
evolve: store the replacements occurred during `hg evolve` at top level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3458
diff
changeset
|
1228 |
replacements = {} |
1404
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1229 |
# Order the revisions |
2834
38db1466c6fb
log: unstable was renamed into orphan
Boris Feld <boris.feld@octobus.net>
parents:
2803
diff
changeset
|
1230 |
if targetcat == 'orphan': |
1411
64515965c0df
evolve: some style fix
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1410
diff
changeset
|
1231 |
revs = _orderrevs(repo, revs) |
1404
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1232 |
for rev in revs: |
3459
218fbcc3220c
evolve: store the replacements occurred during `hg evolve` at top level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3458
diff
changeset
|
1233 |
curctx = repo[rev] |
1404
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1234 |
progresscb() |
3461
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3460
diff
changeset
|
1235 |
ret = evolvecmd._solveone(ui, repo, curctx, dryrunopt, confirmopt, |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3460
diff
changeset
|
1236 |
progresscb, targetcat) |
1404
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1237 |
seen += 1 |
3459
218fbcc3220c
evolve: store the replacements occurred during `hg evolve` at top level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3458
diff
changeset
|
1238 |
if ret[0]: |
218fbcc3220c
evolve: store the replacements occurred during `hg evolve` at top level
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3458
diff
changeset
|
1239 |
replacements[curctx.node()] = [ret[1]] |
1404
848a04c078c7
evolve: add selector for trouble types
Laurent Charignon <lcharignon@fb.com>
parents:
1403
diff
changeset
|
1240 |
progresscb() |
3466
0a8e3130ad00
evolvecmd: move more core from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3465
diff
changeset
|
1241 |
evolvecmd._cleanup(ui, repo, startnode, showprogress) |
469
abeb17a9e313
stabilize: handle latecomer
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
468
diff
changeset
|
1242 |
|
2745
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1243 |
def _gettopic(ctx): |
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1244 |
"""handle topic fetching with or without the extension""" |
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1245 |
return getattr(ctx, 'topic', lambda: '')() |
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1246 |
|
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1247 |
def _gettopicidx(ctx): |
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1248 |
"""handle topic fetching with or without the extension""" |
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1249 |
return getattr(ctx, 'topicidx', lambda: None)() |
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1250 |
|
2742
64fb1a082f58
prev: add '_getcurrenttopic' helper and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2741
diff
changeset
|
1251 |
def _getcurrenttopic(repo): |
64fb1a082f58
prev: add '_getcurrenttopic' helper and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2741
diff
changeset
|
1252 |
return getattr(repo, 'currenttopic', '') |
64fb1a082f58
prev: add '_getcurrenttopic' helper and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2741
diff
changeset
|
1253 |
|
2736
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1254 |
def _prevupdate(repo, displayer, target, bookmark, dryrun): |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1255 |
if dryrun: |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1256 |
repo.ui.write(('hg update %s;\n' % target.rev())) |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1257 |
if bookmark is not None: |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1258 |
repo.ui.write(('hg bookmark %s -r %s;\n' |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1259 |
% (bookmark, target.rev()))) |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1260 |
else: |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1261 |
ret = hg.update(repo, target.rev()) |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1262 |
if not ret: |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1263 |
tr = lock = None |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1264 |
try: |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1265 |
lock = repo.lock() |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1266 |
tr = repo.transaction('previous') |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1267 |
if bookmark is not None: |
2752
4457aa1d81aa
compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2748
diff
changeset
|
1268 |
bmchanges = [(bookmark, target.node())] |
4457aa1d81aa
compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2748
diff
changeset
|
1269 |
compat.bookmarkapplychanges(repo, tr, bmchanges) |
2736
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1270 |
else: |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1271 |
bookmarksmod.deactivate(repo) |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1272 |
tr.close() |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1273 |
finally: |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1274 |
lockmod.release(tr, lock) |
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1275 |
|
3196
94e5235e95f5
evolve: make prev/next respect --quiet flag (issue5742)
Martin von Zweigbergk <martinvonz@google.com>
parents:
3185
diff
changeset
|
1276 |
if not repo.ui.quiet: |
94e5235e95f5
evolve: make prev/next respect --quiet flag (issue5742)
Martin von Zweigbergk <martinvonz@google.com>
parents:
3185
diff
changeset
|
1277 |
displayer.show(target) |
2739
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1278 |
|
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1279 |
def _findprevtarget(repo, displayer, movebookmark=False, topic=True): |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1280 |
target = bookmark = None |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1281 |
wkctx = repo[None] |
2741
51d669b16fa8
prev: explicitly use 'p1' as a variable name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2739
diff
changeset
|
1282 |
p1 = wkctx.parents()[0] |
51d669b16fa8
prev: explicitly use 'p1' as a variable name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2739
diff
changeset
|
1283 |
parents = p1.parents() |
2742
64fb1a082f58
prev: add '_getcurrenttopic' helper and use it
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2741
diff
changeset
|
1284 |
currenttopic = _getcurrenttopic(repo) |
2745
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1285 |
|
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1286 |
# we do not filter in the 1 case to allow prev to t0 |
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1287 |
if currenttopic and topic and _gettopicidx(p1) != 1: |
3362
92b414710d2e
prev: jump to parent's successor if parent is obsolete and topic is involved
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3232
diff
changeset
|
1288 |
parents = [repo[_singlesuccessor(repo, ctx)] if ctx.mutable() else ctx |
92b414710d2e
prev: jump to parent's successor if parent is obsolete and topic is involved
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3232
diff
changeset
|
1289 |
for ctx in parents] |
2739
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1290 |
parents = [ctx for ctx in parents if ctx.topic() == currenttopic] |
2741
51d669b16fa8
prev: explicitly use 'p1' as a variable name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2739
diff
changeset
|
1291 |
|
51d669b16fa8
prev: explicitly use 'p1' as a variable name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2739
diff
changeset
|
1292 |
# issue message for the various case |
51d669b16fa8
prev: explicitly use 'p1' as a variable name
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2739
diff
changeset
|
1293 |
if p1.node() == node.nullid: |
2739
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1294 |
repo.ui.warn(_('already at repository root\n')) |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1295 |
elif not parents and currenttopic: |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1296 |
repo.ui.warn(_('no parent in topic "%s"\n') % currenttopic) |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1297 |
repo.ui.warn(_('(do you want --no-topic)\n')) |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1298 |
elif len(parents) == 1: |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1299 |
target = parents[0] |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1300 |
bookmark = None |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1301 |
if movebookmark: |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1302 |
bookmark = repo._activebookmark |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1303 |
else: |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1304 |
for p in parents: |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1305 |
displayer.show(p) |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1306 |
repo.ui.warn(_('multiple parents, explicitly update to one\n')) |
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1307 |
return target, bookmark |
2736
3c87d5276394
prev: extract the function performing the update
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2735
diff
changeset
|
1308 |
|
2043
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1309 |
@eh.command( |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1310 |
'^previous', |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1311 |
[('B', 'move-bookmark', False, |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1312 |
_('move active bookmark after update')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1313 |
('', 'merge', False, _('bring uncommitted change along')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1314 |
('', 'no-topic', False, _('ignore topic and move topologically')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1315 |
('n', 'dry-run', False, |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1316 |
_('do not perform actions, just print what would be done'))], |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1317 |
'[OPTION]...') |
1160
e29a813f6af5
Make next/prev only move bookmarks optionally
Ryan McElroy <rmcelroy@fb.com>
parents:
1157
diff
changeset
|
1318 |
def cmdprevious(ui, repo, **opts): |
1572
44e9c0a264de
evolve: improve help for prev, next commands
Greg Ward <greg@gerg.ca>
parents:
1571
diff
changeset
|
1319 |
"""update to parent revision |
44e9c0a264de
evolve: improve help for prev, next commands
Greg Ward <greg@gerg.ca>
parents:
1571
diff
changeset
|
1320 |
|
44e9c0a264de
evolve: improve help for prev, next commands
Greg Ward <greg@gerg.ca>
parents:
1571
diff
changeset
|
1321 |
Displays the summary line of the destination for clarity.""" |
1742
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1322 |
wlock = None |
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1323 |
dryrunopt = opts['dry_run'] |
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1324 |
if not dryrunopt: |
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1325 |
wlock = repo.wlock() |
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1326 |
try: |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1327 |
wkctx = repo[None] |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1328 |
wparents = wkctx.parents() |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1329 |
if len(wparents) != 1: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1330 |
raise error.Abort('merge in progress') |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1331 |
if not opts['merge']: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1332 |
try: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1333 |
cmdutil.bailifchanged(repo) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1334 |
except error.Abort as exc: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1335 |
exc.hint = _('do you want --merge?') |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1336 |
raise |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1337 |
|
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1338 |
displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) |
2743
2fe562f94ead
prev: retrieve the 'no-topic' result is a clear and reusable option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2742
diff
changeset
|
1339 |
topic = not opts.get("no_topic", False) |
2739
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1340 |
|
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1341 |
target, bookmark = _findprevtarget(repo, displayer, |
2743
2fe562f94ead
prev: retrieve the 'no-topic' result is a clear and reusable option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2742
diff
changeset
|
1342 |
opts.get('move_bookmark'), topic) |
2739
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1343 |
if target is not None: |
2795
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2782
diff
changeset
|
1344 |
backup = repo.ui.backupconfig('_internal', 'keep-topic') |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2782
diff
changeset
|
1345 |
try: |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2782
diff
changeset
|
1346 |
if topic and _getcurrenttopic(repo) != _gettopic(target): |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2782
diff
changeset
|
1347 |
repo.ui.setconfig('_internal', 'keep-topic', 'yes', |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2782
diff
changeset
|
1348 |
source='topic-extension') |
2745
b38112b43a27
prev: allow to update to 't0' from 't1'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2743
diff
changeset
|
1349 |
_prevupdate(repo, displayer, target, bookmark, dryrunopt) |
2795
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2782
diff
changeset
|
1350 |
finally: |
0dc119ed06b4
compat: avoid using configoveride
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2782
diff
changeset
|
1351 |
repo.ui.restoreconfig(backup) |
2739
7d86594cb829
prev: extract the code computing the destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2738
diff
changeset
|
1352 |
return 0 |
1500 | 1353 |
else: |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1354 |
return 1 |
1742
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1355 |
finally: |
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1356 |
lockmod.release(wlock) |
127
7e113963f2c8
Add gup and gdown command to mimic qpop and qpush command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
119
diff
changeset
|
1357 |
|
2043
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1358 |
@eh.command( |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1359 |
'^next', |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1360 |
[('B', 'move-bookmark', False, |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1361 |
_('move active bookmark after update')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1362 |
('', 'merge', False, _('bring uncommitted change along')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1363 |
('', 'evolve', False, _('evolve the next changeset if necessary')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1364 |
('', 'no-topic', False, _('ignore topic and move topologically')), |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1365 |
('n', 'dry-run', False, |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1366 |
_('do not perform actions, just print what would be done'))], |
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1367 |
'[OPTION]...') |
1160
e29a813f6af5
Make next/prev only move bookmarks optionally
Ryan McElroy <rmcelroy@fb.com>
parents:
1157
diff
changeset
|
1368 |
def cmdnext(ui, repo, **opts): |
1572
44e9c0a264de
evolve: improve help for prev, next commands
Greg Ward <greg@gerg.ca>
parents:
1571
diff
changeset
|
1369 |
"""update to next child revision |
44e9c0a264de
evolve: improve help for prev, next commands
Greg Ward <greg@gerg.ca>
parents:
1571
diff
changeset
|
1370 |
|
44e9c0a264de
evolve: improve help for prev, next commands
Greg Ward <greg@gerg.ca>
parents:
1571
diff
changeset
|
1371 |
Use the ``--evolve`` flag to evolve unstable children on demand. |
44e9c0a264de
evolve: improve help for prev, next commands
Greg Ward <greg@gerg.ca>
parents:
1571
diff
changeset
|
1372 |
|
44e9c0a264de
evolve: improve help for prev, next commands
Greg Ward <greg@gerg.ca>
parents:
1571
diff
changeset
|
1373 |
Displays the summary line of the destination for clarity. |
44e9c0a264de
evolve: improve help for prev, next commands
Greg Ward <greg@gerg.ca>
parents:
1571
diff
changeset
|
1374 |
""" |
1742
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1375 |
wlock = None |
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1376 |
dryrunopt = opts['dry_run'] |
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1377 |
if not dryrunopt: |
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1378 |
wlock = repo.wlock() |
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1379 |
try: |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1380 |
wkctx = repo[None] |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1381 |
wparents = wkctx.parents() |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1382 |
if len(wparents) != 1: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1383 |
raise error.Abort('merge in progress') |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1384 |
if not opts['merge']: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1385 |
try: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1386 |
cmdutil.bailifchanged(repo) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1387 |
except error.Abort as exc: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1388 |
exc.hint = _('do you want --merge?') |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1389 |
raise |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1390 |
|
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1391 |
children = [ctx for ctx in wparents[0].children() if not ctx.obsolete()] |
2803
843311b8876e
next: use the utility to retrieve the current topic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2795
diff
changeset
|
1392 |
topic = _getcurrenttopic(repo) |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1393 |
filtered = [] |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1394 |
if topic and not opts.get("no_topic", False): |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1395 |
filtered = [ctx for ctx in children if ctx.topic() != topic] |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1396 |
# XXX N-square membership on children |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1397 |
children = [ctx for ctx in children if ctx not in filtered] |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1398 |
displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1399 |
if len(children) == 1: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1400 |
c = children[0] |
1835
93d4661a6ee7
compat: drop bookmark compatibility layer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1834
diff
changeset
|
1401 |
bm = repo._activebookmark |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1402 |
shouldmove = opts.get('move_bookmark') and bm is not None |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1403 |
if dryrunopt: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1404 |
ui.write(('hg update %s;\n' % c.rev())) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1405 |
if shouldmove: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1406 |
ui.write(('hg bookmark %s -r %s;\n' % (bm, c.rev()))) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1407 |
else: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1408 |
ret = hg.update(repo, c.rev()) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1409 |
if not ret: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1410 |
lock = tr = None |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1411 |
try: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1412 |
lock = repo.lock() |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1413 |
tr = repo.transaction('next') |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1414 |
if shouldmove: |
2752
4457aa1d81aa
compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2748
diff
changeset
|
1415 |
bmchanges = [(bm, c.node())] |
4457aa1d81aa
compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2748
diff
changeset
|
1416 |
compat.bookmarkapplychanges(repo, tr, bmchanges) |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1417 |
else: |
1835
93d4661a6ee7
compat: drop bookmark compatibility layer
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1834
diff
changeset
|
1418 |
bookmarksmod.deactivate(repo) |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1419 |
tr.close() |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1420 |
finally: |
1742
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1421 |
lockmod.release(tr, lock) |
3196
94e5235e95f5
evolve: make prev/next respect --quiet flag (issue5742)
Martin von Zweigbergk <martinvonz@google.com>
parents:
3185
diff
changeset
|
1422 |
if not ui.quiet: |
94e5235e95f5
evolve: make prev/next respect --quiet flag (issue5742)
Martin von Zweigbergk <martinvonz@google.com>
parents:
3185
diff
changeset
|
1423 |
displayer.show(c) |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1424 |
result = 0 |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1425 |
elif children: |
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3198
diff
changeset
|
1426 |
ui.warn(_("ambiguous next changeset:\n")) |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1427 |
for c in children: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1428 |
displayer.show(c) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1429 |
ui.warn(_('explicitly update to one of them\n')) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1430 |
result = 1 |
1500 | 1431 |
else: |
3464
908d2b5dfa7e
evolvecmd: move more code from __init__.py to evolvecmd.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3463
diff
changeset
|
1432 |
aspchildren = evolvecmd._aspiringchildren(repo, [repo['.'].rev()]) |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1433 |
if topic: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1434 |
filtered.extend(repo[c] for c in children |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1435 |
if repo[c].topic() != topic) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1436 |
# XXX N-square membership on children |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1437 |
aspchildren = [ctx for ctx in aspchildren if ctx not in filtered] |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1438 |
if not opts['evolve'] or not aspchildren: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1439 |
if filtered: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1440 |
ui.warn(_('no children on topic "%s"\n') % topic) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1441 |
ui.warn(_('do you want --no-topic\n')) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1442 |
else: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1443 |
ui.warn(_('no children\n')) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1444 |
if aspchildren: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1445 |
msg = _('(%i unstable changesets to be evolved here, ' |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1446 |
'do you want --evolve?)\n') |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1447 |
ui.warn(msg % len(aspchildren)) |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1448 |
result = 1 |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1449 |
elif 1 < len(aspchildren): |
3225
28fb347a5bf8
typos: fix typos in several locations
Kyle Lippincott <spectral@google.com>
parents:
3198
diff
changeset
|
1450 |
ui.warn(_("ambiguous next (unstable) changeset:\n")) |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1451 |
for c in aspchildren: |
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1452 |
displayer.show(repo[c]) |
1756
a7dcfff8c4a9
evolve: use single quotes in usage messages
Martin von Zweigbergk <martinvonz@google.com>
parents:
1755
diff
changeset
|
1453 |
ui.warn(_("(run 'hg evolve --rev REV' on one of them)\n")) |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1454 |
return 1 |
1628
db19b1dc5c45
topic: restrict 'hg prev' to current topic unless --no-topic is passed
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1627
diff
changeset
|
1455 |
else: |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1456 |
cmdutil.bailifchanged(repo) |
3461
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3460
diff
changeset
|
1457 |
result = evolvecmd._solveone(ui, repo, repo[aspchildren[0]], |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3460
diff
changeset
|
1458 |
dryrunopt, False, lambda: None, |
6475d2046f87
evolvecmd: introduce a new module to handle `hg evolve` related code
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3460
diff
changeset
|
1459 |
category='orphan') |
3458
210132852a3d
evolve: make the _solve* functions return a tuple
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3457
diff
changeset
|
1460 |
# making sure a next commit is formed |
210132852a3d
evolve: make the _solve* functions return a tuple
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3457
diff
changeset
|
1461 |
if result[0] and result[1]: |
2405
4ff849709fea
label: add a label for the node in the "wc now at" message
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2404
diff
changeset
|
1462 |
ui.status(_('working directory now at %s\n') |
2443
6a23a55f77d2
next: prevent a color related crash when evolve
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2442
diff
changeset
|
1463 |
% ui.label(str(repo['.']), 'evolve.node')) |
3458
210132852a3d
evolve: make the _solve* functions return a tuple
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3457
diff
changeset
|
1464 |
return 0 |
1449
9be1cadf7a07
next: add a --evolve option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1448
diff
changeset
|
1465 |
return 1 |
1741
8c05184672ae
evolve: indent cmdnext and cmdprev ready for locking change (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1739
diff
changeset
|
1466 |
return result |
1742
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1467 |
finally: |
970a4c13ebc3
evolve: lock the working copy early in next and prev (issue5244)
Simon Farnsworth <simonfar@fb.com>
parents:
1741
diff
changeset
|
1468 |
lockmod.release(wlock) |
87
246b8fefd0a5
[evolution/obsolete] very experimental and crude evolve support.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
82
diff
changeset
|
1469 |
|
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
1470 |
@eh.wrapcommand('commit') |
116
64ca29eef349
Add a -o option to commit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
113
diff
changeset
|
1471 |
def commitwrapper(orig, ui, repo, *arg, **kwargs): |
1558
4706475e0c5d
commitwrapper: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
1557
diff
changeset
|
1472 |
tr = None |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
1473 |
if kwargs.get('amend', False): |
1255
a2d4901e211e
commit: avoid potential deadlock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1253
diff
changeset
|
1474 |
wlock = lock = None |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
1475 |
else: |
1255
a2d4901e211e
commit: avoid potential deadlock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1253
diff
changeset
|
1476 |
wlock = repo.wlock() |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
1477 |
lock = repo.lock() |
137
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1478 |
try: |
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1479 |
obsoleted = kwargs.get('obsolete', []) |
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1480 |
if obsoleted: |
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1481 |
obsoleted = repo.set('%lr', obsoleted) |
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1482 |
result = orig(ui, repo, *arg, **kwargs) |
1659 | 1483 |
if not result: # commit succeeded |
137
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1484 |
new = repo['-1'] |
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1485 |
oldbookmarks = [] |
444
aedb6b8ace86
drop repo.addobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
443
diff
changeset
|
1486 |
markers = [] |
137
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1487 |
for old in obsoleted: |
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1488 |
oldbookmarks.extend(repo.nodebookmarks(old.node())) |
444
aedb6b8ace86
drop repo.addobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
443
diff
changeset
|
1489 |
markers.append((old, (new,))) |
aedb6b8ace86
drop repo.addobsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
443
diff
changeset
|
1490 |
if markers: |
1070
527b12a59628
drop relevant marker compat
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1069
diff
changeset
|
1491 |
obsolete.createmarkers(repo, markers) |
2752
4457aa1d81aa
compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2748
diff
changeset
|
1492 |
bmchanges = [] |
137
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1493 |
for book in oldbookmarks: |
2752
4457aa1d81aa
compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2748
diff
changeset
|
1494 |
bmchanges.append((book, new.node())) |
137
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1495 |
if oldbookmarks: |
1558
4706475e0c5d
commitwrapper: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
1557
diff
changeset
|
1496 |
if not wlock: |
4706475e0c5d
commitwrapper: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
1557
diff
changeset
|
1497 |
wlock = repo.wlock() |
4706475e0c5d
commitwrapper: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
1557
diff
changeset
|
1498 |
if not lock: |
4706475e0c5d
commitwrapper: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
1557
diff
changeset
|
1499 |
lock = repo.lock() |
4706475e0c5d
commitwrapper: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
1557
diff
changeset
|
1500 |
tr = repo.transaction('commit') |
2752
4457aa1d81aa
compat: add a compatibility layer for bookmark move
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2748
diff
changeset
|
1501 |
compat.bookmarkapplychanges(repo, tr, bmchanges) |
1558
4706475e0c5d
commitwrapper: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
1557
diff
changeset
|
1502 |
tr.close() |
137
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1503 |
return result |
bbc653876876
fix evolve test
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
133
diff
changeset
|
1504 |
finally: |
1558
4706475e0c5d
commitwrapper: use bookmarks.recordchange instead of bookmarks.write
Laurent Charignon <lcharignon@fb.com>
parents:
1557
diff
changeset
|
1505 |
lockmod.release(tr, lock, wlock) |
116
64ca29eef349
Add a -o option to commit
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
113
diff
changeset
|
1506 |
|
1220
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1507 |
@eh.wrapcommand('strip', extension='strip', opts=[ |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1508 |
('', 'bundle', None, _("delete the commit entirely and move it to a " |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
1509 |
"backup bundle")), |
1220
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1510 |
]) |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1511 |
def stripwrapper(orig, ui, repo, *revs, **kwargs): |
3080
461c9d940519
evolve: registed configitems if available
Boris Feld <boris.feld@octobus.net>
parents:
3074
diff
changeset
|
1512 |
if (not ui.configbool('experimental', 'prunestrip', False) or |
1220
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1513 |
kwargs.get('bundle', False)): |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1514 |
return orig(ui, repo, *revs, **kwargs) |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1515 |
|
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1516 |
if kwargs.get('force'): |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1517 |
ui.warn(_("warning: --force has no effect during strip with evolve " |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1518 |
"enabled\n")) |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1519 |
if kwargs.get('no_backup', False): |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1520 |
ui.warn(_("warning: --no-backup has no effect during strips with " |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1521 |
"evolve enabled\n")) |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1522 |
|
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1523 |
revs = list(revs) + kwargs.pop('rev', []) |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1524 |
revs = set(scmutil.revrange(repo, revs)) |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1525 |
revs = repo.revs("(%ld)::", revs) |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1526 |
kwargs['rev'] = [] |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1527 |
kwargs['new'] = [] |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1528 |
kwargs['succ'] = [] |
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1529 |
kwargs['biject'] = False |
2772
394b836e475b
commands: rewrite the 'evocommands' module to 'cmdrewrite'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2766
diff
changeset
|
1530 |
return cmdrewrite.cmdprune(ui, repo, *revs, **kwargs) |
1220
71240f696f26
strip: add the option for wrapping the strip command
Durham Goode <durham@fb.com>
parents:
1219
diff
changeset
|
1531 |
|
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
1532 |
@eh.wrapcommand('graft') |
117
438fe133b068
Add a -o and -O option to graft.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
116
diff
changeset
|
1533 |
def graftwrapper(orig, ui, repo, *revs, **kwargs): |
419
03672e955bc8
evolve: make graft wrapper handle --rev
Patrick Mezard <patrick@mezard.eu>
parents:
410
diff
changeset
|
1534 |
kwargs = dict(kwargs) |
03672e955bc8
evolve: make graft wrapper handle --rev
Patrick Mezard <patrick@mezard.eu>
parents:
410
diff
changeset
|
1535 |
revs = list(revs) + kwargs.get('rev', []) |
03672e955bc8
evolve: make graft wrapper handle --rev
Patrick Mezard <patrick@mezard.eu>
parents:
410
diff
changeset
|
1536 |
kwargs['rev'] = [] |
417
a1fb18ad29a1
evolve: avoid duplication in graft wrapper
Patrick Mezard <patrick@mezard.eu>
parents:
416
diff
changeset
|
1537 |
obsoleted = kwargs.setdefault('obsolete', []) |
419
03672e955bc8
evolve: make graft wrapper handle --rev
Patrick Mezard <patrick@mezard.eu>
parents:
410
diff
changeset
|
1538 |
|
1256
f8cb01637e75
graft: avoid potential deadlock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1255
diff
changeset
|
1539 |
wlock = lock = None |
119
22f2b700bd59
evolution: proper locking scheme
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
118
diff
changeset
|
1540 |
try: |
1256
f8cb01637e75
graft: avoid potential deadlock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1255
diff
changeset
|
1541 |
wlock = repo.wlock() |
f8cb01637e75
graft: avoid potential deadlock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1255
diff
changeset
|
1542 |
lock = repo.lock() |
119
22f2b700bd59
evolution: proper locking scheme
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
118
diff
changeset
|
1543 |
if kwargs.get('old_obsolete'): |
418
18a0d96ed559
evolve: graft --continue is optional, test
Patrick Mezard <patrick@mezard.eu>
parents:
417
diff
changeset
|
1544 |
if kwargs.get('continue'): |
2051
74934195747b
evolve: switch away from deprecated repo.opener
Martin von Zweigbergk <martinvonz@google.com>
parents:
2049
diff
changeset
|
1545 |
obsoleted.extend(repo.vfs.read('graftstate').splitlines()) |
119
22f2b700bd59
evolution: proper locking scheme
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
118
diff
changeset
|
1546 |
else: |
22f2b700bd59
evolution: proper locking scheme
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
118
diff
changeset
|
1547 |
obsoleted.extend(revs) |
151
e73944b6be8f
evolve: improve graft handling of -O
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
147
diff
changeset
|
1548 |
# convert obsolete target into revs to avoid alias joke |
e73944b6be8f
evolve: improve graft handling of -O
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
147
diff
changeset
|
1549 |
obsoleted[:] = [str(i) for i in repo.revs('%lr', obsoleted)] |
e73944b6be8f
evolve: improve graft handling of -O
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
147
diff
changeset
|
1550 |
if obsoleted and len(revs) > 1: |
e73944b6be8f
evolve: improve graft handling of -O
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
147
diff
changeset
|
1551 |
|
743
af74a5cdf96b
conform to the Mercurial custom of lowercase messages
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
742
diff
changeset
|
1552 |
raise error.Abort(_('cannot graft multiple revisions while ' |
151
e73944b6be8f
evolve: improve graft handling of -O
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
147
diff
changeset
|
1553 |
'obsoleting (for now).')) |
e73944b6be8f
evolve: improve graft handling of -O
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
147
diff
changeset
|
1554 |
|
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
1555 |
return commitwrapper(orig, ui, repo, *revs, **kwargs) |
119
22f2b700bd59
evolution: proper locking scheme
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
118
diff
changeset
|
1556 |
finally: |
1256
f8cb01637e75
graft: avoid potential deadlock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1255
diff
changeset
|
1557 |
lockmod.release(lock, wlock) |
117
438fe133b068
Add a -o and -O option to graft.
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
116
diff
changeset
|
1558 |
|
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
1559 |
@eh.extsetup |
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
1560 |
def oldevolveextsetup(ui): |
1631
7463f5880ce9
prune: remove the kill alias
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1630
diff
changeset
|
1561 |
for cmd in ['prune', 'uncommit', 'touch', 'fold']: |
1226
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
1562 |
try: |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
1563 |
entry = extensions.wrapcommand(cmdtable, cmd, |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
1564 |
warnobserrors) |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
1565 |
except error.UnknownCommand: |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
1566 |
# Commands may be disabled |
901d2f4b21a9
config: allow disabling commands
Durham Goode <durham@fb.com>
parents:
1221
diff
changeset
|
1567 |
continue |
356
56d4c6207ef9
Move obserror warning into the obsolete extension.
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
355
diff
changeset
|
1568 |
|
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
1569 |
entry = cmdutil.findcmd('commit', commands.table)[1] |
303 | 1570 |
entry[1].append(('o', 'obsolete', [], |
1008
a010ba5a0ffb
evolve: deprecated --obsolete and --old-obsolete option on commit and graft
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1007
diff
changeset
|
1571 |
_("make commit obsolete this revision (DEPRECATED)"))) |
491
6989d8fe4ed2
merge evolve and obsolete
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
490
diff
changeset
|
1572 |
entry = cmdutil.findcmd('graft', commands.table)[1] |
303 | 1573 |
entry[1].append(('o', 'obsolete', [], |
1008
a010ba5a0ffb
evolve: deprecated --obsolete and --old-obsolete option on commit and graft
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1007
diff
changeset
|
1574 |
_("make graft obsoletes this revision (DEPRECATED)"))) |
303 | 1575 |
entry[1].append(('O', 'old-obsolete', False, |
1008
a010ba5a0ffb
evolve: deprecated --obsolete and --old-obsolete option on commit and graft
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1007
diff
changeset
|
1576 |
_("make graft obsoletes its source (DEPRECATED)"))) |
211
69a37d56c7fb
evolve: issue the "%i new unstable changeset" in more place
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
196
diff
changeset
|
1577 |
|
1302
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1578 |
@eh.wrapfunction(obsolete, '_checkinvalidmarkers') |
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1579 |
def _checkinvalidmarkers(orig, markers): |
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1580 |
"""search for marker with invalid data and raise error if needed |
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1581 |
|
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1582 |
Exist as a separated function to allow the evolve extension for a more |
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1583 |
subtle handling. |
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1584 |
""" |
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1585 |
if 'debugobsconvert' in sys.argv: |
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1586 |
return |
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1587 |
for mark in markers: |
ebcf23fe3032
evolve: stop conditional wrapping of _checkinvalidmarkers
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1301
diff
changeset
|
1588 |
if node.nullid in mark[1]: |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
1589 |
msg = _('bad obsolescence marker detected: invalid successors nullid') |
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
1590 |
hint = _('You should run `hg debugobsconvert`') |
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
1591 |
raise error.Abort(msg, hint=hint) |
1202
4099b087f672
evolve: handle invalid obsmarkers in the `debugobsconvert`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1198
diff
changeset
|
1592 |
|
2043
c64300906a32
exthelper: move command declaration into the exthelper
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2041
diff
changeset
|
1593 |
@eh.command( |
1159
04bd66779a1f
obsup: hack extension to make in-place upgrading of obsolete markers easy
Augie Fackler <raf@durin42.com>
parents:
1157
diff
changeset
|
1594 |
'debugobsconvert', |
2053
f3765c4a352a
exchange: rename the module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2051
diff
changeset
|
1595 |
[('', 'new-format', obsexchange._bestformat, _('Destination format for markers.'))], |
1159
04bd66779a1f
obsup: hack extension to make in-place upgrading of obsolete markers easy
Augie Fackler <raf@durin42.com>
parents:
1157
diff
changeset
|
1596 |
'') |
04bd66779a1f
obsup: hack extension to make in-place upgrading of obsolete markers easy
Augie Fackler <raf@durin42.com>
parents:
1157
diff
changeset
|
1597 |
def debugobsconvert(ui, repo, new_format): |
1507
6f574c76c142
debugobsconvert: make sure obsstore is loaded before version comparison
Yuya Nishihara <yuya@tcha.org>
parents:
1506
diff
changeset
|
1598 |
origmarkers = repo.obsstore._all # settle version |
1159
04bd66779a1f
obsup: hack extension to make in-place upgrading of obsolete markers easy
Augie Fackler <raf@durin42.com>
parents:
1157
diff
changeset
|
1599 |
if new_format == repo.obsstore._version: |
04bd66779a1f
obsup: hack extension to make in-place upgrading of obsolete markers easy
Augie Fackler <raf@durin42.com>
parents:
1157
diff
changeset
|
1600 |
msg = _('New format is the same as the old format, not upgrading!') |
1547
425c0700aabd
check-code: make evolve.py comply with check-code
Laurent Charignon <lcharignon@fb.com>
parents:
1536
diff
changeset
|
1601 |
raise error.Abort(msg) |
2748
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1602 |
with repo.lock(): |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1603 |
f = repo.svfs('obsstore', 'wb', atomictemp=True) |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1604 |
known = set() |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1605 |
markers = [] |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1606 |
for m in origmarkers: |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1607 |
# filter out invalid markers |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1608 |
if nullid in m[1]: |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1609 |
m = list(m) |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1610 |
m[1] = tuple(s for s in m[1] if s != nullid) |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1611 |
m = tuple(m) |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1612 |
if m in known: |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1613 |
continue |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1614 |
known.add(m) |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1615 |
markers.append(m) |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1616 |
ui.write(_('Old store is version %d, will rewrite in version %d\n') % ( |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1617 |
repo.obsstore._version, new_format)) |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1618 |
map(f.write, obsolete.encodemarkers(markers, True, new_format)) |
723f5b505c48
debugobsconvert: take the lock when writing the obsstore file
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2745
diff
changeset
|
1619 |
f.close() |
1159
04bd66779a1f
obsup: hack extension to make in-place upgrading of obsolete markers easy
Augie Fackler <raf@durin42.com>
parents:
1157
diff
changeset
|
1620 |
ui.write(_('Done!\n')) |
04bd66779a1f
obsup: hack extension to make in-place upgrading of obsolete markers easy
Augie Fackler <raf@durin42.com>
parents:
1157
diff
changeset
|
1621 |
|
864
401da1b38cca
discovery: implement a discovery process and use it for push
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
863
diff
changeset
|
1622 |
|
1827
15ec53d46f44
compat: drop handling of ancestral 'helploader' caller
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
1826
diff
changeset
|
1623 |
def _helploader(ui): |
1414
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
1624 |
return help.gettext(evolutionhelptext) |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
1625 |
|
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
1626 |
@eh.uisetup |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
1627 |
def _setuphelp(ui): |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
1628 |
for entry in help.helptable: |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
1629 |
if entry[0] == "evolution": |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
1630 |
break |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
1631 |
else: |
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
1632 |
help.helptable.append((["evolution"], _("Safely Rewriting History"), |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
1633 |
_helploader)) |
1414
4198e2fad6ba
evolve: add an help topic about evolution
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1413
diff
changeset
|
1634 |
help.helptable.sort() |
1567
536fdfa3c48b
evolve: extract logic to new method _relocatecommit
Shusen LIU <liushusen@fb.com>
parents:
1566
diff
changeset
|
1635 |
|
1597
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1636 |
evolvestateversion = 0 |
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1637 |
|
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1638 |
@eh.uisetup |
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1639 |
def setupevolveunfinished(ui): |
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1640 |
data = ('evolvestate', True, False, _('evolve in progress'), |
2032
dd7e092a854a
flake8: update the code sources to fixes a horde of pyflake warnings
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2024
diff
changeset
|
1641 |
_("use 'hg evolve --continue' or 'hg update -C .' to abort")) |
1597
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1642 |
cmdutil.unfinishedstates.append(data) |
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1643 |
|
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1644 |
@eh.wrapfunction(hg, 'clean') |
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1645 |
def clean(orig, repo, *args, **kwargs): |
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1646 |
ret = orig(repo, *args, **kwargs) |
2070
9105c3c54045
cleanup: stop using 'repo.join' methods
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2064
diff
changeset
|
1647 |
util.unlinkpath(repo.vfs.join('evolvestate'), ignoremissing=True) |
1597
7876ed4fceb7
evolve: write our own custom evolvestate file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
1594
diff
changeset
|
1648 |
return ret |