hgext3rd/evolve/evolvecmd.py
changeset 5049 1b393870c6b9
parent 5033 7cc3d96eb589
child 5050 f29bd1c7e457
equal deleted inserted replaced
5047:a8ac174010a5 5049:1b393870c6b9
   120 
   120 
   121     if not pctx.obsolete():
   121     if not pctx.obsolete():
   122         ui.warn(_(b"cannot solve instability of %s, skipping\n") % orig)
   122         ui.warn(_(b"cannot solve instability of %s, skipping\n") % orig)
   123         return (False, b".")
   123         return (False, b".")
   124     obs = pctx
   124     obs = pctx
   125     newer = obsutil.successorssets(repo, obs.node())
   125     if True:
   126     # search of a parent which is not killed, but also isn't the orig
       
   127     while not newer or newer[0][0] == orig.node():
       
   128         ui.debug(b"stabilize target %s is plain dead,"
       
   129                  b" trying to stabilize on its parent\n" %
       
   130                  obs)
       
   131         obs = obs.p1()
       
   132         newer = obsutil.successorssets(repo, obs.node())
   126         newer = obsutil.successorssets(repo, obs.node())
   133     if len(newer) > 1:
   127         # search of a parent which is not killed, but also isn't the orig
   134         msg = _(b"skipping %s: divergent rewriting. can't choose "
   128         while not newer or newer[0][0] == orig.node():
   135                 b"destination\n") % obs
   129             ui.debug(b"stabilize target %s is plain dead,"
   136         ui.write_err(msg)
   130                      b" trying to stabilize on its parent\n" %
   137         return (False, b".")
   131                      obs)
   138     targets = newer[0]
   132             obs = obs.p1()
   139     assert targets
   133             newer = obsutil.successorssets(repo, obs.node())
   140     if len(targets) > 1:
   134         if len(newer) > 1:
   141         # split target, figure out which one to pick, are they all in line?
   135             msg = _(b"skipping %s: divergent rewriting. can't choose "
   142         targetrevs = [repo[r].rev() for r in targets]
   136                     b"destination\n") % obs
   143         roots = repo.revs(b'roots(%ld)', targetrevs)
   137             ui.write_err(msg)
   144         heads = repo.revs(b'heads(%ld)', targetrevs)
   138             return (False, b".")
   145         if len(roots) > 1 or len(heads) > 1:
   139         targets = newer[0]
   146             cheader = _(b"ancestor '%s' split over multiple topological"
   140         assert targets
   147                         b" branches.\nchoose an evolve destination:") % orig
   141         if len(targets) > 1:
   148             selectedrev = utility.revselectionprompt(ui, repo, list(heads),
   142             # split target, figure out which one to pick, are they all in line?
   149                                                      cheader)
   143             targetrevs = [repo[r].rev() for r in targets]
   150             if selectedrev is None:
   144             roots = repo.revs(b'roots(%ld)', targetrevs)
   151                 msg = _(b"could not solve instability, "
   145             heads = repo.revs(b'heads(%ld)', targetrevs)
   152                         b"ambiguous destination: "
   146             if len(roots) > 1 or len(heads) > 1:
   153                         b"parent split across two branches\n")
   147                 cheader = _(b"ancestor '%s' split over multiple topological"
   154                 ui.write_err(msg)
   148                             b" branches.\nchoose an evolve destination:") % orig
   155                 return (False, b".")
   149                 selectedrev = utility.revselectionprompt(ui, repo, list(heads),
   156             target = repo[selectedrev]
   150                                                          cheader)
       
   151                 if selectedrev is None:
       
   152                     msg = _(b"could not solve instability, "
       
   153                             b"ambiguous destination: "
       
   154                             b"parent split across two branches\n")
       
   155                     ui.write_err(msg)
       
   156                     return (False, b".")
       
   157                 target = repo[selectedrev]
       
   158             else:
       
   159                 target = repo[heads.first()]
   157         else:
   160         else:
   158             target = repo[heads.first()]
   161             target = targets[0]
   159     else:
       
   160         target = targets[0]
       
   161     target = repo[target]
   162     target = repo[target]
   162     if not ui.quiet or confirm:
   163     if not ui.quiet or confirm:
   163         repo.ui.write(_(b'move:'), label=b'evolve.operation')
   164         repo.ui.write(_(b'move:'), label=b'evolve.operation')
   164         displayer.show(orig)
   165         displayer.show(orig)
   165         if lastsolved is None or target != repo[lastsolved]:
   166         if lastsolved is None or target != repo[lastsolved]: