Message ID | 20240904111836.3273842-2-armbru@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | qapi: Reduce use of 'prefix' | expand |
On Wed, Sep 04, 2024 at 01:18:18PM +0200, Markus Armbruster wrote: > camel_to_upper() converts its argument from camel case to upper case > with '_' between words. Used for generated enumeration constant > prefixes. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > Reviewed-by: Daniel P. Berrang?? <berrange@redhat.com> The accent in my name is getting mangled in this series. IIRC your mail client (git send-email ?) needs to be explicitly setting a chardset eg Content-type: text/plain; charset=utf8 so that mail clients & intermediate servers know how to interpret the 8bit data. With regards, Daniel
Daniel P. Berrangé <berrange@redhat.com> writes: > On Wed, Sep 04, 2024 at 01:18:18PM +0200, Markus Armbruster wrote: >> camel_to_upper() converts its argument from camel case to upper case >> with '_' between words. Used for generated enumeration constant >> prefixes. > > >> >> Signed-off-by: Markus Armbruster <armbru@redhat.com> >> Reviewed-by: Daniel P. Berrang?? <berrange@redhat.com> > > The accent in my name is getting mangled in this series. Uh-oh! Checking... Hmm. It's correct in git, correct in output of git-format-patch, correct in the copy I got from git-send-email --bcc armbru via localhost MTA, and the copy I got from --to qemu-devel@nongnu.org, correct in lore.kernel.org[*], correct in an mbox downloaded from patchew. Could the culprit be on your side? > IIRC your mail client (git send-email ?) needs to be explicitly > setting a chardset eg > > Content-type: text/plain; charset=utf8 > > so that mail clients & intermediate servers know how to interpret > the 8bit data. > > With regards, > Daniel [*] https://lore.kernel.org/qemu-devel/ZthQAr7Mpd0utBD9@redhat.com/T/#m4a7625a47ce94c30ca2ae6d94acd2901e0d0d176
On Thu, Sep 05, 2024 at 07:59:13AM +0200, Markus Armbruster wrote: > Daniel P. Berrangé <berrange@redhat.com> writes: > > > On Wed, Sep 04, 2024 at 01:18:18PM +0200, Markus Armbruster wrote: > >> camel_to_upper() converts its argument from camel case to upper case > >> with '_' between words. Used for generated enumeration constant > >> prefixes. > > > > > >> > >> Signed-off-by: Markus Armbruster <armbru@redhat.com> > >> Reviewed-by: Daniel P. Berrang?? <berrange@redhat.com> > > > > The accent in my name is getting mangled in this series. > > Uh-oh! > > Checking... Hmm. It's correct in git, correct in output of > git-format-patch, correct in the copy I got from git-send-email --bcc > armbru via localhost MTA, and the copy I got from --to > qemu-devel@nongnu.org, correct in lore.kernel.org[*], correct in an mbox > downloaded from patchew. > > Could the culprit be on your side? I compared my received mail vs the mbox archive on nongnu.org for qemu-devel. In both cases the actual mail body seems to be valid UTF-8 and is identical. The message in the nongnu.org archive, however, has Content-Type: text/plain; charset=UTF-8 while the copy I got in my inbox has merely Content-Type: text/plain What I can't determine is whether your original sent message had "charset=UTF-8" which then got stripped by redhat's incoming mail server, or whether your original lacked 'charset=UTF8' and it got added by mailman when saving the message to the mbox archives ? With regards, Daniel
On Thu, Sep 05, 2024 at 04:52:36PM +0100, Daniel P. Berrangé wrote: > On Thu, Sep 05, 2024 at 07:59:13AM +0200, Markus Armbruster wrote: > > Daniel P. Berrangé <berrange@redhat.com> writes: > > > > > On Wed, Sep 04, 2024 at 01:18:18PM +0200, Markus Armbruster wrote: > > >> camel_to_upper() converts its argument from camel case to upper case > > >> with '_' between words. Used for generated enumeration constant > > >> prefixes. > > > > > > > > >> > > >> Signed-off-by: Markus Armbruster <armbru@redhat.com> > > >> Reviewed-by: Daniel P. Berrang?? <berrange@redhat.com> > > > > > > The accent in my name is getting mangled in this series. > > > > Uh-oh! > > > > Checking... Hmm. It's correct in git, correct in output of > > git-format-patch, correct in the copy I got from git-send-email --bcc > > armbru via localhost MTA, and the copy I got from --to > > qemu-devel@nongnu.org, correct in lore.kernel.org[*], correct in an mbox > > downloaded from patchew. > > > > Could the culprit be on your side? > > I compared my received mail vs the mbox archive on nongnu.org for > qemu-devel. > > In both cases the actual mail body seems to be valid UTF-8 and is > identical. The message in the nongnu.org archive, however, has > > Content-Type: text/plain; charset=UTF-8 > > while the copy I got in my inbox has merely > > Content-Type: text/plain > > What I can't determine is whether your original sent message > had "charset=UTF-8" which then got stripped by redhat's incoming > mail server, or whether your original lacked 'charset=UTF8' and > it got added by mailman when saving the message to the mbox archives ? I didn't read into details of what Markus hit, but I just remembered I hit similar things before and Dan reported similar issue. At that time (which I tried to recall..) was because I used git-publish sending patches, in which there is an encoding issue. I tried to fix with this branch: https://github.com/xzpeter/git-publish/commits/fix-print-2/ I also remember I tried to upstream that to Stefan's repo but I totally forgot what happened later, but the result is I am still using this branch internally (which I completely forgot which version I'm using... but I found that until I see this discussion and checked..). Please ignore everything if git-publish is not used at all.. but just in case helpful..
diff --git a/qapi/block-core.json b/qapi/block-core.json index aa40d44f1d..452047102a 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -2011,6 +2011,7 @@ # Since: 4.0 ## { 'enum': 'XDbgBlockGraphNodeType', + 'prefix': 'X_DBG_BLOCK_GRAPH_NODE_TYPE', # TODO drop 'data': [ 'block-backend', 'block-job', 'block-driver' ] } ## @@ -3746,7 +3747,7 @@ # # Since: 4.1 ## -{ 'enum': 'BlkdebugIOType', 'prefix': 'BLKDEBUG_IO_TYPE', +{ 'enum': 'BlkdebugIOType', 'data': [ 'read', 'write', 'write-zeroes', 'discard', 'flush', 'block-status' ] } diff --git a/qapi/common.json b/qapi/common.json index 7558ce5430..25726d3113 100644 --- a/qapi/common.json +++ b/qapi/common.json @@ -92,6 +92,7 @@ # Since: 2.12 ## { 'enum': 'OffAutoPCIBAR', + 'prefix': 'OFF_AUTOPCIBAR', # TODO drop 'data': [ 'off', 'auto', 'bar0', 'bar1', 'bar2', 'bar3', 'bar4', 'bar5' ] } ## diff --git a/qapi/crypto.json b/qapi/crypto.json index 97e02dbd59..a192641a03 100644 --- a/qapi/crypto.json +++ b/qapi/crypto.json @@ -20,7 +20,6 @@ # Since: 2.5 ## { 'enum': 'QCryptoTLSCredsEndpoint', - 'prefix': 'QCRYPTO_TLS_CREDS_ENDPOINT', 'data': ['client', 'server']} ## @@ -36,7 +35,6 @@ # Since: 2.6 ## { 'enum': 'QCryptoSecretFormat', - 'prefix': 'QCRYPTO_SECRET_FORMAT', 'data': ['raw', 'base64']} ## @@ -123,7 +121,6 @@ # Since: 2.6 ## { 'enum': 'QCryptoCipherMode', - 'prefix': 'QCRYPTO_CIPHER_MODE', 'data': ['ecb', 'cbc', 'xts', 'ctr']} ## @@ -160,7 +157,7 @@ # Since: 2.6 ## { 'enum': 'QCryptoBlockFormat', -# 'prefix': 'QCRYPTO_BLOCK_FORMAT', + 'prefix': 'Q_CRYPTO_BLOCK_FORMAT', # TODO drop 'data': ['qcow', 'luks']} ## @@ -363,6 +360,7 @@ # Since: 5.1 ## { 'enum': 'QCryptoBlockLUKSKeyslotState', + 'prefix': 'Q_CRYPTO_BLOCKLUKS_KEYSLOT_STATE', # TODO drop 'data': [ 'active', 'inactive' ] } ## diff --git a/qapi/cryptodev.json b/qapi/cryptodev.json index 68289f4984..60f8fe8e4a 100644 --- a/qapi/cryptodev.json +++ b/qapi/cryptodev.json @@ -48,7 +48,6 @@ # Since: 8.0 ## { 'enum': 'QCryptodevBackendType', - 'prefix': 'QCRYPTODEV_BACKEND_TYPE', 'data': ['builtin', 'vhost-user', 'lkcf']} ## diff --git a/qapi/ebpf.json b/qapi/ebpf.json index db19ae850f..42df548777 100644 --- a/qapi/ebpf.json +++ b/qapi/ebpf.json @@ -42,6 +42,7 @@ # Since: 9.0 ## { 'enum': 'EbpfProgramID', + 'prefix': 'EBPF_PROGRAMID', # TODO drop 'if': 'CONFIG_EBPF', 'data': [ { 'name': 'rss' } ] } diff --git a/qapi/machine.json b/qapi/machine.json index d4317435e7..552d1c20e9 100644 --- a/qapi/machine.json +++ b/qapi/machine.json @@ -686,6 +686,7 @@ # Since: 5.0 ## { 'enum': 'HmatLBMemoryHierarchy', + 'prefix': 'HMATLB_MEMORY_HIERARCHY', # TODO drop 'data': [ 'memory', 'first-level', 'second-level', 'third-level' ] } ## @@ -712,6 +713,7 @@ # Since: 5.0 ## { 'enum': 'HmatLBDataType', + 'prefix': 'HMATLB_DATA_TYPE', # TODO drop 'data': [ 'access-latency', 'read-latency', 'write-latency', 'access-bandwidth', 'read-bandwidth', 'write-bandwidth' ] } diff --git a/qapi/migration.json b/qapi/migration.json index 7324571e92..f0ff7b93b4 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -571,6 +571,7 @@ # Since: 5.0 ## { 'enum': 'MultiFDCompression', + 'prefix': 'MULTIFD_COMPRESSION', 'data': [ 'none', 'zlib', { 'name': 'zstd', 'if': 'CONFIG_ZSTD' }, { 'name': 'qpl', 'if': 'CONFIG_QPL' }, diff --git a/qapi/ui.json b/qapi/ui.json index 8c8464faac..f61a2b6b65 100644 --- a/qapi/ui.json +++ b/qapi/ui.json @@ -949,6 +949,7 @@ # Since: 1.3 ## { 'enum': 'QKeyCode', + 'prefix': 'Q_KEY_CODE', 'data': [ 'unmapped', 'shift', 'shift_r', 'alt', 'alt_r', 'ctrl', 'ctrl_r', 'menu', 'esc', '1', '2', '3', '4', '5', '6', '7', '8', @@ -1396,6 +1397,7 @@ # Since: 3.0 ## { 'enum' : 'DisplayGLMode', + 'prefix' : 'DISPLAYGL_MODE', # TODO drop 'data' : [ 'off', 'on', 'core', 'es' ] } ## diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py index 737b059e62..d7c8aa3365 100644 --- a/scripts/qapi/common.py +++ b/scripts/qapi/common.py @@ -40,22 +40,28 @@ def camel_to_upper(value: str) -> str: ENUM_Name2 -> ENUM_NAME2 ENUM24_Name -> ENUM24_NAME """ - c_fun_str = c_name(value, False) - if value.isupper(): - return c_fun_str + ret = value[0] + upc = value[0].isupper() - new_name = '' - length = len(c_fun_str) - for i in range(length): - char = c_fun_str[i] - # When char is upper case and no '_' appears before, do more checks - if char.isupper() and (i > 0) and c_fun_str[i - 1] != '_': - if i < length - 1 and c_fun_str[i + 1].islower(): - new_name += '_' - elif c_fun_str[i - 1].isdigit(): - new_name += '_' - new_name += char - return new_name.lstrip('_').upper() + # Copy remainder of ``value`` to ``ret`` with '_' inserted + for ch in value[1:]: + if ch.isupper() == upc: + pass + elif upc: + # ``ret`` ends in upper case, next char isn't: insert '_' + # before the last upper case char unless there is one + # already, or it's at the beginning + if len(ret) > 2 and ret[-2].isalnum(): + ret = ret[:-1] + '_' + ret[-1] + else: + # ``ret`` doesn't end in upper case, next char is: insert + # '_' before it + if ret[-1].isalnum(): + ret += '_' + ret += ch + upc = ch.isupper() + + return c_name(ret.upper()).lstrip('_') def c_enum_const(type_name: str, @@ -68,9 +74,9 @@ def c_enum_const(type_name: str, :param const_name: The name of this constant. :param prefix: Optional, prefix that overrides the type_name. """ - if prefix is not None: - type_name = prefix - return camel_to_upper(type_name) + '_' + c_name(const_name, False).upper() + if prefix is None: + prefix = camel_to_upper(type_name) + return prefix + '_' + c_name(const_name, False).upper() def c_name(name: str, protect: bool = True) -> str: diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py index d65c35f6ee..e97c978d38 100644 --- a/scripts/qapi/schema.py +++ b/scripts/qapi/schema.py @@ -1249,7 +1249,7 @@ def _def_predefineds(self) -> None: [{'name': n} for n in qtypes], None) self._def_definition(QAPISchemaEnumType( - 'QType', None, None, None, None, qtype_values, 'QTYPE')) + 'QType', None, None, None, None, qtype_values, None)) def _make_features( self, diff --git a/tests/qapi-schema/alternate-array.out b/tests/qapi-schema/alternate-array.out index a657d85738..2f30973ac3 100644 --- a/tests/qapi-schema/alternate-array.out +++ b/tests/qapi-schema/alternate-array.out @@ -1,7 +1,6 @@ module ./builtin object q_empty enum QType - prefix QTYPE member none member qnull member qnum diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out index ce4f6a4f0f..937070c2c4 100644 --- a/tests/qapi-schema/comments.out +++ b/tests/qapi-schema/comments.out @@ -1,7 +1,6 @@ module ./builtin object q_empty enum QType - prefix QTYPE member none member qnull member qnum diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out index 6d24f1127b..ec277be91e 100644 --- a/tests/qapi-schema/doc-good.out +++ b/tests/qapi-schema/doc-good.out @@ -1,7 +1,6 @@ module ./builtin object q_empty enum QType - prefix QTYPE member none member qnull member qnum diff --git a/tests/qapi-schema/empty.out b/tests/qapi-schema/empty.out index 3feb3f69d3..d1981f8586 100644 --- a/tests/qapi-schema/empty.out +++ b/tests/qapi-schema/empty.out @@ -1,7 +1,6 @@ module ./builtin object q_empty enum QType - prefix QTYPE member none member qnull member qnum diff --git a/tests/qapi-schema/include-repetition.out b/tests/qapi-schema/include-repetition.out index 16dbd9b819..c564d27862 100644 --- a/tests/qapi-schema/include-repetition.out +++ b/tests/qapi-schema/include-repetition.out @@ -1,7 +1,6 @@ module ./builtin object q_empty enum QType - prefix QTYPE member none member qnull member qnum diff --git a/tests/qapi-schema/include-simple.out b/tests/qapi-schema/include-simple.out index 48e923bfbc..ec8200ab18 100644 --- a/tests/qapi-schema/include-simple.out +++ b/tests/qapi-schema/include-simple.out @@ -1,7 +1,6 @@ module ./builtin object q_empty enum QType - prefix QTYPE member none member qnull member qnum diff --git a/tests/qapi-schema/indented-expr.out b/tests/qapi-schema/indented-expr.out index 6a30ded3fa..a7c22c3eef 100644 --- a/tests/qapi-schema/indented-expr.out +++ b/tests/qapi-schema/indented-expr.out @@ -1,7 +1,6 @@ module ./builtin object q_empty enum QType - prefix QTYPE member none member qnull member qnum diff --git a/tests/qapi-schema/qapi-schema-test.json b/tests/qapi-schema/qapi-schema-test.json index 8ca977c49d..0f5f54e621 100644 --- a/tests/qapi-schema/qapi-schema-test.json +++ b/tests/qapi-schema/qapi-schema-test.json @@ -119,6 +119,7 @@ 'data': [ 'value-a', 'value-b' ] } { 'enum': 'TestUnionEnumA', + 'prefix': 'TEST_UNION_ENUMA', # TODO drop 'data': [ 'value-a1', 'value-a2' ] } { 'struct': 'TestUnionTypeA1', diff --git a/tests/qapi-schema/qapi-schema-test.out b/tests/qapi-schema/qapi-schema-test.out index e2f0981348..add7346f49 100644 --- a/tests/qapi-schema/qapi-schema-test.out +++ b/tests/qapi-schema/qapi-schema-test.out @@ -1,7 +1,6 @@ module ./builtin object q_empty enum QType - prefix QTYPE member none member qnull member qnum @@ -109,6 +108,7 @@ enum TestUnionEnum member value-a member value-b enum TestUnionEnumA + prefix TEST_UNION_ENUMA member value-a1 member value-a2 object TestUnionTypeA1