988 fm.end() |
989 fm.end() |
989 |
990 |
990 |
991 |
991 @command( |
992 @command( |
992 b'debug-delta-find', |
993 b'debug-delta-find', |
993 cmdutil.debugrevlogopts + cmdutil.formatteropts, |
994 cmdutil.debugrevlogopts |
|
995 + cmdutil.formatteropts |
|
996 + [ |
|
997 ( |
|
998 b'', |
|
999 b'source', |
|
1000 b'full', |
|
1001 _(b'input data feed to the process (full, storage, p1, p2, prev)'), |
|
1002 ), |
|
1003 ], |
994 _(b'-c|-m|FILE REV'), |
1004 _(b'-c|-m|FILE REV'), |
995 optionalrepo=True, |
1005 optionalrepo=True, |
996 ) |
1006 ) |
997 def debugdeltafind(ui, repo, arg_1, arg_2=None, **opts): |
1007 def debugdeltafind(ui, repo, arg_1, arg_2=None, source=b'full', **opts): |
998 """display the computation to get to a valid delta for storing REV |
1008 """display the computation to get to a valid delta for storing REV |
999 |
1009 |
1000 This command will replay the process used to find the "best" delta to store |
1010 This command will replay the process used to find the "best" delta to store |
1001 a revision and display information about all the steps used to get to that |
1011 a revision and display information about all the steps used to get to that |
1002 result. |
1012 result. |
|
1013 |
|
1014 By default, the process is fed with a the full-text for the revision. This |
|
1015 can be controlled with the --source flag. |
1003 |
1016 |
1004 The revision use the revision number of the target storage (not changelog |
1017 The revision use the revision number of the target storage (not changelog |
1005 revision number). |
1018 revision number). |
1006 |
1019 |
1007 note: the process is initiated from a full text of the revision to store. |
1020 note: the process is initiated from a full text of the revision to store. |
1026 |
1039 |
1027 node = revlog.node(rev) |
1040 node = revlog.node(rev) |
1028 p1r, p2r = revlog.parentrevs(rev) |
1041 p1r, p2r = revlog.parentrevs(rev) |
1029 p1 = revlog.node(p1r) |
1042 p1 = revlog.node(p1r) |
1030 p2 = revlog.node(p2r) |
1043 p2 = revlog.node(p2r) |
1031 btext = [revlog.revision(rev)] |
1044 full_text = revlog.revision(rev) |
|
1045 btext = [full_text] |
1032 textlen = len(btext[0]) |
1046 textlen = len(btext[0]) |
1033 cachedelta = None |
1047 cachedelta = None |
1034 flags = revlog.flags(rev) |
1048 flags = revlog.flags(rev) |
|
1049 |
|
1050 if source != b'full': |
|
1051 if source == b'storage': |
|
1052 base_rev = revlog.deltaparent(rev) |
|
1053 elif source == b'p1': |
|
1054 base_rev = p1r |
|
1055 elif source == b'p2': |
|
1056 base_rev = p2r |
|
1057 elif source == b'prev': |
|
1058 base_rev = rev - 1 |
|
1059 else: |
|
1060 raise error.InputError(b"invalid --source value: %s" % source) |
|
1061 |
|
1062 if base_rev != nullrev: |
|
1063 base_text = revlog.revision(base_rev) |
|
1064 delta = mdiff.textdiff(base_text, full_text) |
|
1065 |
|
1066 cachedelta = (base_rev, delta) |
|
1067 btext = [None] |
1035 |
1068 |
1036 revinfo = revlogutils.revisioninfo( |
1069 revinfo = revlogutils.revisioninfo( |
1037 node, |
1070 node, |
1038 p1, |
1071 p1, |
1039 p2, |
1072 p2, |