Mercurial > evolve
comparison hgext/evolve.py @ 1361:043e5ca9322f
evolve: extract the code computing dependencies in a separate function
The code to compute dependencies between unstable changeset can be reused to
compute the next reveset. This patch extracts it in its own function to make
it reusable.
author | Laurent Charignon <lcharignon@fb.com> |
---|---|
date | Thu, 04 Jun 2015 16:49:16 -0700 |
parents | 3bb7a080da4d |
children | f00d91365ab9 |
comparison
equal
deleted
inserted
replaced
1360:5c13945b32fc | 1361:043e5ca9322f |
---|---|
1252 newer = obsolete.successorssets(repo, obs.node()) | 1252 newer = obsolete.successorssets(repo, obs.node()) |
1253 if len(newer) > 1: | 1253 if len(newer) > 1: |
1254 raise util.Abort(_("conflict rewriting. can't choose destination\n")) | 1254 raise util.Abort(_("conflict rewriting. can't choose destination\n")) |
1255 return repo[newer[0][0]].rev() | 1255 return repo[newer[0][0]].rev() |
1256 | 1256 |
1257 def orderrevs(repo, revs): | 1257 def builddependencies(repo, revs): |
1258 """ Compute an ordering to solve instability for the given revs | 1258 """ returns dependency graphs giving an order to solve instability of revs |
1259 | 1259 (see orderrevs for more information on usage) """ |
1260 - Takes revs a list of instable revisions | 1260 |
1261 | |
1262 - Returns the same revisions ordered to solve their instability from the | |
1263 bottom to the top of the stack that the stabilization process will produce | |
1264 eventually. | |
1265 | |
1266 This ensure the minimal number of stabilization as we can stabilize each | |
1267 revision on its final, stabilized, destination. | |
1268 """ | |
1269 | |
1270 # Step 1: Build the dependency graph | |
1271 # For each troubled revision we keep track of what instability if any should | 1261 # For each troubled revision we keep track of what instability if any should |
1272 # be resolved in order to resolve it. Example: | 1262 # be resolved in order to resolve it. Example: |
1273 # dependencies = {3: [6], 6:[]} | 1263 # dependencies = {3: [6], 6:[]} |
1274 # Means that: 6 has no dependency, 3 depends on 6 to be solved | 1264 # Means that: 6 has no dependency, 3 depends on 6 to be solved |
1275 dependencies = {} | 1265 dependencies = {} |
1281 for p in repo[r].parents(): | 1271 for p in repo[r].parents(): |
1282 succ = _singlesuccessor(repo, p) | 1272 succ = _singlesuccessor(repo, p) |
1283 if succ in revs: | 1273 if succ in revs: |
1284 dependencies[r].add(succ) | 1274 dependencies[r].add(succ) |
1285 rdependencies[succ].add(r) | 1275 rdependencies[succ].add(r) |
1286 | 1276 return dependencies, rdependencies |
1277 | |
1278 def orderrevs(repo, revs): | |
1279 """ Compute an ordering to solve instability for the given revs | |
1280 | |
1281 - Takes revs a list of instable revisions | |
1282 | |
1283 - Returns the same revisions ordered to solve their instability from the | |
1284 bottom to the top of the stack that the stabilization process will produce | |
1285 eventually. | |
1286 | |
1287 This ensure the minimal number of stabilization as we can stabilize each | |
1288 revision on its final, stabilized, destination. | |
1289 """ | |
1290 # Step 1: Build the dependency graph | |
1291 dependencies, rdependencies = builddependencies(repo, revs) | |
1287 # Step 2: Build the ordering | 1292 # Step 2: Build the ordering |
1288 # Remove the revisions with no dependency(A) and add them to the ordering. | 1293 # Remove the revisions with no dependency(A) and add them to the ordering. |
1289 # Removing these revisions leads to new revisions with no dependency (the | 1294 # Removing these revisions leads to new revisions with no dependency (the |
1290 # one depending on A) that we can remove from the dependency graph and add | 1295 # one depending on A) that we can remove from the dependency graph and add |
1291 # to the ordering. We progress in a similar fashion until the ordering is | 1296 # to the ordering. We progress in a similar fashion until the ordering is |