##// END OF EJS Templates
obsolete: explicitly track folds inside the markers...
Boris Feld -
r40078:208303a8 default
parent child Browse files
Show More
@@ -70,6 +70,7 b' comment associated with each format for '
70 from __future__ import absolute_import
70 from __future__ import absolute_import
71
71
72 import errno
72 import errno
73 import hashlib
73 import struct
74 import struct
74
75
75 from .i18n import _
76 from .i18n import _
@@ -954,6 +955,15 b' def _computecontentdivergentset(repo):'
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):
@@ -1000,11 +1010,19 b' def createmarkers(repo, relations, flag='
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")
@@ -356,9 +356,9 b' collapse rebase'
356 $ hg id --debug -r tip
356 $ hg id --debug -r tip
357 4dc2197e807bae9817f09905b50ab288be2dbbcf tip
357 4dc2197e807bae9817f09905b50ab288be2dbbcf tip
358 $ hg debugobsolete
358 $ hg debugobsolete
359 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 4dc2197e807bae9817f09905b50ab288be2dbbcf 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'rebase', 'user': 'test'}
359 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 4dc2197e807bae9817f09905b50ab288be2dbbcf 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'fold-id': '6fb65cdc', 'fold-idx': '1', 'fold-size': '3', 'operation': 'rebase', 'user': 'test'}
360 5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 4dc2197e807bae9817f09905b50ab288be2dbbcf 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'rebase', 'user': 'test'}
360 5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 4dc2197e807bae9817f09905b50ab288be2dbbcf 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'fold-id': '6fb65cdc', 'fold-idx': '2', 'fold-size': '3', 'operation': 'rebase', 'user': 'test'}
361 32af7686d403cf45b5d95f2d70cebea587ac806a 4dc2197e807bae9817f09905b50ab288be2dbbcf 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'operation': 'rebase', 'user': 'test'}
361 32af7686d403cf45b5d95f2d70cebea587ac806a 4dc2197e807bae9817f09905b50ab288be2dbbcf 0 (Thu Jan 01 00:00:00 1970 +0000) {'ef1': '13', 'fold-id': '6fb65cdc', 'fold-idx': '3', 'fold-size': '3', 'operation': 'rebase', 'user': 'test'}
362
362
363 $ cd ..
363 $ cd ..
364
364
General Comments 0
You need to be logged in to leave comments. Login now