author | Anton Shestakov <av6@dwimlabs.net> |
Thu, 30 Jan 2020 14:32:09 +0700 | |
branch | mercurial-4.7 |
changeset 5103 | e9e5751f8de4 |
parent 4814 | 48b30ff742cb |
child 4907 | 0ce6510b45ab |
permissions | -rw-r--r-- |
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:
diff
changeset
|
1 |
# Various utility function for the evolve extension |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
2 |
# |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
3 |
# Copyright 2017 Pierre-Yves David <pierre-yves.david@ens-lyon.org> |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
4 |
# |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
6 |
# GNU General Public License version 2 or any later version. |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
7 |
|
3697
6aff4bb3970d
compat: drop compatibility layer for successorssets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3656
diff
changeset
|
8 |
from mercurial import ( |
6aff4bb3970d
compat: drop compatibility layer for successorssets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3656
diff
changeset
|
9 |
obsutil, |
6aff4bb3970d
compat: drop compatibility layer for successorssets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3656
diff
changeset
|
10 |
) |
6aff4bb3970d
compat: drop compatibility layer for successorssets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3656
diff
changeset
|
11 |
|
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
12 |
from mercurial.i18n import _ |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
13 |
|
3309
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
14 |
from mercurial.node import nullrev |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
15 |
|
4341
d1aab9d82f5b
evolve: adapt for deprecated ui.progress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4324
diff
changeset
|
16 |
from . import ( |
d1aab9d82f5b
evolve: adapt for deprecated ui.progress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4324
diff
changeset
|
17 |
compat, |
d1aab9d82f5b
evolve: adapt for deprecated ui.progress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4324
diff
changeset
|
18 |
) |
d1aab9d82f5b
evolve: adapt for deprecated ui.progress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4324
diff
changeset
|
19 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
20 |
shorttemplate = b"[{label('evolve.rev', rev)}] {desc|firstline}\n" |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
21 |
stacktemplate = b"""[{label('evolve.rev', if(topicidx, "s{topicidx}", rev))}] {desc|firstline}\n""" |
2763
4a5b0c373e65
commands: move the touch to the 'evocommands' module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2125
diff
changeset
|
22 |
|
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:
diff
changeset
|
23 |
def obsexcmsg(ui, message, important=False): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
24 |
verbose = ui.configbool(b'experimental', b'verbose-obsolescence-exchange') |
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:
diff
changeset
|
25 |
if verbose: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
26 |
message = b'OBSEXC: ' + message |
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:
diff
changeset
|
27 |
if important or verbose: |
ce39d0f9976d
serveronly: give the sub extension a way to access to the 'evolve' module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
diff
changeset
|
28 |
ui.status(message) |
2054
f9d65d24b9f9
discovery: split discovery related code in 'obsdiscovery'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
29 |
|
f9d65d24b9f9
discovery: split discovery related code in 'obsdiscovery'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
2047
diff
changeset
|
30 |
def obsexcprg(ui, *args, **kwargs): |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
31 |
topic = b'obsmarkers exchange' |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
32 |
if ui.configbool(b'experimental', b'verbose-obsolescence-exchange'): |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
33 |
topic = b'OBSEXC' |
4341
d1aab9d82f5b
evolve: adapt for deprecated ui.progress()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4324
diff
changeset
|
34 |
compat.progress(ui, topic, *args, **kwargs) |
3309
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
35 |
|
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
36 |
def filterparents(parents): |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
37 |
"""filter nullrev parents |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
38 |
|
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
39 |
(and other crazyness)""" |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
40 |
p1, p2 = parents |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
41 |
if p1 == nullrev and p2 == nullrev: |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
42 |
return () |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
43 |
elif p1 != nullrev and (p2 == nullrev or p1 == p2): |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
44 |
return (p1,) |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
45 |
elif p1 == nullrev and p2 != nullrev: |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
46 |
return (p2,) |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
47 |
else: |
09db38b34cb9
parents: add a utility to filter parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
2763
diff
changeset
|
48 |
return parents |
3340
fd90e73bf79a
caches: factorise the cache warming check
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3309
diff
changeset
|
49 |
|
3366
83b372eceb81
caches: pass the transaction to the "shouldwarncache" logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3346
diff
changeset
|
50 |
def shouldwarmcache(repo, tr): |
3340
fd90e73bf79a
caches: factorise the cache warming check
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3309
diff
changeset
|
51 |
configbool = repo.ui.configbool |
3368
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3367
diff
changeset
|
52 |
config = repo.ui.config |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
53 |
desc = getattr(tr, 'desc', b'') |
3368
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3367
diff
changeset
|
54 |
|
3426
be284a34b822
caches: fix automatic warming trigger
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3369
diff
changeset
|
55 |
autocase = False |
4156
f996596d8ccc
caches: no longer warm the cache on strip in "auto" mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
4056
diff
changeset
|
56 |
if tr is None and not getattr(repo, '_destroying', False): |
3426
be284a34b822
caches: fix automatic warming trigger
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3369
diff
changeset
|
57 |
autocase = True |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
58 |
elif desc.startswith(b'serve'): |
3426
be284a34b822
caches: fix automatic warming trigger
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3369
diff
changeset
|
59 |
autocase = True |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
60 |
elif desc.startswith(b'push') and not desc.startswith(b'push-response'): |
3426
be284a34b822
caches: fix automatic warming trigger
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3369
diff
changeset
|
61 |
autocase = True |
be284a34b822
caches: fix automatic warming trigger
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3369
diff
changeset
|
62 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
63 |
autocache = config(b'experimental', b'obshashrange.warm-cache', |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
64 |
b'auto') == b'auto' |
3368
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3367
diff
changeset
|
65 |
if autocache: |
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3367
diff
changeset
|
66 |
warm = autocase |
7310f3ef6dee
caches: add a 'auto' option for obshashrange cache warming
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3367
diff
changeset
|
67 |
else: |
3369
c7fbb79cd366
caches: switch to 'auto' warming by default
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3368
diff
changeset
|
68 |
# note: we should not get to the default case |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
69 |
warm = configbool(b'experimental', b'obshashrange.warm-cache') |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
70 |
if not configbool(b'experimental', b'obshashrange'): |
3340
fd90e73bf79a
caches: factorise the cache warming check
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3309
diff
changeset
|
71 |
return False |
3367
c26dc74b828d
caches: extract some config reading in 'shouldwarmcache'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3366
diff
changeset
|
72 |
if not warm: |
3340
fd90e73bf79a
caches: factorise the cache warming check
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3309
diff
changeset
|
73 |
return False |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
74 |
maxrevs = repo.ui.configint(b'experimental', b'obshashrange.max-revs') |
3346
f4e28b781143
stablerange: use mergepoint based algorithm for the official stable range
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3340
diff
changeset
|
75 |
if maxrevs is not None and maxrevs < len(repo.unfiltered()): |
f4e28b781143
stablerange: use mergepoint based algorithm for the official stable range
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3340
diff
changeset
|
76 |
return False |
3340
fd90e73bf79a
caches: factorise the cache warming check
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3309
diff
changeset
|
77 |
return True |
3467
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3426
diff
changeset
|
78 |
|
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3426
diff
changeset
|
79 |
class MultipleSuccessorsError(RuntimeError): |
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3426
diff
changeset
|
80 |
"""Exception raised by _singlesuccessor when multiple successor sets exists |
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3426
diff
changeset
|
81 |
|
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3426
diff
changeset
|
82 |
The object contains the list of successorssets in its 'successorssets' |
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3426
diff
changeset
|
83 |
attribute to call to easily recover. |
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3426
diff
changeset
|
84 |
""" |
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3426
diff
changeset
|
85 |
|
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3426
diff
changeset
|
86 |
def __init__(self, successorssets): |
41ce24cf288d
utility: move MultipleSuccessorsError from __init__.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3426
diff
changeset
|
87 |
self.successorssets = successorssets |
3468
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
88 |
|
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
89 |
def builddependencies(repo, revs): |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
90 |
"""returns dependency graphs giving an order to solve instability of revs |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
91 |
(see _orderrevs for more information on usage)""" |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
92 |
|
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
93 |
# For each troubled revision we keep track of what instability if any should |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
94 |
# be resolved in order to resolve it. Example: |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
95 |
# dependencies = {3: [6], 6:[]} |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
96 |
# Means that: 6 has no dependency, 3 depends on 6 to be solved |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
97 |
dependencies = {} |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
98 |
|
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
99 |
for r in revs: |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
100 |
dependencies[r] = set() |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
101 |
for p in repo[r].parents(): |
3906
f2cde417a738
builddependencies: extract function for getting successors
Martin von Zweigbergk <martinvonz@google.com>
parents:
3905
diff
changeset
|
102 |
for succ in _successorrevs(repo, p): |
3905
4806d1339c30
builddependencies: share code between single- and multi-successor cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
3904
diff
changeset
|
103 |
if succ in revs: |
4806d1339c30
builddependencies: share code between single- and multi-successor cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
3904
diff
changeset
|
104 |
dependencies[r].add(succ) |
3904
d2d03df3956f
builddependencies: build inverse dict from forward dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
3903
diff
changeset
|
105 |
|
d2d03df3956f
builddependencies: build inverse dict from forward dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
3903
diff
changeset
|
106 |
# rdependencies is the inverted dict of dependencies |
d2d03df3956f
builddependencies: build inverse dict from forward dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
3903
diff
changeset
|
107 |
rdependencies = {r: set() for r in revs} |
d2d03df3956f
builddependencies: build inverse dict from forward dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
3903
diff
changeset
|
108 |
for r, deps in dependencies.items(): |
d2d03df3956f
builddependencies: build inverse dict from forward dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
3903
diff
changeset
|
109 |
for dep in deps: |
d2d03df3956f
builddependencies: build inverse dict from forward dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
3903
diff
changeset
|
110 |
rdependencies[dep].add(r) |
d2d03df3956f
builddependencies: build inverse dict from forward dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
3903
diff
changeset
|
111 |
|
3468
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
112 |
return dependencies, rdependencies |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
113 |
|
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
114 |
def _singlesuccessor(repo, p): |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
115 |
"""returns p (as rev) if not obsolete or its unique latest successors |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
116 |
|
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
117 |
fail if there are no such successor""" |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
118 |
|
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
119 |
if not p.obsolete(): |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
120 |
return p.rev() |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
121 |
obs = repo[p] |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
122 |
ui = repo.ui |
3697
6aff4bb3970d
compat: drop compatibility layer for successorssets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3656
diff
changeset
|
123 |
newer = obsutil.successorssets(repo, obs.node()) |
3468
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
124 |
# search of a parent which is not killed |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
125 |
while not newer: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
126 |
ui.debug(b"stabilize target %s is plain dead," |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
127 |
b" trying to stabilize on its parent\n" % |
3468
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
128 |
obs) |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
129 |
obs = obs.parents()[0] |
3697
6aff4bb3970d
compat: drop compatibility layer for successorssets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
3656
diff
changeset
|
130 |
newer = obsutil.successorssets(repo, obs.node()) |
3468
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
131 |
if len(newer) > 1 or len(newer[0]) > 1: |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
132 |
raise MultipleSuccessorsError(newer) |
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
133 |
|
a3052824101d
evolve: move builddependencies() and _singlesuccessor() to utility module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3467
diff
changeset
|
134 |
return repo[newer[0][0]].rev() |
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
135 |
|
3906
f2cde417a738
builddependencies: extract function for getting successors
Martin von Zweigbergk <martinvonz@google.com>
parents:
3905
diff
changeset
|
136 |
def _successorrevs(repo, ctx): |
f2cde417a738
builddependencies: extract function for getting successors
Martin von Zweigbergk <martinvonz@google.com>
parents:
3905
diff
changeset
|
137 |
try: |
f2cde417a738
builddependencies: extract function for getting successors
Martin von Zweigbergk <martinvonz@google.com>
parents:
3905
diff
changeset
|
138 |
return {_singlesuccessor(repo, ctx)} |
f2cde417a738
builddependencies: extract function for getting successors
Martin von Zweigbergk <martinvonz@google.com>
parents:
3905
diff
changeset
|
139 |
except MultipleSuccessorsError as exc: |
f2cde417a738
builddependencies: extract function for getting successors
Martin von Zweigbergk <martinvonz@google.com>
parents:
3905
diff
changeset
|
140 |
return {repo[node].rev() |
f2cde417a738
builddependencies: extract function for getting successors
Martin von Zweigbergk <martinvonz@google.com>
parents:
3905
diff
changeset
|
141 |
for successorsset in exc.successorssets |
f2cde417a738
builddependencies: extract function for getting successors
Martin von Zweigbergk <martinvonz@google.com>
parents:
3905
diff
changeset
|
142 |
for node in successorsset} |
f2cde417a738
builddependencies: extract function for getting successors
Martin von Zweigbergk <martinvonz@google.com>
parents:
3905
diff
changeset
|
143 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
144 |
def revselectionprompt(ui, repo, revs, customheader=b""): |
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
145 |
"""function to prompt user to choose a revision from all the revs and return |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
146 |
that revision for further tasks |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
147 |
|
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
148 |
revs is a list of rev number of revision from which one revision should be |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
149 |
choosed by the user |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
150 |
customheader is a text which the caller wants as the header of the prompt |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
151 |
which will list revisions to select |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
152 |
|
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
153 |
returns value is: |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
154 |
rev number of revision choosed: if user choose a revision |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
155 |
None: if user entered a wrong input, user quit the prompt, |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
156 |
ui.interactive is not set |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
157 |
""" |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
158 |
|
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
159 |
# ui.interactive is not set, fallback to default behavior and avoid showing |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
160 |
# the prompt |
3758
131758265150
utility: use ui.interactive() instead of checking config value
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3697
diff
changeset
|
161 |
if not ui.interactive(): |
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
162 |
return None |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
163 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
164 |
promptmsg = customheader + b"\n" |
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
165 |
for idx, rev in enumerate(revs): |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
166 |
curctx = repo[rev] |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
167 |
revmsg = b"%d: [%s] %s\n" % (idx + 1, curctx, |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
168 |
curctx.description().split(b"\n")[0]) |
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
169 |
promptmsg += revmsg |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
170 |
|
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
171 |
promptmsg += _(b"q: quit the prompt\n") |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
172 |
promptmsg += _(b"enter the index of the revision you want to select:") |
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
173 |
idxselected = ui.prompt(promptmsg) |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
174 |
|
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
175 |
intidx = None |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
176 |
try: |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
177 |
intidx = int(idxselected) |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
178 |
except ValueError: |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
179 |
if idxselected == b'q': |
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
180 |
return None |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
181 |
ui.write_err(_(b"invalid value '%s' entered for index\n") % idxselected) |
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
182 |
return None |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
183 |
|
4393
159a4a6ded0b
prompts: use 1-indexing in revselectionprompt()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4341
diff
changeset
|
184 |
if intidx > len(revs) or intidx <= 0: |
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
185 |
# we can make this error message better |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
186 |
ui.write_err(_(b"invalid value '%d' entered for index\n") % intidx) |
3538
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
187 |
return None |
b314c64f336b
utility: add a function to prompt user to choose a revision
Pulkit Goyal <7895pulkit@gmail.com>
parents:
3468
diff
changeset
|
188 |
|
4393
159a4a6ded0b
prompts: use 1-indexing in revselectionprompt()
Martin von Zweigbergk <martinvonz@google.com>
parents:
4341
diff
changeset
|
189 |
return revs[intidx - 1] |
4636
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
190 |
|
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
191 |
def mergeusers(ui, base, divergent, other): |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
192 |
""" merges the users from two divergent changesets using three-way merge |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
193 |
and return the user that will be used as the author of resolved cset""" |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
194 |
baseuser = base.user() |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
195 |
divuser = divergent.user() |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
196 |
othuser = other.user() |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
197 |
|
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
198 |
if divuser == othuser: |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
199 |
return divuser |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
200 |
else: |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
201 |
if baseuser == divuser: |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
202 |
return othuser |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
203 |
elif baseuser == othuser: |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
204 |
return divuser |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
205 |
else: |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
206 |
# all three are different, lets concatenate the two authors |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
207 |
# XXX: should we let the user know about concatenation of authors |
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
208 |
# by printing some message (or maybe in verbose mode) |
4814
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
209 |
users = set(divuser.split(b', ')) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
210 |
users.update(othuser.split(b', ')) |
48b30ff742cb
python3: use format-source to run byteify-strings in .py files
Raphaël Gomès <rgomes@octobus.net>
parents:
4636
diff
changeset
|
211 |
user = b', '.join(sorted(users)) |
4636
c0e9a3c01c44
evolve: consider using three way merge to get the user for div resolution
Sushil khanchi <sushilkhanchi97@gmail.com>
parents:
4393
diff
changeset
|
212 |
return user |