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') |