diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -125,33 +125,6 @@ ellipsisprocessor = ( ellipsisrawprocessor, ) -def addflagprocessor(flag, processor): - """Register a flag processor on a revision data flag. - - Invariant: - - Flags need to be defined in REVIDX_KNOWN_FLAGS and REVIDX_FLAGS_ORDER, - and REVIDX_RAWTEXT_CHANGING_FLAGS if they can alter rawtext. - - Only one flag processor can be registered on a specific flag. - - flagprocessors must be 3-tuples of functions (read, write, raw) with the - following signatures: - - (read) f(self, rawtext) -> text, bool - - (write) f(self, text) -> rawtext, bool - - (raw) f(self, rawtext) -> bool - "text" is presented to the user. "rawtext" is stored in revlog data, not - directly visible to the user. - The boolean returned by these transforms is used to determine whether - the returned text can be used for hash integrity checking. For example, - if "write" returns False, then "text" is used to generate hash. If - "write" returns True, that basically means "rawtext" returned by "write" - should be used to generate hash. Usually, "write" and "read" return - different booleans. And "raw" returns a same boolean as "write". - - Note: The 'raw' transform is used for changegroup generation and in some - debug commands. In this case the transform only indicates whether the - contents can be used for hash integrity checks. - """ - flagutil.insertflagprocessor(flag, processor, flagutil.flagprocessors) - def getoffset(q): return int(q >> 16) @@ -2609,7 +2582,7 @@ class revlog(object): # # L1 should be equal to L2. L3 could be different from them. # "text" may or may not affect commit hash depending on flag - # processors (see revlog.addflagprocessor). + # processors (see flagutil.addflagprocessor). # # | common | rename | meta | ext # ------------------------------------------------- diff --git a/mercurial/revlogutils/flagutil.py b/mercurial/revlogutils/flagutil.py --- a/mercurial/revlogutils/flagutil.py +++ b/mercurial/revlogutils/flagutil.py @@ -40,6 +40,33 @@ flagprocessors = { REVIDX_ISCENSORED: None, } +def addflagprocessor(flag, processor): + """Register a flag processor on a revision data flag. + + Invariant: + - Flags need to be defined in REVIDX_KNOWN_FLAGS and REVIDX_FLAGS_ORDER, + and REVIDX_RAWTEXT_CHANGING_FLAGS if they can alter rawtext. + - Only one flag processor can be registered on a specific flag. + - flagprocessors must be 3-tuples of functions (read, write, raw) with the + following signatures: + - (read) f(self, rawtext) -> text, bool + - (write) f(self, text) -> rawtext, bool + - (raw) f(self, rawtext) -> bool + "text" is presented to the user. "rawtext" is stored in revlog data, not + directly visible to the user. + The boolean returned by these transforms is used to determine whether + the returned text can be used for hash integrity checking. For example, + if "write" returns False, then "text" is used to generate hash. If + "write" returns True, that basically means "rawtext" returned by "write" + should be used to generate hash. Usually, "write" and "read" return + different booleans. And "raw" returns a same boolean as "write". + + Note: The 'raw' transform is used for changegroup generation and in some + debug commands. In this case the transform only indicates whether the + contents can be used for hash integrity checks. + """ + insertflagprocessor(flag, processor, flagprocessors) + def insertflagprocessor(flag, processor, flagprocessors): if not flag & REVIDX_KNOWN_FLAGS: msg = _("cannot register processor on unknown flag '%#x'.") % (flag) diff --git a/tests/flagprocessorext.py b/tests/flagprocessorext.py --- a/tests/flagprocessorext.py +++ b/tests/flagprocessorext.py @@ -113,7 +113,7 @@ def extsetup(ui): exchange._bundlespeccontentopts[k][b"cg.version"] = b"03" # Register flag processors for each extension - revlog.addflagprocessor( + flagutil.addflagprocessor( REVIDX_NOOP, ( noopdonothing, @@ -121,7 +121,7 @@ def extsetup(ui): validatehash, ) ) - revlog.addflagprocessor( + flagutil.addflagprocessor( REVIDX_BASE64, ( b64decode, @@ -129,7 +129,7 @@ def extsetup(ui): bypass, ), ) - revlog.addflagprocessor( + flagutil.addflagprocessor( REVIDX_GZIP, ( gzipdecompress, diff --git a/tests/test-flagprocessor.t b/tests/test-flagprocessor.t --- a/tests/test-flagprocessor.t +++ b/tests/test-flagprocessor.t @@ -205,8 +205,8 @@ Ensure the data got to the server OK extsetup(ui) File "*/tests/flagprocessorext.py", line *, in extsetup (glob) validatehash, - File "*/mercurial/revlog.py", line *, in addflagprocessor (glob) - flagutil.insertflagprocessor(flag, processor, flagutil.flagprocessors) + File "*/mercurial/revlogutils/flagutil.py", line *, in addflagprocessor (glob) + insertflagprocessor(flag, processor, flagprocessors) File "*/mercurial/revlogutils/flagutil.py", line *, in insertflagprocessor (glob) raise error.Abort(msg) mercurial.error.Abort: b"cannot register multiple processors on flag '0x8'." (py3 !) diff --git a/tests/test-revlog-raw.py b/tests/test-revlog-raw.py --- a/tests/test-revlog-raw.py +++ b/tests/test-revlog-raw.py @@ -16,6 +16,7 @@ from mercurial import ( from mercurial.revlogutils import ( deltas, + flagutil, ) # TESTTMP is optional. This makes it convenient to run without run-tests.py @@ -56,7 +57,7 @@ def rawprocessor(self, rawtext): # can be used to verify hash. return False -revlog.addflagprocessor(revlog.REVIDX_EXTSTORED, +flagutil.addflagprocessor(revlog.REVIDX_EXTSTORED, (readprocessor, writeprocessor, rawprocessor)) # Utilities about reading and appending revlog