Show More
@@ -1307,6 +1307,26 b' def phabsend(ui, repo, *revs, **opts):' | |||||
1307 | if any(c for c in ctxs if c.obsolete()): |
|
1307 | if any(c for c in ctxs if c.obsolete()): | |
1308 | raise error.Abort(_(b"obsolete commits cannot be posted for review")) |
|
1308 | raise error.Abort(_(b"obsolete commits cannot be posted for review")) | |
1309 |
|
1309 | |||
|
1310 | # Ensure the local commits are an unbroken range. The semantics of the | |||
|
1311 | # --fold option implies this, and the auto restacking of orphans requires | |||
|
1312 | # it. Otherwise A+C in A->B->C will cause B to be orphaned, and C' to | |||
|
1313 | # get A' as a parent. | |||
|
1314 | def _fail_nonlinear_revs(revs, skiprev, revtype): | |||
|
1315 | badnodes = [repo[r].node() for r in revs if r != skiprev] | |||
|
1316 | raise error.Abort( | |||
|
1317 | _(b"cannot phabsend multiple %s revisions: %s") | |||
|
1318 | % (revtype, scmutil.nodesummaries(repo, badnodes)), | |||
|
1319 | hint=_(b"the revisions must form a linear chain"), | |||
|
1320 | ) | |||
|
1321 | ||||
|
1322 | heads = repo.revs(b'heads(%ld)', revs) | |||
|
1323 | if len(heads) > 1: | |||
|
1324 | _fail_nonlinear_revs(heads, heads.max(), b"head") | |||
|
1325 | ||||
|
1326 | roots = repo.revs(b'roots(%ld)', revs) | |||
|
1327 | if len(roots) > 1: | |||
|
1328 | _fail_nonlinear_revs(roots, roots.min(), b"root") | |||
|
1329 | ||||
1310 | fold = opts.get(b'fold') |
|
1330 | fold = opts.get(b'fold') | |
1311 | if fold: |
|
1331 | if fold: | |
1312 | if len(revs) == 1: |
|
1332 | if len(revs) == 1: | |
@@ -1322,13 +1342,6 b' def phabsend(ui, repo, *revs, **opts):' | |||||
1322 | if not opts.get(b"amend"): |
|
1342 | if not opts.get(b"amend"): | |
1323 | raise error.Abort(_(b"cannot fold with --no-amend")) |
|
1343 | raise error.Abort(_(b"cannot fold with --no-amend")) | |
1324 |
|
1344 | |||
1325 | # Ensure the local commits are an unbroken range |
|
|||
1326 | revrange = repo.revs(b'(first(%ld)::last(%ld))', revs, revs) |
|
|||
1327 | if any(r for r in revs if r not in revrange) or any( |
|
|||
1328 | r for r in revrange if r not in revs |
|
|||
1329 | ): |
|
|||
1330 | raise error.Abort(_(b"cannot fold non-linear revisions")) |
|
|||
1331 |
|
||||
1332 | # It might be possible to bucketize the revisions by the DREV value, and |
|
1345 | # It might be possible to bucketize the revisions by the DREV value, and | |
1333 | # iterate over those groups when posting, and then again when amending. |
|
1346 | # iterate over those groups when posting, and then again when amending. | |
1334 | # But for simplicity, require all selected revisions to be for the same |
|
1347 | # But for simplicity, require all selected revisions to be for the same |
@@ -589,6 +589,13 b' Phabimport accepts multiple DREVSPECs' | |||||
589 | applying patch from D7917 |
|
589 | applying patch from D7917 | |
590 | applying patch from D7918 |
|
590 | applying patch from D7918 | |
591 |
|
591 | |||
|
592 | Phabsend requires a linear range of commits | |||
|
593 | ||||
|
594 | $ hg phabsend -r 0+2+3 | |||
|
595 | abort: cannot phabsend multiple head revisions: c44b38f24a45 | |||
|
596 | (the revisions must form a linear chain) | |||
|
597 | [255] | |||
|
598 | ||||
592 | Validate arguments with --fold |
|
599 | Validate arguments with --fold | |
593 |
|
600 | |||
594 | $ hg phabsend --fold -r 1 |
|
601 | $ hg phabsend --fold -r 1 | |
@@ -597,9 +604,6 b' Validate arguments with --fold' | |||||
597 | $ hg phabsend --fold --no-amend -r 1:: |
|
604 | $ hg phabsend --fold --no-amend -r 1:: | |
598 | abort: cannot fold with --no-amend |
|
605 | abort: cannot fold with --no-amend | |
599 | [255] |
|
606 | [255] | |
600 | $ hg phabsend --fold -r 0+3 |
|
|||
601 | abort: cannot fold non-linear revisions |
|
|||
602 | [255] |
|
|||
603 | $ hg phabsend --fold -r 1:: |
|
607 | $ hg phabsend --fold -r 1:: | |
604 | abort: cannot fold revisions with different DREV values |
|
608 | abort: cannot fold revisions with different DREV values | |
605 | [255] |
|
609 | [255] |
General Comments 0
You need to be logged in to leave comments.
Login now