Skip to content
  • Jun Wu's avatar
    split: new extension to split changesets · 02ea370c2baa
    Jun Wu authored
    This diff introduces an experimental split extension to split changesets.
    
    The implementation is largely inspired by Laurent Charignon's implementation
    for mutable-history (changeset 9603aa1ecdfd54b0d86e262318a72e0a2ffeb6cc [1])
    
    This version contains various improvements:
    
      - Rebase by default.
        This is more friendly for new users. Split won't lead to merge conflicts
        so a rebase won't give the user more trouble.
        This has been on by default at Facebook for months now and seems to be a
        good UX improvement.
        The rebase skips obsoleted or orphaned changesets, which can avoid
        issues like allowdivergence, merge conflicts, etc. This is more flexible
        because the user can decide what to do next (see the last test case in
        test-split.t)
    
      - Remove "Done split? [y/n]" prompt.
        That could be detected by checking `repo.status()` instead.
    
      - Works with obsstore disabled.
        Without obsstore, split uses strip to clean up old nodes, and it can
        even handle split a non-head changeset with "allowunstable" disabled,
        since it runs a rebase to solve the "unstable" issue in a same
        transaction.
    
      - More friendly editor text.
        Put what has been already split into the editor text so users won't lost
        track about where they are.
    
    [1]: https://bitbucket.org/marmoute/mutable-history/commits/9603aa1ecdfd54b
    
    Differential Revision: https://phab.mercurial-scm.org/D1082
    02ea370c2baa