952 divergent.add(rev) |
953 divergent.add(rev) |
953 break |
954 break |
954 toprocess.update(obsstore.predecessors.get(prec, ())) |
955 toprocess.update(obsstore.predecessors.get(prec, ())) |
955 return divergent |
956 return divergent |
956 |
957 |
|
958 def makefoldid(relation, user): |
|
959 |
|
960 folddigest = hashlib.sha1(user) |
|
961 for p in relation[0] + relation[1]: |
|
962 folddigest.update('%d' % p.rev()) |
|
963 folddigest.update(p.node()) |
|
964 # Since fold only has to compete against fold for the same successors, it |
|
965 # seems fine to use a small ID. Smaller ID save space. |
|
966 return node.hex(folddigest.digest())[:8] |
957 |
967 |
958 def createmarkers(repo, relations, flag=0, date=None, metadata=None, |
968 def createmarkers(repo, relations, flag=0, date=None, metadata=None, |
959 operation=None): |
969 operation=None): |
960 """Add obsolete markers between changesets in a repo |
970 """Add obsolete markers between changesets in a repo |
961 |
971 |
998 # preserve compat with old API until all caller are migrated |
1008 # preserve compat with old API until all caller are migrated |
999 predecessors = (predecessors,) |
1009 predecessors = (predecessors,) |
1000 if len(predecessors) > 1 and len(rel[1]) != 1: |
1010 if len(predecessors) > 1 and len(rel[1]) != 1: |
1001 msg = 'Fold markers can only have 1 successors, not %d' |
1011 msg = 'Fold markers can only have 1 successors, not %d' |
1002 raise error.ProgrammingError(msg % len(rel[1])) |
1012 raise error.ProgrammingError(msg % len(rel[1])) |
1003 for prec in predecessors: |
1013 foldid = None |
|
1014 foldsize = len(predecessors) |
|
1015 if 1 < foldsize: |
|
1016 foldid = makefoldid(rel, metadata['user']) |
|
1017 for foldidx, prec in enumerate(predecessors, 1): |
1004 sucs = rel[1] |
1018 sucs = rel[1] |
1005 localmetadata = metadata.copy() |
1019 localmetadata = metadata.copy() |
1006 if len(rel) > 2: |
1020 if len(rel) > 2: |
1007 localmetadata.update(rel[2]) |
1021 localmetadata.update(rel[2]) |
|
1022 if foldid is not None: |
|
1023 localmetadata['fold-id'] = foldid |
|
1024 localmetadata['fold-idx'] = '%d' % foldidx |
|
1025 localmetadata['fold-size'] = '%d' % foldsize |
1008 |
1026 |
1009 if not prec.mutable(): |
1027 if not prec.mutable(): |
1010 raise error.Abort(_("cannot obsolete public changeset: %s") |
1028 raise error.Abort(_("cannot obsolete public changeset: %s") |
1011 % prec, |
1029 % prec, |
1012 hint="see 'hg help phases' for details") |
1030 hint="see 'hg help phases' for details") |