hgext/obsolete.py
changeset 455 f46a41006136
parent 454 4e34a723115b
child 456 79aacd34bf1e
equal deleted inserted replaced
454:4e34a723115b 455:f46a41006136
   986                 if not res and not kwargs.get('abort') and repo._rebasestate:
   986                 if not res and not kwargs.get('abort') and repo._rebasestate:
   987                     # Rebased revisions are assumed to be descendants of
   987                     # Rebased revisions are assumed to be descendants of
   988                     # targetrev. If a source revision is mapped to targetrev
   988                     # targetrev. If a source revision is mapped to targetrev
   989                     # or to another rebased revision, it must have been
   989                     # or to another rebased revision, it must have been
   990                     # removed.
   990                     # removed.
   991                     targetrev = repo[repo._rebasetarget].rev()
   991                     markers = []
   992                     newrevs = set([targetrev])
   992                     if kwargs.get('collapse'):
   993                     replacements = {}
   993                         # collapse assume revision disapear because they are all
   994                     for rev, newrev in sorted(repo._rebasestate.items()):
   994                         # in the created revision
   995                         oldnode = repo[rev].node()
   995                         newrevs = set(repo._rebasestate.values())
   996                         if newrev not in newrevs:
   996                         newrevs.remove(repo._rebasetarget)
   997                             newnode = repo[newrev].node()
   997                         if newrevs:
   998                             newrevs.add(newrev)
   998                             # we create new revision.
       
   999                             # A single one by --collapse design
       
  1000                             assert len(newrevs) == 1
       
  1001                             new = tuple(repo[n] for n in newrevs)
   999                         else:
  1002                         else:
  1000                             newnode = nullid
  1003                             # every body died. no new changeset created
  1001                         replacements[oldnode] = newnode
  1004                             new = (repo[repo._rebasetarget],)
  1002 
  1005                         for rev, newrev in sorted(repo._rebasestate.items()):
  1003                     if kwargs.get('collapse'):
  1006                             markers.append((repo[rev], new))
  1004                         newnodes = set(n for n in replacements.values() if n != nullid)
  1007                     else:
  1005                         if newnodes:
  1008                         # no collapse assume revision disapear because they are
  1006                             # Collapsing into more than one revision?
  1009                         # contained in parent
  1007                             assert len(newnodes) == 1, newnodes
  1010                         for rev, newrev in sorted(repo._rebasestate.items()):
  1008                             newnode = newnodes.pop()
  1011                             markers.append((repo[rev], (repo[newrev],)))
  1009                             markers = [(repo[r], (repo[newnode],))
  1012                     createmarkers(repo, markers)
  1010                                        for r in replacements]
       
  1011                         else:
       
  1012                             newnode = nullid
       
  1013                             markers = [(repo[r], ())
       
  1014                                        for r in replacements]
       
  1015                         createmarkers(repo, markers)
       
  1016                     elif replacements:
       
  1017                         markers = [(repo[o], (() if n == nullid else (repo[n],)))
       
  1018                                    for o, n in replacements.iteritems()]
       
  1019                         createmarkers(repo, markers)
       
  1020             return res
  1013             return res
  1021         finally:
  1014         finally:
  1022             l.release()
  1015             l.release()
  1023     finally:
  1016     finally:
  1024         delattr(repo, '_rebasestate')
  1017         delattr(repo, '_rebasestate')