[dpdk-dev,v2] maintainers: start a Linux-style file

Message ID 1422442255-25367-1-git-send-email-thomas.monjalon@6wind.com (mailing list archive)
State Accepted, archived
Headers

Commit Message

Thomas Monjalon Jan. 28, 2015, 10:50 a.m. UTC
This MAINTAINERS file is inspired from the Linux one.

Almost all files are split into areas in order to identify maintainers of
each DPDK area. Note that a maintainer is not a git tree manager.
Candidates are welcome to send a patch to sign up for one or several areas.

There is a script to check coverage, especially when adding or moving files.

Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
---
Changes in v2:
- add copyright and licence to check-maintainers.sh
- minor improvements in the script
---
 MAINTAINERS                  | 388 +++++++++++++++++++++++++++++++++++++++++++
 scripts/check-maintainers.sh | 117 +++++++++++++
 2 files changed, 505 insertions(+)
 create mode 100644 MAINTAINERS
 create mode 100755 scripts/check-maintainers.sh
  

Comments

Thomas Monjalon Jan. 29, 2015, 8:57 p.m. UTC | #1
2015-01-28 11:50, Thomas Monjalon:
> This MAINTAINERS file is inspired from the Linux one.
> 
> Almost all files are split into areas in order to identify maintainers of
> each DPDK area. Note that a maintainer is not a git tree manager.
> Candidates are welcome to send a patch to sign up for one or several areas.
> 
> There is a script to check coverage, especially when adding or moving files.
> 
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> Acked-by: Neil Horman <nhorman@tuxdriver.com>

Applied

New maintainers can now be registered by sending a patch and getting approved.
You are welcome.
  

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
new file mode 100644
index 0000000..1f7d04a
--- /dev/null
+++ b/MAINTAINERS
@@ -0,0 +1,388 @@ 
+DPDK Maintainers
+================
+
+The intention of this file is to provide a set of names that we can rely on
+for helping in patch reviews and questions.
+These names are additional recipients for emails sent to dev@dpdk.org.
+Please avoid private emails.
+
+Descriptions of section entries:
+
+	M: Maintainer's Full Name <address@domain>
+	T: Git tree location.
+	F: Files and directories with wildcard patterns.
+	   A trailing slash includes all files and subdirectory files.
+	   A wildcard includes all files but not subdirectories.
+	   One pattern per line. Multiple F: lines acceptable.
+	X: Files and directories exclusion, same rules as F:
+	K: Keyword regex pattern to match content.
+	   One regex pattern per line. Multiple K: lines acceptable.
+
+
+General Project Administration
+------------------------------
+M: Thomas Monjalon <thomas.monjalon@6wind.com>
+T: git://dpdk.org/dpdk
+F: MAINTAINERS
+F: scripts/check-maintainers.sh
+
+
+Security Issues
+---------------
+M: maintainers@dpdk.org
+
+
+Documentation (with overlaps)
+-------------
+F: doc/
+
+
+Build System
+------------
+F: GNUmakefile
+F: Makefile
+F: config/
+F: mk/
+F: pkg/
+F: scripts/depdirs-rule.sh
+F: scripts/gen-build-mk.sh
+F: scripts/gen-config-h.sh
+F: scripts/relpath.sh
+
+
+Environment Abstraction Layer
+-----------------------------
+
+EAL API and common code
+M: Thomas Monjalon <thomas.monjalon@6wind.com>
+F: lib/librte_eal/common/*
+F: lib/librte_eal/common/include/*
+F: lib/librte_eal/common/include/generic/
+F: app/test/test_alarm.c
+F: app/test/test_atomic.c
+F: app/test/test_byteorder.c
+F: app/test/test_common.c
+F: app/test/test_cpuflags.c
+F: app/test/test_cycles.c
+F: app/test/test_debug.c
+F: app/test/test_devargs.c
+F: app/test/test_eal*
+F: app/test/test_errno.c
+F: app/test/test_func_reentrancy.c
+F: app/test/test_interrupts.c
+F: app/test/test_logs.c
+F: app/test/test_memcpy*
+F: app/test/test_memory.c
+F: app/test/test_memzone.c
+F: app/test/test_pci.c
+F: app/test/test_per_lcore.c
+F: app/test/test_prefetch.c
+F: app/test/test_rwlock.c
+F: app/test/test_spinlock.c
+F: app/test/test_string_fns.c
+F: app/test/test_tailq.c
+F: app/test/test_version.c
+
+Secondary process
+K: RTE_PROC_
+F: doc/guides/prog_guide/multi_proc_support.rst
+F: app/test/test_mp_secondary.c
+F: examples/multi_process/
+F: doc/guides/sample_app_ug/multi_process.rst
+
+IBM Power
+F: lib/librte_eal/common/include/arch/ppc_64/
+
+Intel x86
+F: lib/librte_eal/common/include/arch/x86/
+
+Linux EAL (with overlaps)
+F: lib/librte_eal/linuxapp/Makefile
+F: lib/librte_eal/linuxapp/eal/
+F: doc/guides/linux_gsg/
+
+Linux UIO
+F: lib/librte_eal/linuxapp/igb_uio/
+F: lib/librte_eal/linuxapp/eal/*uio*
+
+Linux VFIO
+F: lib/librte_eal/linuxapp/eal/*vfio*
+
+Linux Xen
+F: lib/librte_eal/linuxapp/xen_dom0/
+F: lib/librte_eal/linuxapp/eal/*xen*
+F: lib/librte_eal/linuxapp/eal/include/exec-env/rte_dom0_common.h
+F: lib/librte_mempool/rte_dom0_mempool.c
+F: lib/librte_pmd_xenvirt/
+F: app/test-pmd/mempool_*
+F: examples/vhost_xen/
+F: doc/guides/prog_guide/intel_dpdk_xen_based_packet_switch_sol.rst
+
+FreeBSD EAL (with overlaps)
+F: lib/librte_eal/bsdapp/Makefile
+F: lib/librte_eal/bsdapp/eal/
+F: doc/guides/freebsd_gsg/
+
+FreeBSD contigmem
+F: lib/librte_eal/bsdapp/contigmem/
+
+FreeBSD UIO
+F: lib/librte_eal/bsdapp/nic_uio/
+
+
+Core Libraries
+--------------
+
+Memory management
+F: lib/librte_malloc/
+F: doc/guides/prog_guide/malloc_lib.rst
+F: app/test/test_malloc.c
+F: lib/librte_mempool/
+F: doc/guides/prog_guide/mempool_lib.rst
+F: app/test/test_mempool*
+F: app/test/test_func_reentrancy.c
+
+Ring queue
+F: lib/librte_ring/
+F: app/test/test_ring*
+F: app/test/test_func_reentrancy.c
+
+Packet buffer
+F: lib/librte_mbuf/
+F: doc/guides/prog_guide/mbuf_lib.rst
+F: app/test/test_mbuf.c
+
+Ethernet API
+M: Thomas Monjalon <thomas.monjalon@6wind.com>
+F: lib/librte_ether/
+
+
+Drivers
+-------
+
+Link bonding
+F: lib/librte_pmd_bond/
+F: doc/guides/prog_guide/link_bonding_poll_mode_drv_lib.rst
+F: app/test/test_link_bonding.c
+
+Linux KNI
+F: lib/librte_eal/linuxapp/kni/
+F: lib/librte_kni/
+F: doc/guides/prog_guide/kernel_nic_interface.rst
+F: app/test/test_kni.c
+F: examples/kni/
+F: doc/guides/sample_app_ug/kernel_nic_interface.rst
+
+Linux AF_PACKET
+F: lib/librte_pmd_af_packet/
+
+Cisco enic
+F: lib/librte_pmd_enic/
+
+Intel e1000
+F: lib/librte_pmd_e1000/
+
+Intel ixgbe
+F: lib/librte_pmd_ixgbe/
+
+Intel i40e
+F: lib/librte_pmd_i40e/
+
+RedHat virtio
+F: lib/librte_pmd_virtio/
+F: doc/guides/prog_guide/poll_mode_drv_emulated_virtio_nic.rst
+F: lib/librte_vhost/
+F: doc/guides/prog_guide/vhost_lib.rst
+F: examples/vhost/
+F: doc/guides/sample_app_ug/vhost.rst
+
+VMware vmxnet3
+F: lib/librte_pmd_vmxnet3/
+F: doc/guides/prog_guide/poll_mode_drv_paravirtual_vmxnets_nic.rst
+
+PCAP PMD
+F: lib/librte_pmd_pcap/
+F: doc/guides/prog_guide/libpcap_ring_based_poll_mode_drv.rst
+
+Ring PMD
+F: lib/librte_pmd_ring/
+F: doc/guides/prog_guide/ring_lib.rst
+F: app/test/test_pmd_ring.c
+
+
+Packet processing
+-----------------
+
+Network headers
+F: lib/librte_net/
+
+IP fragmentation & reassembly
+F: lib/librte_ip_frag/
+F: doc/guides/prog_guide/ip_fragment_reassembly_lib.rst
+F: examples/ip_fragmentation/
+F: doc/guides/sample_app_ug/ip_frag.rst
+F: examples/ip_reassembly/
+F: doc/guides/sample_app_ug/ip_reassembly.rst
+
+Distributor
+F: lib/librte_distributor/
+F: doc/guides/prog_guide/packet_distrib_lib.rst
+F: app/test/test_distributor*
+F: examples/distributor/
+F: doc/guides/sample_app_ug/dist_app.rst
+
+Hierarchical scheduler
+F: lib/librte_sched/
+F: doc/guides/prog_guide/qos_framework.rst
+F: app/test/test_red.c
+F: app/test/test_sched.c
+F: examples/qos_sched/
+F: doc/guides/sample_app_ug/qos_scheduler.rst
+
+
+Packet Framework
+----------------
+F: lib/librte_pipeline/
+F: lib/librte_port/
+F: lib/librte_table/
+F: doc/guides/prog_guide/packet_framework.rst
+F: app/test/test_table*
+F: app/test-pipeline/
+F: doc/guides/sample_app_ug/test_pipeline.rst
+F: examples/ip_pipeline/
+F: doc/guides/sample_app_ug/internet_proto_ip_pipeline.rst
+
+
+Algorithms
+----------
+
+ACL
+F: lib/librte_acl/
+F: doc/guides/prog_guide/packet_classif_access_ctrl.rst
+F: app/test-acl/
+F: app/test/test_acl.*
+F: examples/l3fwd-acl/
+F: doc/guides/sample_app_ug/l3_forward_access_ctrl.rst
+
+Hashes
+F: lib/librte_hash/
+F: doc/guides/prog_guide/hash_lib.rst
+F: app/test/test_hash*
+F: app/test/test_func_reentrancy.c
+
+LPM
+F: lib/librte_lpm/
+F: doc/guides/prog_guide/lpm*
+F: app/test/test_lpm*
+F: app/test/test_func_reentrancy.c
+
+Traffic metering
+F: lib/librte_meter/
+F: doc/guides/sample_app_ug/qos_scheduler.rst
+F: app/test/test_meter.c
+F: examples/qos_meter/
+F: doc/guides/sample_app_ug/qos_metering.rst
+
+
+Other libraries
+---------------
+
+Configuration file
+F: lib/librte_cfgfile/
+
+Interactive command line
+F: lib/librte_cmdline/
+F: app/cmdline_test/
+F: app/test/test_cmdline*
+F: examples/cmdline/
+F: doc/guides/sample_app_ug/cmd_line.rst
+
+Qemu IVSHMEM
+F: lib/librte_ivshmem/
+F: lib/librte_eal/linuxapp/eal/eal_ivshmem.c
+F: doc/guides/prog_guide/ivshmem_lib.rst
+F: app/test/test_ivshmem.c
+F: examples/l2fwd-ivshmem/
+
+Key/Value parsing
+F: lib/librte_kvargs/
+F: app/test/test_kvargs.c
+
+Power management
+F: lib/librte_power/
+F: doc/guides/prog_guide/power_man.rst
+F: app/test/test_power*
+F: examples/l3fwd-power/
+F: doc/guides/sample_app_ug/l3_forward_power_man.rst
+F: examples/vm_power_manager/
+F: doc/guides/sample_app_ug/vm_power_management.rst
+
+Timers
+F: lib/librte_timer/
+F: doc/guides/prog_guide/timer_lib.rst
+F: app/test/test_timer*
+F: examples/timer/
+F: doc/guides/sample_app_ug/timer.rst
+
+
+Test Applications
+-----------------
+
+Unit tests framework
+F: app/test/autotest*
+F: app/test/commands.c
+F: app/test/packet_burst_generator.c
+F: app/test/packet_burst_generator.h
+F: app/test/process.h
+F: app/test/test.c
+F: app/test/test.h
+F: app/test/test_pmd_perf.c
+F: app/test/virtual_pmd.c
+F: app/test/virtual_pmd.h
+
+Driver testing tool
+F: app/test-pmd/
+F: doc/guides/testpmd_app_ug/
+
+
+Other Example Applications
+--------------------------
+
+F: examples/dpdk_qat/
+F: doc/guides/sample_app_ug/intel_quickassist.rst
+
+F: examples/exception_path/
+F: doc/guides/sample_app_ug/exception_path.rst
+
+F: examples/helloworld/
+F: doc/guides/sample_app_ug/hello_world.rst
+
+F: examples/ipv4_multicast/
+F: doc/guides/sample_app_ug/ipv4_multicast.rst
+
+F: examples/l2fwd/
+F: doc/guides/sample_app_ug/l2_forward_real_virtual.rst
+
+F: examples/l3fwd/
+F: doc/guides/sample_app_ug/l3_forward.rst
+
+F: examples/l3fwd-vf/
+F: doc/guides/sample_app_ug/l3_forward_virtual.rst
+
+F: examples/link_status_interrupt/
+F: doc/guides/sample_app_ug/link_status_intr.rst
+
+F: examples/load_balancer/
+F: doc/guides/sample_app_ug/load_balancer.rst
+
+F: examples/netmap_compat/
+F: doc/guides/sample_app_ug/netmap_compatibility.rst
+
+F: examples/quota_watermark/
+F: doc/guides/sample_app_ug/quota_watermark.rst
+
+F: examples/skeleton/
+
+F: examples/vmdq/
+F: examples/vmdq_dcb/
+F: doc/guides/sample_app_ug/vmdq_dcb_forwarding.rst
diff --git a/scripts/check-maintainers.sh b/scripts/check-maintainers.sh
new file mode 100755
index 0000000..2687cad
--- /dev/null
+++ b/scripts/check-maintainers.sh
@@ -0,0 +1,117 @@ 
+#! /bin/sh
+
+# BSD LICENSE
+#
+# Copyright 2015 6WIND S.A.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+#   * Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+#   * Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in
+#     the documentation and/or other materials provided with the
+#     distribution.
+#   * Neither the name of 6WIND S.A. nor the names of its
+#     contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Do some basic checks in MAINTAINERS file
+
+cd $(dirname $0)/..
+
+# Get files matching paths with wildcards and / meaning recursing
+files () # <path> [<path> ...]
+{
+	if [ -z "$1" ] ; then
+		return
+	fi
+	if [ -d .git ] ; then
+		git ls-files "$1"
+	else
+		find "$1" -type f |
+		sed 's,^\./,,'
+	fi |
+	# if not ended by /
+	if ! echo "$1" | grep -q '/[[:space:]]*$' ; then
+		# filter out deeper directories
+		sed "/\(\/[^/]*\)\{$(($(echo "$1" | grep -o / | wc -l) + 1))\}/d"
+	else
+		cat
+	fi
+	# next path
+	shift
+	files "$@"
+}
+
+# Get all files matching F: and X: fields
+parse_fx () # <index file>
+{
+	IFS='
+'
+	# parse each line excepted underlining
+	for line in $( (sed '/^-\+$/d' $1 ; echo) | sed 's,^$,§,') ; do
+		if echo "$line" | grep -q '^§$' ; then
+			# empty line delimit end of section
+			whitelist=$(files $flines)
+			blacklist=$(files $xlines)
+			match=$(aminusb "$whitelist" "$blacklist")
+			if [ -n "$match" ] ; then
+				echo "# $title"
+				echo "$match"
+			fi
+			# flush section
+			unset flines
+			unset xlines
+		elif echo "$line" | grep -q '^[A-Z]: ' ; then
+			# file matching pattern
+			flines=$(add_line_to_if "$line" "$flines" 'F: ')
+			# file exclusion pattern
+			xlines=$(add_line_to_if "$line" "$xlines" 'X: ')
+		else # assume it is a title
+			title="$line"
+		fi
+	done
+}
+
+# Add a line to a set of lines if it begins with right pattern
+add_line_to_if () # <new line> <lines> <head pattern>
+{
+	(
+		echo "$2"
+		echo "$1" | sed -rn "s,^$3(.*),\1,p"
+	) |
+	sed '/^$/d'
+}
+
+# Subtract two sets of lines
+aminusb () # <lines a> <lines b>
+{
+	printf "$1\n$2\n$2" | sort | uniq -u | sed '/^$/d'
+}
+
+all=$(files ./)
+listed=$(parse_fx MAINTAINERS | sed '/^#/d' | sort -u)
+
+echo '##########'
+echo '# files not listed'
+echo '##########'
+aminusb "$all" "$listed"
+
+# TODO: check patterns that match nothing
+# TODO: check overlaps
+# TODO: check orphan areas