Looks good to me, thanks.

Reviewed-by: Yifeng Sun <pkusunyif...@gmail.com>

On Thu, Nov 1, 2018 at 8:07 AM Ben Pfaff <b...@ovn.org> wrote:

> On my machine it takes almost a second for enchant to read its dictionary.
> This time is wasted when spell checking is not enabled.  This commit makes
> checkpatch read the dictionary only when it will be used.
>
> Signed-off-by: Ben Pfaff <b...@ovn.org>
> ---
>  utilities/checkpatch.py | 117
> +++++++++++++++++++++++++-----------------------
>  1 file changed, 62 insertions(+), 55 deletions(-)
>
> diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py
> index 54aa4b6346db..8bbda78989c4 100755
> --- a/utilities/checkpatch.py
> +++ b/utilities/checkpatch.py
> @@ -21,59 +21,6 @@ import os
>  import re
>  import sys
>
> -try:
> -    import enchant
> -
> -    extra_keywords = ['ovs', 'vswitch', 'vswitchd', 'ovs-vswitchd',
> 'netdev',
> -                      'selinux', 'ovs-ctl', 'dpctl', 'ofctl',
> 'openvswitch',
> -                      'dpdk', 'hugepage', 'hugepages', 'pmd', 'upcall',
> -                      'vhost', 'rx', 'tx', 'vhostuser', 'openflow',
> 'qsort',
> -                      'rxq', 'txq', 'perf', 'stats', 'struct', 'int',
> -                      'char', 'bool', 'upcalls', 'nicira', 'bitmask',
> 'ipv4',
> -                      'ipv6', 'tcp', 'tcp4', 'tcpv4', 'udp', 'udp4',
> 'udpv4',
> -                      'icmp', 'icmp4', 'icmpv6', 'vlan', 'vxlan', 'cksum',
> -                      'csum', 'checksum', 'ofproto', 'numa', 'mempool',
> -                      'mempools', 'mbuf', 'mbufs', 'hmap', 'cmap', 'smap',
> -                      'dhcpv4', 'dhcp', 'dhcpv6', 'opts', 'metadata',
> -                      'geneve', 'mutex', 'netdev', 'netdevs', 'subtable',
> -                      'virtio', 'qos', 'policer', 'datapath', 'tunctl',
> -                      'attr', 'ethernet', 'ether', 'defrag', 'defragment',
> -                      'loopback', 'sflow', 'acl', 'initializer', 'recirc',
> -                      'xlated', 'unclosed', 'netlink', 'msec', 'usec',
> -                      'nsec', 'ms', 'us', 'ns', 'kilobits', 'kbps',
> -                      'kilobytes', 'megabytes', 'mbps', 'gigabytes',
> 'gbps',
> -                      'megabits', 'gigabits', 'pkts', 'tuple', 'miniflow',
> -                      'megaflow', 'conntrack', 'vlans', 'vxlans', 'arg',
> -                      'tpid', 'xbundle', 'xbundles', 'mbundle',
> 'mbundles',
> -                      'netflow', 'localnet', 'odp', 'pre', 'dst', 'dest',
> -                      'src', 'ethertype', 'cvlan', 'ips', 'msg', 'msgs',
> -                      'liveness', 'userspace', 'eventmask', 'datapaths',
> -                      'slowpath', 'fastpath', 'multicast', 'unicast',
> -                      'revalidation', 'namespace', 'qdisc', 'uuid',
> 'ofport',
> -                      'subnet', 'revalidation', 'revalidator',
> 'revalidate',
> -                      'l2', 'l3', 'l4', 'openssl', 'mtu', 'ifindex',
> 'enum',
> -                      'enums', 'http', 'https', 'num', 'vconn', 'vconns',
> -                      'conn', 'nat', 'memset', 'memcmp', 'strcmp',
> -                      'strcasecmp', 'tc', 'ufid', 'api', 'ofpbuf',
> 'ofpbufs',
> -                      'hashmaps', 'hashmap', 'deref', 'dereference', 'hw',
> -                      'prio', 'sendmmsg', 'sendmsg', 'malloc', 'free',
> 'alloc',
> -                      'pid', 'ppid', 'pgid', 'uid', 'gid', 'sid', 'utime',
> -                      'stime', 'cutime', 'cstime', 'vsize', 'rss',
> 'rsslim',
> -                      'whcan', 'gtime', 'eip', 'rip', 'cgtime', 'dbg',
> 'gw',
> -                      'sbrec', 'bfd', 'sizeof', 'pmds', 'nic', 'nics',
> 'hwol',
> -                      'encap', 'decap', 'tlv', 'tlvs', 'decapsulation',
> 'fd',
> -                      'cacheline', 'xlate', 'skiplist', 'idl',
> 'comparator',
> -                      'natting', 'alg', 'pasv', 'epasv', 'wildcard',
> 'nated',
> -                      'amd64', 'x86_64', 'recirculation']
> -
> -    spell_check_dict = enchant.Dict("en_US")
> -    for kw in extra_keywords:
> -        spell_check_dict.add(kw)
> -
> -    no_spellcheck = False
> -except:
> -    no_spellcheck = True
> -
>  RETURN_CHECK_INITIAL_STATE = 0
>  RETURN_CHECK_STATE_WITH_RETURN = 1
>  RETURN_CHECK_AWAITING_BRACE = 2
> @@ -86,6 +33,66 @@ total_line = 0
>  colors = False
>  spellcheck_comments = False
>  quiet = False
> +spell_check_dict = None
> +
> +
> +def open_spell_check_dict():
> +    import enchant
> +
> +    try:
> +        extra_keywords = ['ovs', 'vswitch', 'vswitchd', 'ovs-vswitchd',
> +                          'netdev', 'selinux', 'ovs-ctl', 'dpctl',
> 'ofctl',
> +                          'openvswitch', 'dpdk', 'hugepage', 'hugepages',
> +                          'pmd', 'upcall', 'vhost', 'rx', 'tx',
> 'vhostuser',
> +                          'openflow', 'qsort', 'rxq', 'txq', 'perf',
> 'stats',
> +                          'struct', 'int', 'char', 'bool', 'upcalls',
> 'nicira',
> +                          'bitmask', 'ipv4', 'ipv6', 'tcp', 'tcp4',
> 'tcpv4',
> +                          'udp', 'udp4', 'udpv4', 'icmp', 'icmp4',
> 'icmpv6',
> +                          'vlan', 'vxlan', 'cksum', 'csum', 'checksum',
> +                          'ofproto', 'numa', 'mempool', 'mempools',
> 'mbuf',
> +                          'mbufs', 'hmap', 'cmap', 'smap', 'dhcpv4',
> 'dhcp',
> +                          'dhcpv6', 'opts', 'metadata', 'geneve', 'mutex',
> +                          'netdev', 'netdevs', 'subtable', 'virtio',
> 'qos',
> +                          'policer', 'datapath', 'tunctl', 'attr',
> 'ethernet',
> +                          'ether', 'defrag', 'defragment', 'loopback',
> 'sflow',
> +                          'acl', 'initializer', 'recirc', 'xlated',
> 'unclosed',
> +                          'netlink', 'msec', 'usec', 'nsec', 'ms', 'us',
> 'ns',
> +                          'kilobits', 'kbps', 'kilobytes', 'megabytes',
> 'mbps',
> +                          'gigabytes', 'gbps', 'megabits', 'gigabits',
> 'pkts',
> +                          'tuple', 'miniflow', 'megaflow', 'conntrack',
> +                          'vlans', 'vxlans', 'arg', 'tpid', 'xbundle',
> +                          'xbundles', 'mbundle', 'mbundles', 'netflow',
> +                          'localnet', 'odp', 'pre', 'dst', 'dest', 'src',
> +                          'ethertype', 'cvlan', 'ips', 'msg', 'msgs',
> +                          'liveness', 'userspace', 'eventmask',
> 'datapaths',
> +                          'slowpath', 'fastpath', 'multicast', 'unicast',
> +                          'revalidation', 'namespace', 'qdisc', 'uuid',
> +                          'ofport', 'subnet', 'revalidation',
> 'revalidator',
> +                          'revalidate', 'l2', 'l3', 'l4', 'openssl',
> 'mtu',
> +                          'ifindex', 'enum', 'enums', 'http', 'https',
> 'num',
> +                          'vconn', 'vconns', 'conn', 'nat', 'memset',
> 'memcmp',
> +                          'strcmp', 'strcasecmp', 'tc', 'ufid', 'api',
> +                          'ofpbuf', 'ofpbufs', 'hashmaps', 'hashmap',
> 'deref',
> +                          'dereference', 'hw', 'prio', 'sendmmsg',
> 'sendmsg',
> +                          'malloc', 'free', 'alloc', 'pid', 'ppid',
> 'pgid',
> +                          'uid', 'gid', 'sid', 'utime', 'stime', 'cutime',
> +                          'cstime', 'vsize', 'rss', 'rsslim', 'whcan',
> 'gtime',
> +                          'eip', 'rip', 'cgtime', 'dbg', 'gw', 'sbrec',
> 'bfd',
> +                          'sizeof', 'pmds', 'nic', 'nics', 'hwol',
> 'encap',
> +                          'decap', 'tlv', 'tlvs', 'decapsulation', 'fd',
> +                          'cacheline', 'xlate', 'skiplist', 'idl',
> +                          'comparator', 'natting', 'alg', 'pasv', 'epasv',
> +                          'wildcard', 'nated', 'amd64', 'x86_64',
> +                          'recirculation']
> +
> +        global spell_check_dict
> +        spell_check_dict = enchant.Dict("en_US")
> +        for kw in extra_keywords:
> +            spell_check_dict.add(kw)
> +
> +        return True
> +    except:
> +        return False
>
>
>  def get_color_end():
> @@ -359,7 +366,7 @@ def filter_comments(current_line, keep=False):
>
>
>  def check_comment_spelling(line):
> -    if no_spellcheck or not spellcheck_comments:
> +    if not spell_check_dict or not spellcheck_comments:
>          return False
>
>      comment_words = filter_comments(line, True).replace(':', ' ').split('
> ')
> @@ -919,7 +926,7 @@ if __name__ == '__main__':
>          elif o in ("-f", "--check-file"):
>              checking_file = True
>          elif o in ("-S", "--spellcheck-comments"):
> -            if no_spellcheck:
> +            if not open_spell_check_dict():
>                  print("WARNING: The enchant library isn't availble.")
>                  print("         Please install python enchant.")
>              else:
> --
> 2.16.1
>
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to