Skip to content

Commit 5bf13d5

Browse files
authored
Merge pull request #51 from hit9/fix-compatible-text
Fix that extensible is forward_compatibility (instead of backward)
2 parents 88171fb + 29cf450 commit 5bf13d5

File tree

11 files changed

+58
-57
lines changed

11 files changed

+58
-57
lines changed

README.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ Features
7676
---------
7777

7878
- Supports bit level data serialization, **born for embedded development**.
79-
- Supports protocol `extensiblity <https://bitproto.readthedocs.io/en/latest/language.html#extensibility>`_ , for backward-compatibility.
79+
- Supports protocol `extensiblity <https://bitproto.readthedocs.io/en/latest/language.html#extensibility>`_ , for forward-compatibility.
8080
- Easy to start, syntax is similar to the well-known protobuf.
8181
- Supports languages: `C <https://bitproto.readthedocs.io/en/latest/c-guide.html>`_ (without dynamic memory allocation),
8282
`Go <https://bitproto.readthedocs.io/en/latest/go-guide.html>`_, `Python <https://bitproto.readthedocs.io/en/latest/python-guide.html>`_ .
@@ -217,7 +217,7 @@ The differences between bitproto and protobuf are:
217217
on structs in C.
218218

219219
* Protobuf works good on
220-
`backward compatibility <https://developers.google.com/protocol-buffers/docs/overview#backwards_compatibility>`_.
220+
`forward compatibility <https://developers.google.com/protocol-buffers/docs/overview#forward_compatibility>`_.
221221
For bitproto, this is the main shortcome of bitproto serialization until v0.4.0, since this version, it supports message's
222222
`extensiblity <https://bitproto.readthedocs.io/en/latest/language.html#extensibility>`_ by adding two bytes indicating
223223
the message size at head of the message's encoded buffer. This breaks the

changes.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ Version 0.4.2
5555
Version 0.4.0
5656
-------------
5757

58-
- Add support for ``message`` and ``enum`` extensiblity for protocol backward compatibility.
58+
- Add support for ``message`` and ``enum`` extensiblity for protocol forward compatibility.
5959
- Cut down the code size of generated language-specific files.
6060
- Refactor the bitproto compiler.
6161
- Refactor the bitproto serialization mechanism, using language-specific libraries instead of pure compiler-generated files.

compiler/bitproto/_ast.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -736,7 +736,7 @@ def __repr__(self) -> str:
736736

737737
@dataclass
738738
class ExtensibleType(Type):
739-
"""ExtensibleType is the type able to extend its size for backward-compatiable
739+
"""ExtensibleType is the type able to extend its size for forward-compatiable
740740
concern. When setting the `extensible` parameter to True, a micro buffer that
741741
indicates the type size will be inserted at the head of encoded buffer.
742742
In bitproto, array, enum and message are extensible types.

compiler/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
---------
2020
2121
- Supports bit level data serialization.
22-
- Supports protocol extensiblity, for backward-compatibility.
22+
- Supports protocol extensiblity, for forward-compatibility.
2323
- Very easy to start
2424
2525
- Protocol syntax is similar to the well-known protobuf.

docs/index.rst

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Features
4545
---------
4646

4747
- Supports bit level data serialization, **born for embedded development**.
48-
- Supports protocol :ref:`extensiblity <language-guide-extensibility>`, for backward-compatibility.
48+
- Supports protocol :ref:`extensiblity <language-guide-extensibility>`, for forward-compatibility.
4949
- Easy to start, syntax is similar to the well-known protobuf.
5050
- Supports languages: - :ref:`C <quickstart-c-guide>` (without dynamic memory allocation), :ref:`Go <quickstart-go-guide>`, - :ref:`Python <quickstart-python-guide>`.
5151
- Blazing fast encoding/decoding, :ref:`benchmark <performance-benchmark>`.
@@ -132,9 +132,7 @@ The differences between bitproto and protobuf are:
132132
think setting `aligned attribute to 1 <https://stackoverflow.com/a/11772340>`_
133133
on structs in C.
134134

135-
* Protobuf works good on
136-
`backward compatibility <https://developers.google.com/protocol-buffers/docs/overview#backwards_compatibility>`_.
137-
For bitproto, this is the main shortcome of bitproto serialization until
135+
* Forward-compatibility is the main shortcome of bitproto serialization until
138136
:ref:`v0.4.0 <version-0.4.0>`, since this version, it supports message's
139137
:ref:`extensiblity <language-guide-extensibility>` by adding two bytes indicating
140138
the message size at head of the message's encoded buffer. This breaks the

docs/language.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -437,11 +437,11 @@ Extensibility
437437
^^^^^^^^^^^^^
438438

439439
Bitproto knows exactly how many bits a message will occupy at compile time, because all types
440-
are fix-sized. This may make backwards-compatibility hard.
440+
are fix-sized. This may make `forward-compatibility <https://en.wikipedia.org/wiki/Forward_compatibility>`_ hard.
441441

442442
It seems ok to add new fields to the end of a message in use, because the structures of
443443
existing fields are unchanged, the decoding end won't scan the encoded bytes of new fields,
444-
then "the backward-compatibility achieved":
444+
then "the forward-compatibility achieved":
445445

446446
.. sourcecode:: bitproto
447447

docs/locales/zh/LC_MESSAGES/changelog.po

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: bitproto 0.4.0\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2023-01-02 22:16+0800\n"
11+
"POT-Creation-Date: 2023-05-22 21:23+0800\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <[email protected]>\n"
1515
"MIME-Version: 1.0\n"
1616
"Content-Type: text/plain; charset=utf-8\n"
1717
"Content-Transfer-Encoding: 8bit\n"
18-
"Generated-By: Babel 2.11.0\n"
18+
"Generated-By: Babel 2.12.1\n"
1919

2020
#: ../../changelog.rst:2 eb5e577b5cca451f97c84e6697bf5395
2121
msgid "Changelog"
@@ -94,7 +94,7 @@ msgstr ""
9494
#: ../../../changes.rst:58 3c499990cd38434f932a3558376617c5
9595
msgid ""
9696
"Add support for ``message`` and ``enum`` extensiblity for protocol "
97-
"backward compatibility."
97+
"forward compatibility."
9898
msgstr ""
9999

100100
#: ../../../changes.rst:59 ad10bcd6f05a4e5187b2d8ba2f3e5235
@@ -110,4 +110,3 @@ msgid ""
110110
"Refactor the bitproto serialization mechanism, using language-specific "
111111
"libraries instead of pure compiler-generated files."
112112
msgstr ""
113-

docs/locales/zh/LC_MESSAGES/index.po

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: bitproto 0.4.0\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2022-12-31 00:08+0800\n"
11+
"POT-Creation-Date: 2023-05-22 21:26+0800\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <[email protected]>\n"
1515
"MIME-Version: 1.0\n"
1616
"Content-Type: text/plain; charset=utf-8\n"
1717
"Content-Transfer-Encoding: 8bit\n"
18-
"Generated-By: Babel 2.11.0\n"
18+
"Generated-By: Babel 2.12.1\n"
1919

2020
#: ../../index.rst:2 bdade4b4967c435aba586a8934eea740
2121
msgid "The bit level data interchange format"
@@ -60,8 +60,8 @@ msgstr "支持比特级别的数据序列化, 为嵌入式开发而生"
6060
#: ../../index.rst:48 2ff118718b4a40be88167d8b2d2f126d
6161
msgid ""
6262
"Supports protocol :ref:`extensiblity <language-guide-extensibility>`, for"
63-
" backward-compatibility."
64-
msgstr "支持协议的 :ref:`扩展性 <language-guide-extensibility>`、向后兼容设计"
63+
" forward-compatibility."
64+
msgstr "支持协议的 :ref:`扩展性 <language-guide-extensibility>`、向前兼容设计"
6565

6666
#: ../../index.rst:49 0de44305b7f64e5ea96263ca97b55b9a
6767
msgid "Easy to start, syntax is similar to the well-known protobuf."
@@ -72,7 +72,9 @@ msgid ""
7272
"Supports languages: - :ref:`C <quickstart-c-guide>` (without dynamic "
7373
"memory allocation), :ref:`Go <quickstart-go-guide>`, - :ref:`Python "
7474
"<quickstart-python-guide>`."
75-
msgstr "支持的语言: :ref:`C (无动态内存申请) <quickstart-c-guide>`, :ref:`Go <quickstart-go-guide>` 和 :ref:`Python <quickstart-python-guide>`."
75+
msgstr ""
76+
"支持的语言: :ref:`C (无动态内存申请) <quickstart-c-guide>`, :ref:`Go <quickstart-go-"
77+
"guide>` 和 :ref:`Python <quickstart-python-guide>`."
7678

7779
#: ../../index.rst:51 7cf4617bb795450faafb37d3271c17c5
7880
msgid "Blazing fast encoding/decoding, :ref:`benchmark <performance-benchmark>`."
@@ -216,41 +218,37 @@ msgstr ""
216218

217219
#: ../../index.rst:135 3e018375744b48ce8a5b0c61e2ab8460
218220
msgid ""
219-
"Protobuf works good on `backward compatibility "
220-
"<https://developers.google.com/protocol-"
221-
"buffers/docs/overview#backwards_compatibility>`_. For bitproto, this is "
222-
"the main shortcome of bitproto serialization until :ref:`v0.4.0 "
223-
"<version-0.4.0>`, since this version, it supports message's "
224-
":ref:`extensiblity <language-guide-extensibility>` by adding two bytes "
225-
"indicating the message size at head of the message's encoded buffer. "
226-
"This breaks the traditional data layout design by encoding some minimal "
227-
"reflection size information in, so this is designed as an optional "
228-
"feature."
221+
"Forward-compatibility is the main shortcome of bitproto serialization "
222+
"until :ref:`v0.4.0 <version-0.4.0>`, since this version, it supports "
223+
"message's :ref:`extensiblity <language-guide-extensibility>` by adding "
224+
"two bytes indicating the message size at head of the message's encoded "
225+
"buffer. This breaks the traditional data layout design by encoding some "
226+
"minimal reflection size information in, so this is designed as an "
227+
"optional feature."
229228
msgstr ""
230-
"Protobuf 对于 `向后兼容 <https://developers.google.com/protocol-"
231-
"buffers/docs/overview#backwards_compatibility>`_ 的特性支持的很好。对于 bitproto,直到 "
232-
":ref:`v0.4.0 <version-0.4.0>` 这都是其一个主要的缺点。自从这个版本之后,bitproto "
229+
"对于 bitproto,直到 "
230+
":ref:`v0.4.0 <version-0.4.0>` 之前,向前兼容都是其一个主要的缺点。自从这个版本之后,bitproto "
233231
"通过在编码后的字节流头部新增两个字节的方式实现了 :ref:`扩展性 <language-guide-extensibility>` "
234232
"的支持,这两个字节存储了相关消息的占用字节数的多少。这个设计打破了 bitproto "
235233
"传统的编码结构的设计,因为新增了一些对于编码大小的反射信息,因此这个功能被设计为可选的。"
236234

237-
#: ../../index.rst:145 299f1275a54e46b494de3d92413a4e4b
235+
#: ../../index.rst:143 299f1275a54e46b494de3d92413a4e4b
238236
msgid "Shortcomes"
239237
msgstr "缺点"
240238

241-
#: ../../index.rst:147 9bebbcfbdbe34230bbc816acbb02c511
239+
#: ../../index.rst:145 9bebbcfbdbe34230bbc816acbb02c511
242240
msgid "Known shortcomes of bitproto:"
243241
msgstr "已知的 bitproto 的缺点如下:"
244242

245-
#: ../../index.rst:149 4a6419cd37ae4ad3be9b5ee0652112c4
243+
#: ../../index.rst:147 4a6419cd37ae4ad3be9b5ee0652112c4
246244
msgid ""
247245
"bitproto doesn't support varying sized types. For example, a ``unit37`` "
248246
"always occupies 37 bits even you assign it a small value like ``1``."
249247
msgstr ""
250248
"bitproto 不支持变长数据类型。 举例来说,一个 ``uint37`` 类型的数据永远在编码后占用 37 个比特,即使你赋值它一个诸如 "
251249
"``1`` 这样很小的值。"
252250

253-
#: ../../index.rst:152 8d2a5e4025d541ca939419923cce1100
251+
#: ../../index.rst:150 8d2a5e4025d541ca939419923cce1100
254252
msgid ""
255253
"Which means there will be lots of zero bytes if the meaningful data "
256254
"occupies little on this type. For instance, there will be ``n-1`` bytes "
@@ -259,7 +257,7 @@ msgstr ""
259257
"这意味着,如果有意义的数据占用类型的占比较小的时候,编码后的数据中会有很多零字节。比如,当一个大小为 ``n`` "
260258
"个字节的类型只被使用了其中一个字节的时候,会有 ``n-1`` 个字节会是零字节。"
261259

262-
#: ../../index.rst:156 b014a17d871142d68f138748e2e1d6dd
260+
#: ../../index.rst:154 b014a17d871142d68f138748e2e1d6dd
263261
msgid ""
264262
"Generally, we actually don't care much about this, since there are not so"
265263
" many bytes in communication with embedded devices. The protocol itself "
@@ -270,7 +268,7 @@ msgstr ""
270268
"一般来说,我们并不特别关心这个问题,因为在嵌入式设备上的通信量一般不会有多少字节。这里的协议自身一般要设计地紧凑一些。如果你真的比较关心这个问题,可以考虑使用"
271269
" `zlib <https://zlib.net/>`_ 类似的压缩机制,在消息编码后进行一次协议压缩。"
272270

273-
#: ../../index.rst:161 687204ff4d4e4b1bb0ade357e24192cb
271+
#: ../../index.rst:159 687204ff4d4e4b1bb0ade357e24192cb
274272
msgid ""
275273
"bitproto can't provide :ref:`best encoding performance <performance-"
276274
"optimization-mode>` with :ref:`extensibility <language-guide-"
@@ -279,7 +277,7 @@ msgstr ""
279277
"bitproto 无法同时提供 :ref:`最佳的性能 <performance-optimization-mode>` 和 "
280278
":ref:`扩展性能力 <language-guide-extensibility>`。"
281279

282-
#: ../../index.rst:164 e4026a353d514c908bec9320a3799370
280+
#: ../../index.rst:162 e4026a353d514c908bec9320a3799370
283281
msgid ""
284282
"There's an :ref:`optimization mode <performance-optimization-mode>` "
285283
"designed in bitproto to generate plain encoding/decoding statements "
@@ -293,7 +291,7 @@ msgstr ""
293291
"中所有的类型都是定长的,因此我们可以在代码生成阶段就清楚地知道如何对其进行编解码。压测的结果表明,这个模式带来了巨大的性能提升,不过目前为止我还没有想到一个办法来支持"
294292
" bitproto 的扩展性功能和这个性能优化模式一起工作。"
295293

296-
#: ../../index.rst:171 f6eed4ecd7f54ebb82d853f61b9a2132
294+
#: ../../index.rst:169 f6eed4ecd7f54ebb82d853f61b9a2132
297295
msgid "Content list"
298296
msgstr "内容列表"
299297

docs/locales/zh/LC_MESSAGES/language.po

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: bitproto 0.4.0\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2022-12-26 21:32+0800\n"
11+
"POT-Creation-Date: 2023-05-22 21:23+0800\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <[email protected]>\n"
1515
"MIME-Version: 1.0\n"
1616
"Content-Type: text/plain; charset=utf-8\n"
1717
"Content-Transfer-Encoding: 8bit\n"
18-
"Generated-By: Babel 2.11.0\n"
18+
"Generated-By: Babel 2.12.1\n"
1919

2020
#: ../../language.rst:4 1f779ce1fb214cc7a376e7eb752bae1d
2121
msgid "Language Guide"
@@ -401,8 +401,9 @@ msgstr "扩展性"
401401
#: ../../language.rst:439 5f70af344e4f486d9190b6bd0e313be6
402402
msgid ""
403403
"Bitproto knows exactly how many bits a message will occupy at compile "
404-
"time, because all types are fix-sized. This may make backwards-"
405-
"compatibility hard."
404+
"time, because all types are fix-sized. This may make `forward-"
405+
"compatibility <https://en.wikipedia.org/wiki/Forward_compatibility>`_ "
406+
"hard."
406407
msgstr ""
407408
"因为 bitproto 中所有类型都是定长的,因此 "
408409
"bitproto编译器在代码生成阶段就可以清楚地知道一个消息会在编码后占用多少比特。但是,这给协议的兼容性设计造成了一点麻烦。"
@@ -411,11 +412,11 @@ msgstr ""
411412
msgid ""
412413
"It seems ok to add new fields to the end of a message in use, because the"
413414
" structures of existing fields are unchanged, the decoding end won't scan"
414-
" the encoded bytes of new fields, then \"the backward-compatibility "
415+
" the encoded bytes of new fields, then \"the forward-compatibility "
415416
"achieved\":"
416417
msgstr ""
417418
"如果我们把新增字段追加到消息的尾巴上,看上去似乎满足了协议的兼容性设计。因为已经存在的老的字段的结构是不变的,解码的一端不会扫描到新增的字段的数据,这样就实现了"
418-
" \"协议向后兼容\" 。"
419+
" \"协议向前兼容\" 。"
419420

420421
#: ../../language.rst:454 404d3fdb75a5452191b2846bf3735601
421422
msgid ""
@@ -665,9 +666,11 @@ msgstr ""
665666
#: ../../language.rst:662 d8243880ab7145a0ad9b686f35e3dbc1
666667
msgid ""
667668
"Syntax highlighting settings for PyCharm is available from `bitproto's "
668-
"github repository <https://github.com/hit9/bitproto/tree/master/editors/pycharm>`_."
669+
"github repository "
670+
"<https://github.com/hit9/bitproto/tree/master/editors/pycharm>`_."
669671
msgstr ""
670-
"bitproto 的 PyCharm 语法高亮插件: `<https://github.com/hit9/bitproto/tree/master/editors/pycharm>`_."
672+
"bitproto 的 PyCharm 语法高亮插件: "
673+
"`<https://github.com/hit9/bitproto/tree/master/editors/pycharm>`_."
671674

672675
#: ../../language.rst:666 867939080c3643a6ad15e3ce30b70e9f
673676
msgid "VSCode"
@@ -677,7 +680,9 @@ msgstr ""
677680
msgid ""
678681
"Install the extension from marketplace: `bitproto vscode extension "
679682
"<https://marketplace.visualstudio.com/items?itemName=hit9.bitproto>`_."
680-
msgstr "VSCode 插件可以直接从市场安装: `<https://marketplace.visualstudio.com/items?itemName=hit9.bitproto>`_."
683+
msgstr ""
684+
"VSCode 插件可以直接从市场安装: "
685+
"`<https://marketplace.visualstudio.com/items?itemName=hit9.bitproto>`_."
681686

682687
#~ msgid "``int{8,16,32,64}``"
683688
#~ msgstr ""

docs/locales/zh/LC_MESSAGES/performance.po

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ msgid ""
88
msgstr ""
99
"Project-Id-Version: bitproto 0.4.0\n"
1010
"Report-Msgid-Bugs-To: \n"
11-
"POT-Creation-Date: 2023-01-02 22:16+0800\n"
11+
"POT-Creation-Date: 2023-05-22 21:23+0800\n"
1212
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414
"Language-Team: LANGUAGE <[email protected]>\n"
1515
"MIME-Version: 1.0\n"
1616
"Content-Type: text/plain; charset=utf-8\n"
1717
"Content-Transfer-Encoding: 8bit\n"
18-
"Generated-By: Babel 2.11.0\n"
18+
"Generated-By: Babel 2.12.1\n"
1919

2020
#: ../../performance.rst:4 bb38bc42f11b4de68c861ba21eb53e25
2121
msgid "Performance"
@@ -82,8 +82,9 @@ msgstr ""
8282
"我在一个 `stm32 开发板 <https://www.st.com/content/st_com/en/products"
8383
"/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus/stm32"
8484
"-mainstream-mcus/stm32f1-series/stm32f103/stm32f103ze.html>`_ (arm "
85-
"cortex-m3 72MHz cpu) 上, 对 ``100`` 字节大小的消息进行了压测测试, 一次编码调用或者解码调用占用 ``120~140 μs`` 左右的时间,并且可以通过 "
86-
":ref:`优化模式 <performance-optimization-mode>` 来降低到 ``15 μs`` 左右。"
85+
"cortex-m3 72MHz cpu) 上, 对 ``100`` 字节大小的消息进行了压测测试, 一次编码调用或者解码调用占用 "
86+
"``120~140 μs`` 左右的时间,并且可以通过 :ref:`优化模式 <performance-optimization-mode>` "
87+
"来降低到 ``15 μs`` 左右。"
8788

8889
#: ../../performance.rst:34 cc212dc5e38441c8ac7fe153e792ebcd
8990
msgid ""
@@ -182,8 +183,8 @@ msgstr "性能敏感的场景,``100μs`` 和 ``10μs`` 完全不是一回事
182183
#: ../../performance.rst:90 6e43e0071f2446cdb2e9b84f507785ea
183184
msgid ""
184185
"The firmwares of communication ends are always upgraded together, thus "
185-
"the backward-compatibility is not so important."
186-
msgstr "通信相关方的固件升级总是一起进行的,这样向后兼容性就不那么重要了。"
186+
"the forward-compatibility is not so important."
187+
msgstr "通信相关方的固件升级总是一起进行的,这样向前兼容性就不那么重要了。"
187188

188189
#: ../../performance.rst:91 57d569b743564fdab21876c78629b899
189190
msgid "Firmware updates are not frequent, even only once for a long time."

docs/performance.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ Optimization mode is designed for performance-sensitive scenarios, such as low p
8787
compute-intensive microcontrollers. I recommend to use the optimization mode when:
8888

8989
* Performance-sensitive scenarios, where ``100μs`` means totally different with ``10μs``.
90-
* The firmwares of communication ends are always upgraded together, thus the backward-compatibility is not so important.
90+
* The firmwares of communication ends are always upgraded together, thus the forward-compatibility is not so important.
9191
* Firmware updates are not frequent, even only once for a long time.
9292

9393
Specially, for the scenario that firmware-upgrading of communication ends have to be processed partially,

0 commit comments

Comments
 (0)