All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v3 0/4] Add a get-developers script and database
@ 2016-09-12 20:54 Thomas Petazzoni
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script Thomas Petazzoni
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: Thomas Petazzoni @ 2016-09-12 20:54 UTC (permalink / raw)
  To: buildroot

Hello,

This is the third version of the patch series adding a get-developers
script and the corresponding DEVELOPERS database.

Since v2, the DEVELOPERS database has seen numerous updates, following
the feedback from several Buildroot developers.

Thanks,

Thomas

Thomas Petazzoni (4):
  support/scripts/get-developers: add new script
  DEVELOPERS: add initial list of Buildroot developers
  docs/manual: update contribute.txt to cover get-developers
  docs/manual: add new section about the DEVELOPERS file and
    get-developer

 DEVELOPERS                         | 1581 ++++++++++++++++++++++++++++++++++++
 docs/manual/contribute.txt         |   18 +-
 docs/manual/developers.txt         |   46 ++
 docs/manual/manual.txt             |    2 +
 support/scripts/get-developers     |   83 ++
 support/scripts/getdeveloperlib.py |  201 +++++
 6 files changed, 1929 insertions(+), 2 deletions(-)
 create mode 100644 DEVELOPERS
 create mode 100644 docs/manual/developers.txt
 create mode 100755 support/scripts/get-developers
 create mode 100644 support/scripts/getdeveloperlib.py

-- 
2.7.4

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script
  2016-09-12 20:54 [Buildroot] [PATCH v3 0/4] Add a get-developers script and database Thomas Petazzoni
@ 2016-09-12 20:54 ` Thomas Petazzoni
  2016-09-15 20:28   ` Arnout Vandecappelle
  2016-09-21  7:03   ` Peter Korsgaard
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 2/4] DEVELOPERS: add initial list of Buildroot developers Thomas Petazzoni
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 17+ messages in thread
From: Thomas Petazzoni @ 2016-09-12 20:54 UTC (permalink / raw)
  To: buildroot

This script, and its companion library, is more-or-less Buildroot's
equivalent to the kernel get_maintainer.pl script: it allows to get the
list of developers to whom a set of patches should be sent to.

To do so, it first relies on a text file, named DEVELOPERS, at the root
of the Buildroot source tree (added in a followup commit) to list the
developers and the files they are interested in. The DEVELOPERS file's
format is simple:

N:     Firstname Lastname <email>
F:     path/to/file
F:     path/to/another/file

This allows to associate developers with the files they are looking
after, be they related to a package, a defconfig, a filesystem image, a
package infrastructure, the documentation, or anything else.

When a directory is given, the tool assumes that the developer handles
all files and subdirectories in this directory. For example
"package/qt5/" can be used for the developers looking after all the Qt5
packages.

Conventional shell patterns can be used, so "package/python-*" can be
used for the developers who want to look after all packages matching
"python-*".

A few files are recognized specially:

 - .mk files are parsed, and if they contain $(eval
   $(<something>-package)), the developer is assumed to be looking after
   the corresponding package. This way, autobuilder failures for this
   package can be reported directly to this developer.

 - arch/Config.in.<arch> files are recognized as "the developer is
   looking after the <arch> architecture". In this case, get-developer
   parses the arch/Config.in.<arch> to get the list of possible BR2_ARCH
   values. This way, autobuilder failures for this package can be
   reported directly to this developer.

 - pkg/pkg-<infra>.mk are recognized as "the developer is looking after
   the <infra> package infrastructure. In this case, any patch that adds
   or touches a .mk file that uses this infrastructure will be sent to
   this developer.

Examples of usage:

$ ./support/scripts/get-developers 0001-ffmpeg-fix-bfin-build.patch
git send-email--to buildroot at buildroot.org --to "Luca Ceresoli <luca@lucaceresoli.net>" --to "Bernd Kuhls <bernd.kuhls@t-online.de>"

$ ./support/scripts/get-developers -p imx-lib
Arnout Vandecappelle <arnout@mind.be>
Gary Bisson <gary.bisson@boundarydevices.com>

$ ./support/scripts/get-developers -a bfin
Waldemar Brodkorb <wbx@openadk.org>

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 support/scripts/get-developers     |  83 +++++++++++++++
 support/scripts/getdeveloperlib.py | 201 +++++++++++++++++++++++++++++++++++++
 2 files changed, 284 insertions(+)
 create mode 100755 support/scripts/get-developers
 create mode 100644 support/scripts/getdeveloperlib.py

diff --git a/support/scripts/get-developers b/support/scripts/get-developers
new file mode 100755
index 0000000..f73512f
--- /dev/null
+++ b/support/scripts/get-developers
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+
+import argparse
+import getdeveloperlib
+
+def parse_args():
+    parser = argparse.ArgumentParser()
+    parser.add_argument('patches', metavar='P', type=str, nargs='*',
+                        help='list of patches')
+    parser.add_argument('-a', dest='architecture', action='store',
+                        help='find developers in charge of this architecture')
+    parser.add_argument('-p', dest='package', action='store',
+                        help='find developers in charge of this package')
+    parser.add_argument('-c', dest='check', action='store_const',
+                        const=True, help='list files not handled by any developer')
+    return parser.parse_args()
+
+def __main__():
+    devs = getdeveloperlib.parse_developers()
+    if devs is None:
+        sys.exit(1)
+    args = parse_args()
+
+    # Check that only one action is given
+    action = 0
+    if args.architecture is not None:
+        action += 1
+    if args.package is not None:
+        action += 1
+    if args.check:
+        action += 1
+    if len(args.patches) != 0:
+        action += 1
+    if action > 1:
+        print("Cannot do more than one action")
+        return
+    if action == 0:
+        print("No action specified")
+        return
+
+    # Handle the check action
+    if args.check:
+        files = getdeveloperlib.check_developers(devs)
+        for f in files:
+            print f
+
+    # Handle the architecture action
+    if args.architecture is not None:
+        for dev in devs:
+            if args.architecture in dev.architectures:
+                print(dev.name)
+        return
+
+    # Handle the package action
+    if args.package is not None:
+        for dev in devs:
+            if args.package in dev.packages:
+                print(dev.name)
+        return
+
+    # Handle the patches action
+    if len(args.patches) != 0:
+        (files, infras) = getdeveloperlib.analyze_patches(args.patches)
+        matching_devs = set()
+        for dev in devs:
+            # See if we have developers matching by package name
+            for f in files:
+                if dev.hasfile(f):
+                    matching_devs.add(dev.name)
+            # See if we have developers matching by package infra
+            for i in infras:
+                if i in dev.infras:
+                    matching_devs.add(dev.name)
+
+        result = "--to buildroot at buildroot.org"
+        for dev in matching_devs:
+            result += " --to \"%s\"" % dev
+
+        if result != "":
+            print("git send-email %s" % result)
+
+__main__()
+
diff --git a/support/scripts/getdeveloperlib.py b/support/scripts/getdeveloperlib.py
new file mode 100644
index 0000000..7b39041
--- /dev/null
+++ b/support/scripts/getdeveloperlib.py
@@ -0,0 +1,201 @@
+import sys
+import os
+import re
+import argparse
+import glob
+import subprocess
+
+#
+# Patch parsing functions
+#
+
+FIND_INFRA_IN_PATCH = re.compile("^\+\$\(eval \$\((host-)?([^-]*)-package\)\)$")
+
+def analyze_patch(patch):
+    """Parse one patch and return the list of files modified, added or
+    removed by the patch."""
+    files = set()
+    infras = set()
+    with open(patch, "r") as f:
+        for line in f:
+            # If the patch is adding a package, find which infra it is
+            m = FIND_INFRA_IN_PATCH.match(line)
+            if m:
+                infras.add(m.group(2))
+            if not line.startswith("+++ "):
+                continue
+            line.strip()
+            fname = line[line.find("/") + 1 : ].strip()
+            if fname == "dev/null":
+                continue
+            files.add(fname)
+    return (files, infras)
+
+FIND_INFRA_IN_MK = re.compile("^\$\(eval \$\((host-)?([^-]*)-package\)\)$")
+
+def fname_get_package_infra(fname):
+    """Checks whether the file name passed as argument is a Buildroot .mk
+    file describing a package, and find the infrastructure it's using."""
+    if not fname.endswith(".mk"):
+        return None
+
+    if not os.path.exists(fname):
+        return None
+
+    with open(fname, "r") as f:
+        for l in f:
+            l = l.strip()
+            m = FIND_INFRA_IN_MK.match(l)
+            if m:
+                return m.group(2)
+    return None
+
+def get_infras(files):
+    """Search in the list of files for .mk files, and collect the package
+    infrastructures used by those .mk files."""
+    infras = set()
+    for fname in files:
+        infra = fname_get_package_infra(fname)
+        if infra:
+            infras.add(infra)
+    return infras
+
+def analyze_patches(patches):
+    """Parse a list of patches and returns the list of files modified,
+    added or removed by the patches, as well as the list of package
+    infrastructures used by those patches (if any)"""
+    allfiles = set()
+    allinfras = set()
+    for patch in patches:
+        (files, infras) = analyze_patch(patch)
+        allfiles = allfiles | files
+        allinfras = allinfras | infras
+    allinfras = allinfras | get_infras(allfiles)
+    return (allfiles, allinfras)
+
+#
+# DEVELOPERS file parsing functions
+#
+
+class Developer:
+    def __init__(self, name, files):
+        self.name = name
+        self.files = files
+        self.packages = parse_developer_packages(files)
+        self.architectures = parse_developer_architectures(files)
+        self.infras = parse_developer_infras(files)
+
+    def hasfile(self, f):
+        f = os.path.abspath(f)
+        for fs in self.files:
+            if f.startswith(fs):
+                return True
+        return False
+
+def parse_developer_packages(fnames):
+    """Given a list of file patterns, travel through the Buildroot source
+    tree to find which packages are implemented by those file
+    patterns, and return a list of those packages."""
+    packages = set()
+    for fname in fnames:
+        for root, dirs, files in os.walk(fname):
+            for f in files:
+                path = os.path.join(root, f)
+                if fname_get_package_infra(path):
+                    pkg = os.path.splitext(f)[0]
+                    packages.add(pkg)
+    return packages
+
+def parse_arches_from_config_in(fname):
+    """Given a path to an arch/Config.in.* file, parse it to get the list
+    of BR2_ARCH values for this architecture."""
+    arches = set()
+    with open(fname, "r") as f:
+        parsing_arches = False
+        for l in f:
+            l = l.strip()
+            if l == "config BR2_ARCH":
+                parsing_arches = True
+                continue
+            if parsing_arches:
+                m = re.match("^\s*default \"([^\"]*)\".*", l)
+                if m:
+                    arches.add(m.group(1))
+                else:
+                    parsing_arches = False
+    return arches
+
+def parse_developer_architectures(fnames):
+    """Given a list of file names, find the ones starting by
+    'arch/Config.in.', and use that to determine the architecture a
+    developer is working on."""
+    arches = set()
+    for fname in fnames:
+        if not re.match("^.*/arch/Config\.in\..*$", fname):
+            continue
+        arches = arches | parse_arches_from_config_in(fname)
+    return arches
+
+def parse_developer_infras(fnames):
+    infras = set()
+    for fname in fnames:
+        m = re.match("^package/pkg-([^.]*).mk$", fname)
+        if m:
+            infras.add(m.group(1))
+    return infras
+
+def parse_developers(basepath=None):
+    """Parse the DEVELOPERS file and return a list of Developer objects."""
+    developers = []
+    linen = 0
+    if basepath == None:
+        basepath = os.getcwd()
+    with open(os.path.join(basepath, "DEVELOPERS"), "r") as f:
+        files = []
+        name = None
+        for l in f:
+            l = l.strip()
+            if l.startswith("#"):
+                continue
+            elif l.startswith("N:"):
+                if name is not None or len(files) != 0:
+                    print("Syntax error in DEVELOPERS file, line %d" % linen)
+                name = l[2:].strip()
+            elif l.startswith("F:"):
+                fname = l[2:].strip()
+                dev_files = glob.glob(os.path.join(basepath, fname))
+                if len(dev_files) == 0:
+                    print("WARNING: '%s' doesn't match any file" % fname)
+                files += dev_files
+            elif l == "":
+                if not name:
+                    continue
+                developers.append(Developer(name, files))
+                files = []
+                name = None
+            else:
+                print("Syntax error in DEVELOPERS file, line %d: '%s'" % (linen, l))
+                return None
+            linen += 1
+    # handle last developer
+    if name is not None:
+        developers.append(Developer(name, files))
+    return developers
+
+def check_developers(developers, basepath=None):
+    """Look at the list of files versioned in Buildroot, and returns the
+    list of files that are not handled by any developer"""
+    if basepath == None:
+        basepath = os.getcwd()
+    cmd = ["git", "--git-dir", os.path.join(basepath, ".git"), "ls-files"]
+    files = subprocess.check_output(cmd).strip().split("\n")
+    unhandled_files = []
+    for f in files:
+        handled = False
+        for d in developers:
+            if d.hasfile(os.path.join(basepath, f)):
+                handled = True
+                break
+        if not handled:
+            unhandled_files.append(f)
+    return unhandled_files
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 2/4] DEVELOPERS: add initial list of Buildroot developers
  2016-09-12 20:54 [Buildroot] [PATCH v3 0/4] Add a get-developers script and database Thomas Petazzoni
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script Thomas Petazzoni
@ 2016-09-12 20:54 ` Thomas Petazzoni
  2016-09-21  7:04   ` Peter Korsgaard
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 3/4] docs/manual: update contribute.txt to cover get-developers Thomas Petazzoni
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: Thomas Petazzoni @ 2016-09-12 20:54 UTC (permalink / raw)
  To: buildroot

This is an initial list of Buildroot developers. It has been created
semi-automatically by parsing the Git history, and finding the authors
of commits with a title like "<foo>: new package". Some additional
manual tweaking has been done (merging multiple entries corresponding to
the same person, adding some more entries, etc.).

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 DEVELOPERS | 1581 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 1581 insertions(+)
 create mode 100644 DEVELOPERS

diff --git a/DEVELOPERS b/DEVELOPERS
new file mode 100644
index 0000000..605af96
--- /dev/null
+++ b/DEVELOPERS
@@ -0,0 +1,1581 @@
+# Syntax:
+#
+# N:	Firstname Lastname <email>
+# F:	file pattern or directory
+# F:	file pattern or directory
+#
+# The "F" entries can be:
+#
+# - A directory, in which case all patches touching any file in this
+#   directory or its subdirectories will be CC'ed to the developer.
+# - A pattern, in which case the pattern will be expanded, and then
+#   all files/directories (and their subdirectories) will be
+#   considered when matching against a patch
+#
+# Notes:
+#
+# - When a developer adds an "arch/Config.in.<arch>" file to its list
+#   of files, he is considered a developer of this architecture. He
+#   will receive e-mail notifications about build failures occuring on
+#   this architecture. Not more than one e-mail per day is sent.
+# - When a developer adds a directory that contains one or several
+#   packages, this developer will be notified when build failures
+#   occur. Not more than one e-mail per day is sent.
+# - When a developer adds an "package/pkg-<infra>.mk" file to its list
+#   of files, he is considered interested by this package
+#   infrastructure, and will be CC'ed on all patches that add or
+#   modify packages that use this infrastructure.
+
+N:	Adam Duskett <aduskett@gmail.com>
+F:	package/nginx-naxsi/
+
+N:	Alex Suykov <alex.suykov@gmail.com>
+F:	package/vboot-utils/
+
+N:	Alexander Clouter <alex+buildroot@digriz.org.uk>
+F:	package/odhcp6c/
+
+N:	Alexander Dahl <post@lespocky.de>
+F:	package/fastd/
+F:	package/libuecc/
+F:	package/putty/
+
+N:	Alexander Lukichev <alexander.lukichev@espotel.com>
+F:	package/openpgm/
+
+N:	Alexander Varnin <fenixk19@mail.ru>
+F:	package/liblog4c-localtime/
+
+N:	Alexandre Belloni <alexandre.belloni@free-electrons.com>
+F:	package/tz/
+
+N:	Alistair Francis <alistair.francis@xilinx.com>
+F:	package/xen/
+
+N:	Alvaro G. M <alvaro.gamez@hazent.com>
+F:	package/dcron/
+F:	package/libxmlrpc/
+F:	package/python-docopt/
+
+N:	Anders Darander <anders@chargestorm.se>
+F:	package/ktap/
+
+N:	Andr? Hentschel <nerv@dawncrow.de>
+F:	package/openal/
+F:	package/p7zip/
+F:	package/wine/
+
+N:	Andrew Ruder <andrew.ruder@elecsyscorp.com>
+F:	package/expect/
+
+N:	Andy Kennedy <andy.kennedy@adtran.com>
+F:	package/libunwind/
+
+N:	Angelo Compagnucci <angelo.compagnucci@gmail.com>
+F:	package/mono/
+F:	package/mono-gtksharp3/
+F:	package/monolite/
+F:	package/python-can/
+F:	package/python-pillow/
+F:	package/python-pydal/
+F:	package/python-web2py/
+F:	package/sysdig/
+
+N:	Anthony Viallard <viallard@syscom-instruments.com>
+F:	package/gnuplot/
+
+N:	Antoine T?nart <antoine.tenart@free-electrons.com>
+F:	package/wf111/
+
+N:	ARC Maintainers <arc-buildroot@synopsys.com>
+F:	arch/Config.in.arc
+
+N:	Ariel D'Alessandro <ariel@vanguardiasur.com.ar>
+F:	package/axfsutils/
+F:	package/mali-t76x/
+
+N:	Arnaud Aujon <arnaud@intelibre.fr>
+F:	package/espeak/
+
+N:	Arnout Vandecappelle <arnout@mind.be>
+F:	package/freescale-imx/firmware-imx/
+F:	package/freescale-imx/imx-lib/
+F:	package/gstreamer/gst-fsl-plugins/
+F:	package/owfs/
+F:	package/python-bottle/
+F:	package/sqlcipher/
+F:	package/stress/
+
+N:	Assaf Inbal <shmuelzon@gmail.com>
+F:	package/lbase64/
+F:	package/luabitop/
+F:	package/luacrypto/
+F:	package/luaexpatutils/
+F:	package/luaposix/
+F:	package/luasec/
+F:	package/lua-ev/
+F:	package/orbit/
+
+N:	Bartosz Golaszewski <bgolaszewski@baylibre.com>
+F:	package/autoconf-archive/
+F:	package/doxygen/
+F:	package/libserialport/
+F:	package/libsigrok/
+F:	package/libsigrokdecode/
+F:	package/libzip/
+F:	package/pulseview/
+F:	package/sigrok-cli/
+
+N:	Baruch Siach <baruch@tkos.co.il>
+F:	package/ebtables/
+F:	package/openipmi/
+
+N:	Ben Boeckel <mathstuf@gmail.com>
+F:	package/taskd/
+
+N:	Benjamin Kamath <kamath.ben@gmail.com>
+F:	package/lapack/
+
+N:	Bernd Kuhls <bernd.kuhls@t-online.de>
+F:	package/apache/
+F:	package/apr/
+F:	package/apr-util/
+F:	package/clamav/
+F:	package/dovecot/
+F:	package/dovecot-pigeonhole/
+F:	package/dtv-scan-tables/
+F:	package/eudev/
+F:	package/exim/
+F:	package/fetchmail/
+F:	package/freeswitch/
+F:	package/ffmpeg/
+F:	package/giflib/
+F:	package/glmark2/
+F:	package/jsoncpp/
+F:	package/kodi*
+F:	package/lame/
+F:	package/leafnode2/
+F:	package/libaacs/
+F:	package/libasplib/
+F:	package/libass/
+F:	package/libbdplus/
+F:	package/libbluray/
+F:	package/libbroadvoice/
+F:	package/libcdio/
+F:	package/libcec/
+F:	package/libcodec2/
+F:	package/libcrossguid/
+F:	package/libdcadec/
+F:	package/libdrm/
+F:	package/libdvbcsa/
+F:	package/libdvdcss/
+F:	package/libdvdnav/
+F:	package/libdvdread/
+F:	package/libebur128/
+F:	package/libfreeglut/
+F:	package/libg7221/
+F:	package/libglew/
+F:	package/libglfw/
+F:	package/libglu/
+F:	package/libhdhomerun/
+F:	package/libilbc/
+F:	package/libldns/
+F:	package/libmicrohttpd/
+F:	package/libminiupnpc/
+F:	package/libnatpmp/
+F:	package/libogg/
+F:	package/libopenh264/
+F:	package/libpciaccess/
+F:	package/libplatform/
+F:	package/libsidplay2/
+F:	package/libsilk/
+F:	package/libsndfile/
+F:	package/libsoil/
+F:	package/libsoundtouch/
+F:	package/libsquish/
+F:	package/liburiparser/
+F:	package/libva/
+F:	package/libva-intel-driver/
+F:	package/libvorbis/
+F:	package/libvpx/
+F:	package/libyuv/
+F:	package/mesa3d/
+F:	package/minidlna/
+F:	package/mjpg-streamer/
+F:	package/mplayer/
+F:	package/perl-crypt-openssl-random/
+F:	package/perl-crypt-openssl-rsa/
+F:	package/perl-db-file/
+F:	package/perl-digest-sha1/
+F:	package/perl-encode-detect/
+F:	package/perl-encode-locale/
+F:	package/perl-file-listing/
+F:	package/perl-html-parser/
+F:	package/perl-html-tagset/
+F:	package/perl-http-cookies/
+F:	package/perl-http-daemon/
+F:	package/perl-http-date/
+F:	package/perl-http-message/
+F:	package/perl-http-negotiate/
+F:	package/perl-io-html/
+F:	package/perl-lwp-mediatypes/
+F:	package/perl-mail-dkim/
+F:	package/perl-mailtools/
+F:	package/perl-mime-base64/
+F:	package/perl-net-dns/
+F:	package/perl-net-http/
+F:	package/perl-netaddr-ip/
+F:	package/perl-time-hires/
+F:	package/perl-timedate/
+F:	package/perl-uri/
+F:	package/perl-www-robotrules/
+F:	package/pixman/
+F:	package/pound/
+F:	package/pure-ftpd/
+F:	package/python-mako/
+F:	package/rtmpdump/
+F:	package/softether/
+F:	package/taglib/
+F:	package/tinyxml2/
+F:	package/tor/
+F:	package/transmission/
+F:	package/tvheadend/
+F:	package/unixodbc/
+F:	package/vlc/
+F:	package/vnstat/
+F:	package/x11r7/
+F:	package/x264/
+F:	package/x265/
+F:	package/znc/
+
+N:	Bimal Jacob <bimal.jacob@rockwellcollins.com>
+F:	package/nginx-upload/
+
+N:	Bogdan Radulescu <bogdan@nimblex.net>
+F:	package/iftop/
+F:	package/ncdu/
+
+N:	Bryan Brinsko <bryan.brinsko@rockwellcollins.com>
+F:	package/pps-tools/
+
+N:	Carlo Caione <carlo.caione@gmail.com>
+F:	package/sunxi-boards/
+
+N:	Carlos Santos <casantos@datacom.ind.br>
+F:	package/gmock/
+F:	package/gtest/
+F:	package/libpam-radius-auth/
+F:	package/libpam-tacplus/
+F:	package/perl-file-util/
+F:	package/util-linux/
+
+N:	Carsten Schoenert <c.schoenert@gmail.com>
+F:	package/dvbsnoop/
+F:	package/libdvbsi/
+F:	package/libsvg/
+F:	package/libsvg-cairo/
+
+N:	Chris Packham <judge.packham@gmail.com>
+F:	package/eventlog/
+F:	package/micropython/
+F:	package/micropython-lib/
+F:	package/syslog-ng/
+
+N:	Christian Stewart <christian@paral.in>
+F:	package/batman-adv/
+F:	package/docker-containerd/
+F:	package/docker-engine/
+F:	package/mosh/
+F:	package/rtl8821au/
+F:	package/runc/
+
+N:	Christophe Vu-Brugier <cvubrugier@fastmail.fm>
+F:	package/drbd-utils/
+F:	package/iotop/
+F:	package/python-configshell-fb/
+F:	package/python-rtslib-fb/
+F:	package/python-urwid/
+F:	package/targetcli-fb/
+
+N:	Clayton Shotwell <clayton.shotwell@rockwellcollins.com>
+F:	package/audit/
+F:	package/cpio/
+
+N:	Clayton Shotwell <clshotwe@rockwellcollins.com>
+F:	package/checkpolicy/
+F:	package/libcgroup/
+F:	package/libee/
+F:	package/libestr/
+F:	package/liblogging/
+F:	package/libselinux/
+F:	package/libsemanage/
+F:	package/libsepol/
+F:	package/sepolgen/
+F:	package/ustr/
+
+N:	C?dric Ch?pied <cedric.chepied@gmail.com>
+F:	package/znc/
+
+N:	Dagg Stompler <daggs@gmx.com>
+F:	package/libamcodec/
+F:	package/odroid-mali/
+F:	package/odroid-scripts/
+
+N:	Damien Lanson <damien@kal-host.com>
+F:	package/libvdpau/
+F:	package/log4cpp/
+
+N:	Daniel Nystr?m <daniel.nystrom@timeterminal.se>
+F:	package/e2tools/
+F:	package/fbgrab/
+
+N:	Daniel Price <daniel.price@gmail.com>
+F:	package/nodejs/
+F:	package/redis/
+
+N:	Daniel Sangue <daniel.sangue@sangue.ch>
+F:	package/libftdi1/
+
+N:	Danomi Manchego <danomimanchego123@gmail.com>
+F:	package/cjson/
+F:	package/jq/
+F:	package/ljsyscall/
+F:	package/lua-cjson/
+F:	package/luaexpat/
+F:	package/xinetd/
+
+N:	Dave Skok <blanco.ether@gmail.com>
+F:	package/ola/
+
+N:	David Bachelart <david.bachelart@bbright.com>
+F:	package/ccrypt/
+F:	package/dos2unix/
+F:	package/ipmiutil/
+F:	package/python-daemon/
+
+N:	David Bender <codehero@gmail.com>
+F:	package/benejson/
+F:	package/cgic/
+F:	package/freeradius-client/
+F:	package/openldap/
+
+N:	David du Colombier <0intro@gmail.com>
+F:	package/x264/
+
+N:	Davide Viti <zinosat@tiscali.it>
+F:	package/flann/
+F:	package/python-paho-mqtt/
+F:	package/qhull/
+F:	package/tcllib/
+
+N:	Denis Bodor <lefinnois@lefinnois.net>
+F:	package/libstrophe/
+
+N:	Dimitrios Siganos <dimitris@siganos.org>
+F:	package/wireless-regdb/
+
+N:	Dominik Faessler <faessler@was.ch>
+F:	package/logsurfer/
+F:	package/python-id3/
+
+N:	Doug Kehn <rdkehn@yahoo.com>
+F:	package/nss-pam-ldapd/
+F:	package/sp-oops-extract/
+F:	package/unscd/
+
+N:	Ed Swierk <eswierk@skyportsystems.com>
+F:	package/xxhash/
+
+N:	Eric Le Bihan <eric.le.bihan.dev@free.fr>
+F:	package/adwaita-icon-theme/
+F:	package/eudev/
+F:	package/hicolor-icon-theme/
+F:	package/jemalloc/
+F:	package/ninja/
+F:	package/smack/
+
+N:	Eric Limpens <limpens@gmail.com>
+F:	package/pifmrds/
+F:	package/ympd/
+
+N:	Erico Nunes <nunes.erico@gmail.com>
+F:	package/acpica/
+F:	package/acpitool/
+F:	package/efibootmgr/
+F:	package/efivar/
+F:	package/spi-tools/
+F:	package/xdotool/
+
+N:	Erik Stromdahl <erik.stromdahl@gmail.com>
+F:	package/mxsldr/
+
+N:	Ernesto L. Williams Jr <realcontrols@gmail.com>
+F:	package/szip/
+
+N:	Evan Zelkowitz <evan.zelkowitz@gmail.com>
+F:	package/sdl_gfx/
+
+N:	Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
+F:	arch/Config.in.nios2
+F:	package/fio/
+F:	package/iptraf-ng/
+F:	package/jimtcl/
+F:	package/nodm/
+F:	package/openbox/
+F:	package/supertuxkart/
+
+N:	Fabio Estevam <festevam@gmail.com>
+F:	configs/freescale_imx*
+
+N:	Fabio Porcedda <fabio.porcedda@gmail.com>
+F:	package/netsurf-buildsystem/
+
+N:	Fabrice Fontaine <fabrice.fontaine@orange.com>
+F:	package/domoticz/
+F:	package/openzwave/
+
+N:	Fabrice Fontaine <fontaine.fabrice@gmail.com>
+F:	package/alljoyn/
+F:	package/alljoyn-base/
+F:	package/alljoyn-tcl/
+F:	package/alljoyn-tcl-base/
+F:	package/gtksourceview/
+F:	package/gupnp-dlna/
+F:	package/gupnp-tools/
+F:	package/igd2-for-linux/
+F:	package/minissdpd/
+F:	package/tinycbor/
+F:	package/tinydtls/
+
+N:	Floris Bos <bos@je-eigen-domein.nl>
+F:	package/ipmitool/
+F:	package/odhcploc/
+
+N:	Francisco Gonzalez <gzmorell@gmail.com>
+F:	package/ser2net/
+
+N:	Francois Perrad <francois.perrad@gadz.org>
+F:	board/olimex/a20_olinuxino
+F:	configs/olimex_a20_olinuxino_*
+F:	package/4th/
+F:	package/botan/
+F:	package/cosmo/
+F:	package/dado/
+F:	package/ficl/
+F:	package/gdbm/
+F:	package/libtomcrypt/
+F:	package/libtommath/
+F:	package/libump/
+F:	package/linenoise/
+F:	package/ljlinenoise/
+F:	package/lpeg/
+F:	package/lpty/
+F:	package/lrandom/
+F:	package/lsqlite3/
+F:	package/lua*
+F:	package/lunit/
+F:	package/lzlib/
+F:	package/moarvm/
+F:	package/perl*
+F:	package/pkg-perl.mk
+F:	package/pkg-luarocks.mk
+F:	package/qemu/
+F:	package/tekui/
+F:	support/scripts/scancpan
+
+N:	Frank Hunleth <fhunleth@troodon-software.com>
+F:	package/am335x-pru-package/
+F:	package/libdmtx/
+F:	package/libsodium/
+F:	package/python-cherrypy/
+F:	package/sane-backends/
+F:	package/ucl/
+F:	package/upx/
+F:	package/zxing-cpp/
+
+N:	Gary Bisson <gary.bisson@boundarydevices.com>
+F:	board/boundarydevices/
+F:	configs/nitrogen*
+F:	package/freescale-imx/
+F:	package/gstreamer1/gst1-imx/
+F:	package/libimxvpuapi/
+F:	package/sshpass/
+
+N:	Geoff Levand <geoff@infradead.org>
+F:	package/flannel/
+
+N:	Geoffrey Ragot <geoffreyragot@gmail.com>
+F:	package/python-pycli/
+F:	package/python-pyyaml/
+
+N:	Gilles Talis <gilles.talis@gmail.com>
+F:	package/fdk-aac/
+F:	package/httping/
+F:	package/iozone/
+F:	package/ocrad/
+F:	package/webp/
+
+N:	Gregory Dymarek <gregd72002@gmail.com>
+F:	package/ding-libs/
+F:	package/gengetopt/
+F:	package/janus-gateway/
+F:	package/libnice/
+F:	package/libsrtp/
+F:	package/libwebsock/
+F:	package/sofia-sip/
+
+N:	Gregory Hermant <gregory.hermant@calao-systems.com>
+F:	package/bcusdk/
+F:	package/dfu-util/
+F:	package/libpthsem/
+F:	package/linknx/
+F:	package/snowball-hdmiservice/
+F:	package/ux500-firmware/
+
+N:	Guillaume Gardet <guillaume.gardet@oliseo.fr>
+F:	package/c-icap/
+F:	package/c-icap-modules/
+F:	package/sdl2/
+
+N:	Guillaume William Brs <guillaume.bressaix@gmail.com>
+F:	package/liquid-dsp/
+
+N:	Gustavo Zacarias <gustavo@zacarias.com.ar>
+F:	arch/Config.in.powerpc
+F:	board/qemu/
+F:	configs/qemu_*
+F:	package/argp-standalone/
+F:	package/arptables/
+F:	package/audiofile/
+F:	package/autossh/
+F:	package/bitstream-vera/
+F:	package/blktrace/
+F:	package/bmon/
+F:	package/btrfs-progs/
+F:	package/c-ares/
+F:	package/cantarell/
+F:	package/check/
+F:	package/collectd/
+F:	package/comix-cursors/
+F:	package/connman-gtk/
+F:	package/conntrack-tools/
+F:	package/cppdb/
+F:	package/crda/
+F:	package/cryptodev-linux/
+F:	package/dbus-cpp/
+F:	package/debianutils/
+F:	package/dt/
+F:	package/exfat/
+F:	package/exfat-utils/
+F:	package/f2fs-tools/
+F:	package/faad2/
+F:	package/fping/
+F:	package/ftop/
+F:	package/gcr/
+F:	package/geoip/
+F:	package/gpsd/
+F:	package/granite/
+F:	package/graphite2/
+F:	package/gsettings-desktop-schemas/
+F:	package/hans/
+F:	package/haveged/
+F:	package/heimdal/
+F:	package/hostapd/
+F:	package/ifupdown/
+F:	package/inconsolata/
+F:	package/iodine/
+F:	package/iperf3/
+F:	package/ipset/
+F:	package/iw/
+F:	package/jhead/
+F:	package/jquery-keyboard/
+F:	package/kompexsqlite/
+F:	package/kvmtool/
+F:	package/lame/
+F:	package/lft/
+F:	package/libao/
+F:	package/libcroco/
+F:	package/libcue/
+F:	package/libcuefile/
+F:	package/libepoxy/
+F:	package/libgee/
+F:	package/libglib2/
+F:	package/libgtk2/
+F:	package/libgtk3/
+F:	package/libmcrypt/
+F:	package/libmemcached/
+F:	package/libmhash/
+F:	package/libmnl/
+F:	package/libmng/
+F:	package/libmpdclient/
+F:	package/libnetfilter_acct/
+F:	package/libnetfilter_conntrack/
+F:	package/libnetfilter_cthelper/
+F:	package/libnetfilter_cttimeout/
+F:	package/libnetfilter_log/
+F:	package/libnetfilter_queue/
+F:	package/libnfnetlink/
+F:	package/libnl/
+F:	package/liboping/
+F:	package/libreplaygain/
+F:	package/libsamplerate/
+F:	package/libtorrent/
+F:	package/libuv/
+F:	package/lksctp-tools/
+F:	package/lshw/
+F:	package/lz4/
+F:	package/lzip/
+F:	package/mbedtls/
+F:	package/mcrypt/
+F:	package/memcached/
+F:	package/minizip/
+F:	package/mpd/
+F:	package/mpv/
+F:	package/mtr/
+F:	package/musepack/
+F:	package/ncmpc/
+F:	package/net-tools/
+F:	package/netstat-nat/
+F:	package/nettle/
+F:	package/nfacct/
+F:	package/nftables/
+F:	package/nload/
+F:	package/nmap/
+F:	package/noip/
+F:	package/norm/
+F:	package/obsidian-cursors/
+F:	package/ocf-linux/
+F:	package/opencore-amr/
+F:	package/openswan/
+F:	package/opusfile/
+F:	package/p11-kit/
+F:	package/p910nd/
+F:	package/pax-utils/
+F:	package/procrank_linux/
+F:	package/php-*
+F:	package/pkgconf/
+F:	package/privoxy/
+F:	package/protobuf-c/
+F:	package/ptpd/
+F:	package/ptpd2/
+F:	package/pwgen/
+F:	package/ramspeed/
+F:	package/rng-tools/
+F:	package/rtorrent/
+F:	package/samba4/
+F:	package/sbc/
+F:	package/snmppp/
+F:	package/sox/
+F:	package/spidev_test/
+F:	package/squid/
+F:	package/start-stop-daemon/
+F:	package/swig/
+F:	package/thrift/
+F:	package/twolame/
+F:	package/ulogd/
+F:	package/unionfs/
+F:	package/unrar/
+F:	package/ushare/
+F:	package/vala/
+F:	package/vorbis-tools/
+F:	package/wavpack/
+F:	package/wayland-protocols/
+F:	package/webkitgtk/
+F:	package/webkitgtk24/
+F:	package/whois/
+F:	package/wireshark/
+F:	package/wpan-tools/
+F:	package/x11r7/xdriver_xf86-video-qxl/
+F:	package/xtables-addons/
+F:	package/zd1211-firmware/
+
+N:	Gwenhael Goavec-Merou <gwenhael.goavec-merou@trabucayre.com>
+F:	package/gnuradio/
+F:	package/gr-osmosdr/
+F:	package/libusbgx/
+F:	package/python-cheetah/
+F:	package/python-markdown/
+F:	package/python-pyqt/
+F:	package/python-sip/
+
+N:	Henrique Camargo <henrique@henriquecamargo.com>
+F:	package/json-glib/
+
+N:	Hiroshi Kawashima <kei-k@ca2.so-net.ne.jp>
+F:	package/gauche/
+F:	package/gmrender-resurrect/
+F:	package/squeezelite/
+
+N:	Ian Haylock <haylocki@yahoo.co.uk>
+F:	package/python-rpi-gpio/
+
+N:	Ignacy Gaw?dzki <ignacy.gawedzki@green-communications.fr>
+F:	package/angularjs/
+
+N:	James Knight <james.knight@rockwellcollins.com>
+F:	package/atkmm/
+F:	package/cairomm/
+F:	package/google-material-design-icons/
+F:	package/glibmm/
+F:	package/gtkmm3/
+F:	package/libpqxx/
+F:	package/pangomm/
+F:	package/yad/
+
+N:	Jan Pedersen <jp@jp-embedded.com>
+F:	package/zip/
+
+N:	Jan Viktorin <viktorin@rehivetech.com>
+F:	package/python-pexpect/
+F:	package/python-ptyprocess/
+F:	package/zynq-boot-bin/
+
+N:	Jarkko Sakkinen <jarkko.sakkinen@intel.com>
+F:	package/quota/
+
+N:	Jason Pruitt <jrspruitt@gmail.com>
+F:	package/librtlsdr/
+
+N:	Jens Rosenboom <j.rosenboom@x-ion.de>
+F:	package/sl/
+
+N:	Jens Zettelmeyer <zettelmeyerj@gmail.com>
+F:	package/batctl/
+
+N:	Jeremy Rosen <jeremy.rosen@openwide.fr>
+F:	package/fxload/
+
+N:	Joel Stanley <joel@jms.id.au>
+F:	package/pdbg/
+
+N:	Johan Derycke <johanderycke@gmail.com>
+F:	package/python-libconfig/
+
+N:	Johan Oudinet <johan.oudinet@gmail.com>
+F:	package/ejabberd/
+F:	package/erlang-goldrush/
+F:	package/erlang-lager/
+F:	package/erlang-p1-cache-tab/
+F:	package/erlang-p1-iconv/
+F:	package/erlang-p1-sip/
+F:	package/erlang-p1-stringprep/
+F:	package/erlang-p1-stun/
+F:	package/erlang-p1-tls/
+F:	package/erlang-p1-utils/
+F:	package/erlang-p1-xml/
+F:	package/erlang-p1-yaml/
+F:	package/erlang-p1-zlib/
+
+N:	John Stile <johns@msli.com>
+F:	package/dhcpcd/
+
+N:	Jonathan Ben Avraham <yba@tkos.co.il>
+F:	arch/Config.in.xtensa
+F:	package/autofs/
+F:	package/dawgdic/
+F:	package/libphidget/
+F:	package/phidgetwebservice/
+F:	package/rapidxml/
+F:	package/sphinxbase/
+
+N:	Jonathan Liu <net147@gmail.com>
+F:	package/python-meld3/
+F:	package/supervisor/
+
+N:	Joris Lijssens <joris.lijssens@gmail.com>
+F:	package/emlog/
+F:	package/libcoap/
+F:	package/libnet/
+F:	package/libuio/
+F:	package/netsniff-ng/
+F:	package/rabbitmq-c/
+
+N:	Juha Rantanen <juha@codercoded.com>
+F:	package/acsccid/
+
+N:	Julian Lunz <git@jlunz.de>
+F:	package/freerdp/
+
+N:	Julian Scheel <julian@jusst.de>
+F:	package/bitstream/
+F:	package/cbootimage/
+F:	package/cryptopp/
+F:	package/dvblast/
+F:	package/tegrarcm/
+
+N:	Julien Boibessot <julien.boibessot@armadeus.com>
+F:	board/armadeus/
+F:	configs/armadeus*
+F:	package/gpm/
+F:	package/lbreakout2/
+F:	package/libcddb/
+F:	package/libmodbus/
+F:	package/ltris/
+F:	package/opentyrian/
+F:	package/pygame/
+F:	package/smtools3/
+
+N:	Julien Corjon <corjon.j@ecagroup.com>
+F:	package/qt5/
+
+N:	Julien Floret <julien.floret@6wind.com>
+F:	package/lldpd/
+
+N:	Justin Maggard <jmaggard@netgear.com>
+F:	package/dtach/
+
+N:	J?r?me Oufella <jerome.oufella@savoirfairelinux.com>
+F:	package/libdri2/
+F:	package/qt-webkit-kiosk/
+
+N:	J?r?me Pouiller <jezz@sysmic.org>
+F:	package/apitrace/
+F:	package/freescale-imx/gpu-amd-bin-mx51/
+F:	package/freescale-imx/libz160/
+F:	package/lxc/
+F:	package/strongswan/
+F:	package/wmctrl/
+F:	package/x11r7/xdriver_xf86-video-imx/
+F:	package/x11r7/xdriver_xf86-video-imx-viv/
+
+N:	J?rg Krause <joerg.krause@embedded.rocks>
+F:	package/libshout/
+F:	package/libupnpp/
+F:	package/luv/
+F:	package/luvi/
+F:	package/mp4v2/
+F:	package/shairport-sync/
+F:	package/swupdate/
+F:	package/upmpdcli/
+F:	package/wavemon/
+
+N:	Karoly Kasza <kaszak@gmail.com>
+F:	package/irqbalance/
+F:	package/openvmtools/
+
+N:	Kelvin Cheung <keguang.zhang@gmail.com>
+F:	package/cpuload/
+F:	package/bwm-ng/
+F:	package/ramsmp/
+
+N:	Laurent Cans <laurent.cans@gmail.com>
+F:	package/aircrack-ng/
+
+N:	Lee Jones <lee.jones@linaro.org>
+F:	boot/afboot-stm32/
+
+N:	Lionel Orry <lionel.orry@gmail.com>
+F:	package/mongrel2/
+
+N:	Lothar Felten <lothar.felten@gmail.com>
+F:	package/ti-sgx-demos/
+F:	package/ti-sgx-km/
+F:	package/ti-sgx-um/
+
+N:	Luca Ceresoli <luca@lucaceresoli.net>
+F:	package/agentpp/
+F:	package/exim/
+F:	package/libpjsip/
+F:	package/qpid-proton/
+F:	package/rtl8188eu/
+F:	package/stm32flash/
+F:	package/unzip/
+F:	support/legal-info/
+
+N:	Lucas De Marchi <lucas.de.marchi@gmail.com>
+F:	package/fswebcam/
+
+N:	Ludovic Desroches <ludovic.desroches@atmel.com>
+F:	board/atmel/
+F:	configs/at91*
+F:	configs/atmel_*
+F:	package/fb-test-app/
+F:	package/python-json-schema-validator/
+F:	package/python-keyring/
+F:	package/python-simplejson/
+F:	package/python-versiontools/
+F:	package/wilc1000-firmware/
+
+N:	Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
+F:	package/nvme/
+
+N:	Manuel V?gele <develop@manuel-voegele.de>
+F:	package/python-requests-toolbelt/
+
+N:	Marcin Bis <marcin@bis.org.pl>
+F:	package/bluez5_utils/
+F:	package/cc-tool/
+F:	package/ecryptfs-utils/
+
+N:	Marcin Niestroj <m.niestroj@grinn-global.com>
+F:	package/argparse/
+F:	package/rs485conf/
+F:	package/turbolua/
+
+N:	Marek Belisko <marek.belisko@open-nandra.com>
+F:	package/libatasmart/
+F:	package/polkit/
+F:	package/sg3_utils/
+F:	package/udisks/
+
+N:	Markos Chandras <markos.chandras@imgtec.com>
+F:	package/harfbuzz/
+F:	package/libsecret/
+
+N:	Martin Bark <martin@barkynet.com>
+F:	package/ca-certificates/
+
+N:	Martin Hicks <mort@bork.org>
+F:	package/cryptsetup/
+
+N:	Matt Weber <matthew.weber@rockwellcollins.com>
+F:	package/bc/
+F:	package/eigen/
+F:	package/fmc/
+F:	package/fmlib/
+F:	package/igmpproxy/
+F:	package/iputils/
+F:	package/omniorb/
+F:	package/python-ipy/
+F:	package/python-posix-ipc/
+F:	package/python-pypcap/
+F:	package/python-pyrex/
+F:	package/raptor/
+F:	package/setools/
+F:	package/simicsfs/
+F:	package/smcroute/
+F:	package/tclap/
+
+N:	Mauro Condarelli <mc5686@mclink.it>
+F:	package/mc/
+F:	package/python-autobahn/
+F:	package/python-cbor/
+F:	package/python-characteristic/
+F:	package/python-click/
+F:	package/python-crossbar/
+F:	package/python-lmdb/
+F:	package/python-mistune/
+F:	package/python-netaddr/
+F:	package/python-pyasn-modules/
+F:	package/python-pygments/
+F:	package/python-pynacl/
+F:	package/python-pytrie/
+F:	package/python-service-identity/
+F:	package/python-setproctitle/
+F:	package/python-shutilwhich/
+F:	package/python-treq/
+F:	package/python-txaio/
+F:	package/python-ujson/
+F:	package/python-wsaccel/
+
+N:	Max Filippov <jcmvbkbc@gmail.com>
+F:	arch/Config.in.xtensa
+
+N:	Maxime Hadjinlian <maxime.hadjinlian@gmail.com>
+F:	package/babeld/
+F:	package/dante/
+F:	package/faifa/
+F:	package/initscripts/
+F:	package/intel-microcode/
+F:	package/iucode-tool/
+F:	package/jasper/
+F:	package/kodi/
+F:	package/libass/
+F:	package/libbluray/
+F:	package/libcdio/
+F:	package/libcofi/
+F:	package/libenca/
+F:	package/libmodplug/
+F:	package/libnfs/
+F:	package/libplist/
+F:	package/libshairplay/
+F:	package/linux-zigbee/
+F:	package/netcat-openbsd/
+F:	package/open-plc-utils/
+F:	package/rpi-firmware/
+F:	package/rpi-userland/
+F:	package/rtmpdump/
+F:	package/skeleton/
+F:	package/systemd/
+F:	package/systemd-bootchart/
+F:	package/tinyalsa/
+F:	package/tinyxml/
+
+N:	Maxime Ripard <maxime.ripard@free-electrons.com>
+F:	package/kmsxx/
+
+N:	Michael Rommel <rommel@layer-7.net>
+F:	package/aiccu/
+F:	package/knock/
+F:	package/python-crc16/
+F:	package/python-pyzmq/
+
+N:	Michael Trimarchi <michael@amarulasolutions.com>
+F:	package/python-spidev/
+
+N:	Mikhail Boiko <mikhailboiko85@gmail.com>
+F:	package/libfribidi/
+
+N:	Morgan Delestre <m.delestre@sinters.fr>
+F:	package/monkey/
+
+N:	Murat Demirten <mdemirten@yh.com.tr>
+F:	package/jpeg-turbo/
+F:	package/libgeotiff/
+
+N:	Nathan Lynch <ntl@pobox.com>
+F:	package/chrony/
+
+N:	Nathaniel Roach <nroach44@gmail.com>
+F:	package/bandwidthd/
+F:	package/libgudev/
+
+N:	Naumann Andreas <ANaumann@ultratronik.de>
+F:	package/evemu/
+F:	package/libevdev/
+
+N:	Nicolas Serafini <nicolas.serafini@sensefly.com>
+F:	package/exiv2/
+F:	package/nvidia-tegra23/nvidia-tegra23-binaries/
+F:	package/nvidia-tegra23/nvidia-tegra23-codecs/
+
+N:	Nimai Mahajan <nimaim@gmail.com>
+F:	package/libucl/
+
+N:	Niranjan Reddy <niranjan.reddy@rockwellcollins.com>
+F:	package/cgroupfs-mount/
+
+N:	No? Rubinstein <noe.rubinstein@gmail.com>
+F:	package/tpm-tools/
+F:	package/trousers/
+
+N:	Olaf Rempel <razzor@kopf-tisch.de>
+F:	package/ctorrent/
+
+N:	Oli Vogt <oli.vogt.pub01@gmail.com>
+F:	package/python-django/
+F:	package/python-flup/
+
+N:	Olivier Schonken <olivier.schonken@gmail.com>
+F:	package/ijs/
+F:	package/poppler/
+F:	package/qpdf/
+F:	package/openjpeg/
+
+N:	Olivier Singla <olivier.singla@gmail.com>
+F:	package/shellinabox/
+
+N:	Parnell Springmeyer <parnell@digitalmentat.com>
+F:	package/scrypt/
+
+N:	Pascal Huerst <pascal.huerst@gmail.com>
+F:	package/google-breakpad/
+
+N:	Patrick Gerber <kpa_info@yahoo.fr>
+F:	package/yavta/
+
+N:	Patrick Ziegler <patrick.ziegler@fh-kl.de>
+F:	package/aespipe/
+F:	package/libqmi/
+
+N:	Paul Cercueil <paul.cercueil@analog.com>
+F:	package/libiio/
+
+N:	Paul Cercueil <paul@crapouillou.net>
+F:	package/lightning/
+
+N:	Pedro Aguilar <paguilar@paguilar.org>
+F:	package/libunistring/
+
+N:	Peter Korsgaard <peter@korsgaard.com>
+F:	package/flickcurl/
+F:	package/libfastjson/
+F:	package/lzop/
+F:	package/python-alsaaudio/
+F:	package/python-enum/
+F:	package/python-enum34/
+F:	package/python-ipaddr/
+F:	package/python-pam/
+F:	package/python-psutil/
+F:	package/triggerhappy/
+F:	package/wpa_supplicant/
+
+N:	Peter Seiderer <ps.report@gmx.net>
+F:	package/assimp/
+F:	package/bcm2835/
+F:	package/dejavu/
+F:	package/dillo/
+F:	package/edid-decode/
+F:	package/ghostscript-fonts/
+F:	package/gstreamer1/gst1-validate/
+F:	package/log4cplus/
+F:	package/postgresql/
+F:	package/qt5/qt53d/
+F:	package/qt5/qt5quickcontrols2/
+F:	package/qt5/qt5tools/
+F:	package/racehound/
+F:	package/wiringpi/
+
+N:	Peter Thompson <peter.macleod.thompson@gmail.com>
+F:	package/sdl2_gfx/
+F:	package/sdl2_image/
+F:	package/sdl2_ttf/
+
+N:	Petr Vorel <petr.vorel@gmail.com>
+F:	package/linux-backports/
+
+N:	Phil Eichinger <phil.eichinger@gmail.com>
+F:	package/libqrencode/
+F:	package/psplash/
+F:	package/sispmctl/
+F:	package/zsh/
+
+N:	Philipp Claves <claves@budelmann-elektronik.com>
+F:	package/libassuan/
+F:	package/libgpgme/
+
+N:	Philippe Proulx <eeppeliteloop@gmail.com>
+F:	package/python-ipython/
+
+N:	Pierre Floury <pierre.floury@gmail.com>
+F:	package/trace-cmd/
+
+N:	Pieter De Gendt <pieter.degendt@gmail.com>
+F:	package/libvips/
+
+N:	Pieterjan Camerlynck <pieterjan.camerlynck@gmail.com>
+F:	package/libdvbpsi/
+F:	package/mraa/
+
+N:	Qais Yousef <Qais.Yousef@imgtec.com>
+F:	package/bellagio/
+
+N:	Rahul Bedarkar <rahul.bedarkar@imgtec.com>
+F:	package/cxxtest/
+F:	package/gflags/
+F:	package/glog/
+F:	package/gssdp/
+F:	package/gupnp/
+F:	package/gupnp-av/
+
+N:	Renaud Aubin <root@renaud.io>
+F:	package/libhttpparser/
+
+N:	Rhys Williams <github@wilberforce.co.nz>
+F:	package/lirc-tools/
+
+N:	Richard Braun <rbraun@>
+F:	package/curlftpfs/
+
+N:	Richard Braun <rbraun@sceen.net>
+F:	package/tzdata/
+
+N:	Rico Bachmann <bachmann@tofwerk.com>
+F:	package/apr-util/
+F:	package/subversion/
+
+N:	Rodrigo Rebello <rprebello@gmail.com>
+F:	package/chocolate-doom/
+F:	package/irssi/
+F:	package/vnstat/
+
+N:	Romain Naour <romain.naour@gmail.com>
+F:	package/bullet/
+F:	package/efl/
+F:	package/elementary/
+F:	package/enlightenment/
+F:	package/expedite/
+F:	package/iqvlinux/
+F:	package/libevas-generic-loaders/
+F:	package/liblinear/
+F:	package/mcelog/
+F:	package/openpowerlink/
+F:	package/stress-ng/
+F:	package/terminology/
+F:	package/xenomai/
+
+N:	Ryan Barnett <ryan.barnett@rockwellcollins.com>
+F:	package/atftp/
+F:	package/miraclecast/
+F:	package/python-pyasn/
+F:	package/python-pycrypto/
+F:	package/python-pysnmp/
+F:	package/python-pysnmp-apps/
+F:	package/python-pysnmp-mibs/
+F:	package/python-tornado/
+
+N:	Ryan Wilkins <ryan@deadfrog.net>
+F:	package/biosdevname/
+
+N:	R?mi R?rolle <remi.rerolle@gmail.com>
+F:	package/libfreeimage/
+
+N:	Sagaert Johan <sagaert.johan@skynet.be>
+F:	package/git/
+F:	package/gsl/
+F:	package/jquery-mobile/
+F:	package/libgsasl/
+F:	package/qdecoder/
+F:	package/qlibc/
+
+N:	Sam Bobroff <sam.bobroff@au1.ibm.com>
+F:	package/librtas/
+
+N:	Samuel Martin <s.martin49@gmail.com>
+F:	package/armadillo/
+F:	package/canfestival/
+F:	package/clapack/
+F:	package/cwiid/
+F:	package/flite/
+F:	package/nginx/
+F:	package/openobex/
+F:	package/python-numpy/
+F:	package/scrub/
+F:	package/urg/
+F:	package/ussp-push/
+
+N:	Santosh Multhalli <santosh.multhalli@rockwellcollins.com>
+F:	package/valijson/
+
+N:	Scott Fan <fancp2007@gmail.com>
+F:	package/libssh/
+F:	package/x11r7/xdriver_xf86-video-fbturbo/
+
+N:	Sebastien Bourdelin <sebastien.bourdelin@savoirfairelinux.com>
+F:	package/atf/
+F:	package/cppunit/
+F:	package/kyua/
+F:	package/lutok/
+F:	package/yaml-cpp/
+
+N:	Sergio Prado <sergio.prado@e-labworks.com>
+F:	package/libgdiplus/
+F:	package/mongodb/
+F:	package/stella/
+F:	package/tunctl/
+F:	package/ubus/
+
+N:	Simon Dawson <spdawson@gmail.com>
+F:	boot/at91bootstrap3/
+F:	package/cppzmq/
+F:	package/czmq/
+F:	package/filemq/
+F:	package/googlefontdirectory/
+F:	package/jansson/
+F:	package/jquery-ui/
+F:	package/jquery-ui-themes/
+F:	package/json-javascript/
+F:	package/lcdapi/
+F:	package/libfreefare/
+F:	package/libjson/
+F:	package/libnfc/
+F:	package/libnfc/
+F:	package/libserial/
+F:	package/libsigsegv/
+F:	package/macchanger/
+F:	package/minicom/
+F:	package/minidlna/
+F:	package/msgpack/
+F:	package/nanocom/
+F:	package/neard/
+F:	package/neardal/
+F:	package/owl-linux/
+F:	package/python-nfc/
+F:	package/rapidjson/
+F:	package/sconeserver/
+F:	package/sound-theme-borealis/
+F:	package/sound-theme-freedesktop/
+F:	package/vlc/
+F:	package/wvdial/
+F:	package/wvstreams/
+F:	package/xscreensaver/
+F:	package/zmqpp/
+F:	package/zyre/
+
+N:	Spenser Gilliland <spenser@gillilanding.com>
+F:	arch/Config.in.microblaze
+F:	package/a10disp/
+F:	package/glmark2/
+F:	package/libvpx/
+F:	package/mesa3d-demos/
+F:	package/sunxi-mali/
+F:	package/ti-gfx/
+
+N:	Stefan Fr?berg <stefan.froberg@petroprogram.com>
+F:	package/elfutils/
+F:	package/libtasn1/
+F:	package/proxychains-ng/
+F:	package/yasm/
+
+N:	Stephan Hoffmann <sho@relinux.de>
+F:	package/cache-calibrator/
+F:	package/gtest/
+F:	package/mtdev/
+F:	package/mtdev2tuio/
+F:	package/qtuio/
+
+N:	Steve Calfee <stevecalfee@gmail.com>
+F:	package/python-pymysql/
+F:	package/python-pyratemp/
+
+N:	Steve James <ste@junkomatic.net>
+F:	package/leveldb/
+F:	package/libcli/
+
+N:	Steve Kenton <skenton@ou.edu>
+F:	package/dvdauthor/
+F:	package/dvdrw-tools/
+F:	package/memtest86/
+F:	package/mjpegtools/
+F:	package/tovid/
+F:	package/xorriso/
+
+N:	Steve Thomas <scjthm@live.com>
+F:	package/cloog/
+F:	package/isl/
+
+N:	Steven Noonan <steven@uplinklabs.net>
+F:	package/hwloc/
+F:	package/powertop/
+
+N:	Sven Neumann <neumann@teufel.de>
+F:	package/gstreamer1/gst1-libav/
+
+N:	Sven Neumann <s.neumann@raumfeld.com>
+F:	package/glib-networking/
+F:	package/libmms/
+F:	package/orc/
+
+N:	S?bastien Szymanski <sebastien.szymanski@armadeus.com>
+F:	package/mmc-utils/
+F:	package/python-flask-jsonrpc/
+F:	package/python-flask-login/
+
+N:	Thierry Bultel <tbultel@free.fr>
+F:	package/mpd-mpc/
+
+N:	Thijs Vermeir <thijsvermeir@gmail.com>
+F:	package/ranger/
+F:	package/x265/
+
+N:	Thomas Claveirole <thomas.claveirole@green-communications.fr>
+F:	package/fcgiwrap/
+
+N:	Thomas Davis <sunsetbrew@sunsetbrew.com>
+F:	package/civetweb/
+
+N:	Thomas De Schampheleire <patrickdepinguin+buildroot@gmail.com>
+F:	package/libpfm4/
+F:	package/mkpasswd/
+F:	package/zeromq/
+
+N:	Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+F:	arch/Config.in.arm
+F:	boot/boot-wrapper-aarch64/
+F:	boot/grub2/
+F:	boot/gummiboot/
+F:	package/android-tools/
+F:	package/b43-firmware/
+F:	package/b43-fwcutter/
+F:	package/c-periphery/
+F:	package/cdrkit/
+F:	package/cifs-utils/
+F:	package/cloop/
+F:	package/cmake/
+F:	package/cramfs/
+F:	package/dmidecode/
+F:	package/flashrom/
+F:	package/gcc/gcc-final/
+F:	package/gcc/gcc-initial/
+F:	package/genext2fs/
+F:	package/genromfs/
+F:	package/getent/
+F:	package/gnu-efi/
+F:	package/heirloom-mailx/
+F:	package/hiawatha/
+F:	package/igh-ethercat/
+F:	package/intltool/
+F:	package/libcap/
+F:	package/libffi/
+F:	package/libsha1/
+F:	package/libtirpc/
+F:	package/liburcu/
+F:	package/libxkbcommon/
+F:	package/libxml-parser-perl/
+F:	package/localedef/
+F:	package/log4cxx/
+F:	package/lttng-babeltrace/
+F:	package/lttng-libust/
+F:	package/lttng-modules/
+F:	package/lttng-tools/
+F:	package/monit/
+F:	package/mpdecimal/
+F:	package/msmtp/
+F:	package/musl/
+F:	package/ne10/
+F:	package/pkg-python.mk
+F:	package/pkg-autotools.mk
+F:	package/pkg-generic.mk
+F:	package/polarssl/
+F:	package/python/
+F:	package/python3/
+F:	package/python-mad/
+F:	package/python-serial/
+F:	package/qextserialport/
+F:	package/rpcbind/
+F:	package/rt-tests/
+F:	package/sam-ba/
+F:	package/scons/
+F:	package/squashfs/
+F:	package/wayland/
+F:	package/weston/
+F:	toolchain/
+
+N:	Tiago Brusamarello <tiago.brusamarello@datacom.ind.br>
+F:	package/aer-inject/
+
+N:	Tom Sparks <tom_a_sparks@yahoo.com.au>
+F:	package/ibrcommon/
+F:	package/ibrdtn/
+F:	package/ibrdtn-tools/
+F:	package/ibrdtnd/
+
+N:	Tzu-Jung Lee <roylee17@gmail.com>
+F:	package/dropwatch/
+F:	package/tstools/
+
+N:	Vanya Sergeev <vsergeev@gmail.com>
+F:	package/lua-periphery/
+
+N:	Vicente Olivert Riera <Vincent.Riera@imgtec.com>
+F:	arch/Config.in.mips
+F:	package/gnupg2/
+F:	package/hidapi/
+F:	package/libfm/
+F:	package/libfm-extra/
+F:	package/libksba/
+F:	package/menu-cache/
+F:	package/openblas/
+F:	package/openmpi/
+F:	package/pinentry/
+F:	package/trinity/
+
+N:	Vincent Stehl? <vincent.stehle@intel.com>
+F:	package/i7z/
+F:	package/msr-tools/
+
+N:	Vinicius Tinti <viniciustinti@gmail.com>
+F:	package/python-thrift/
+
+N:	Volkov Viacheslav <sv99@inbox.ru>
+F:	package/rfkill/
+F:	package/v4l2grab/
+F:	package/zbar/
+
+N:	Wade Berrier <wberrier@gmail.com>
+F:	package/ngrep/
+
+N:	Waldemar Brodkorb <wbx@openadk.org>
+F:	arch/Config.in.bfin
+F:	arch/Config.in.sparc
+F:	arch/Config.in.m68k
+
+N:	Waldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>
+F:	package/ccid/
+F:	package/pcsc-lite/
+
+N:	Will Newton <will.newton@gmail.com>
+F:	package/enchant/
+F:	package/erlang/
+F:	package/libmicrohttpd/
+F:	package/sysprof/
+F:	package/time/
+
+N:	Will Newton <will.newton@imgtec.com>
+F:	package/numactl/
+
+N:	Will Wagner <will_wagner@carallon.com>
+F:	package/yaffs2utils/
+
+N:	Wojciech M. Zabolotny <wzab01@gmail.com>
+F:	package/avrdude/
+F:	package/jack2/
+F:	package/python-msgpack/
+F:	package/python-pyusb/
+
+N:	Wojciech Nizi?ski <niziak@spox.org>
+F:	package/fwup/
+
+N:	Yann E. MORIN <yann.morin.1998@free.fr>
+F:	package/cegui06/
+F:	package/celt051/
+F:	package/dtc/
+F:	package/dtv-scan-tables/
+F:	package/dvb-apps/
+F:	package/keyutils/
+F:	package/libbsd/
+F:	package/libedit/
+F:	package/libinput/
+F:	package/libiscsi/
+F:	package/libseccomp/
+F:	package/mesa3d-headers/
+F:	package/mke2img/
+F:	package/nut/
+F:	package/omxplayer/
+F:	package/python-pyparsing/
+F:	package/pkg-download.mk
+F:	package/slirp/
+F:	package/snappy/
+F:	package/spice/
+F:	package/spice-protocol/
+F:	package/tmux/
+F:	package/tvheadend/
+F:	package/usbredir/
+F:	package/vde2/
+F:	package/w_scan/
+F:	support/download/
+
+N:	Yegor Yefremov <yegorslists@googlemail.com>
+F:	package/acl/
+F:	package/attr/
+F:	package/bluez_utils/
+F:	package/boost/
+F:	package/bootstrap/
+F:	package/cannelloni/
+F:	package/circus/
+F:	package/feh/
+F:	package/giblib/
+F:	package/imlib2/
+F:	package/jquery-datetimepicker/
+F:	package/jquery-sidebar/
+F:	package/kmod/
+F:	package/libical/
+F:	package/libmbim/
+F:	package/libndp/
+F:	package/libnftnl/
+F:	package/libsoc/
+F:	package/libsocketcan/
+F:	package/libubox/
+F:	package/libuci/
+F:	package/linux-firmware/
+F:	package/modem-manager/
+F:	package/nuttcp/
+F:	package/parted/
+F:	package/python*
+F:	package/socketcand/
+F:	package/qt5/qt5serialbus/
+F:	package/sdparm/
+F:	package/ti-utils/
+F:	package/x11r7/xapp_xconsole/
+F:	package/x11r7/xapp_xinput-calibrator/
+F:	package/zlog/
+F:	support/scripts/scanpypi
+
+N:	Zoltan Gyarmati <mr.zoltan.gyarmati@gmail.com>
+F:	package/crudini/
+F:	package/grantlee/
+F:	package/python-configobj/
+F:	package/python-iniparse/
+F:	package/qjson/
+F:	package/quazip/
+F:	package/tinc/
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 3/4] docs/manual: update contribute.txt to cover get-developers
  2016-09-12 20:54 [Buildroot] [PATCH v3 0/4] Add a get-developers script and database Thomas Petazzoni
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script Thomas Petazzoni
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 2/4] DEVELOPERS: add initial list of Buildroot developers Thomas Petazzoni
@ 2016-09-12 20:54 ` Thomas Petazzoni
  2016-09-12 21:09   ` Yann E. MORIN
  2016-09-21  7:07   ` Peter Korsgaard
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 4/4] docs/manual: add new section about the DEVELOPERS file and get-developer Thomas Petazzoni
  2016-09-12 21:14 ` [Buildroot] [PATCH v3 0/4] Add a get-developers script and database Yann E. MORIN
  4 siblings, 2 replies; 17+ messages in thread
From: Thomas Petazzoni @ 2016-09-12 20:54 UTC (permalink / raw)
  To: buildroot

This commit updates the contribute.txt part of the manual to tell
people to use get-developers to get the appropriate "git send-email"
command when sending patches.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 docs/manual/contribute.txt | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/docs/manual/contribute.txt b/docs/manual/contribute.txt
index 1b1f4de..2973ef7 100644
--- a/docs/manual/contribute.txt
+++ b/docs/manual/contribute.txt
@@ -283,10 +283,18 @@ automatically adding the +Signed-off-by+ line.
 Once patch files are generated, you can review/edit the commit message
 before submitting them, using your favorite text editor.
 
-Lastly, send/submit your patch set to the Buildroot mailing list:
+Buildroot provides a handy tool to know to whom your patches should be
+sent, called +get-developers+. This tool reads your patches and
+outputs the appropriate +git send-email+ command to use:
 
 ---------------------
-$ git send-email --to buildroot at buildroot.org outgoing/*
+$ ./support/scripts/get-developers outgoing/*
+---------------------
+
+Use the output of +get-developers+ to send your patches:
+
+---------------------
+$ git send-email --to buildroot at buildroot.org --to bob --to alice outgoing/*
 ---------------------
 
 Note that +git+ should be configured to use your mail account.
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 4/4] docs/manual: add new section about the DEVELOPERS file and get-developer
  2016-09-12 20:54 [Buildroot] [PATCH v3 0/4] Add a get-developers script and database Thomas Petazzoni
                   ` (2 preceding siblings ...)
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 3/4] docs/manual: update contribute.txt to cover get-developers Thomas Petazzoni
@ 2016-09-12 20:54 ` Thomas Petazzoni
  2016-09-15 20:35   ` Arnout Vandecappelle
  2016-09-21  7:17   ` Peter Korsgaard
  2016-09-12 21:14 ` [Buildroot] [PATCH v3 0/4] Add a get-developers script and database Yann E. MORIN
  4 siblings, 2 replies; 17+ messages in thread
From: Thomas Petazzoni @ 2016-09-12 20:54 UTC (permalink / raw)
  To: buildroot

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 docs/manual/contribute.txt |  6 ++++++
 docs/manual/developers.txt | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 docs/manual/manual.txt     |  2 ++
 3 files changed, 54 insertions(+)
 create mode 100644 docs/manual/developers.txt

diff --git a/docs/manual/contribute.txt b/docs/manual/contribute.txt
index 2973ef7..a8f9db7 100644
--- a/docs/manual/contribute.txt
+++ b/docs/manual/contribute.txt
@@ -258,6 +258,12 @@ removed, preferably with the upstream commit ID. Also any other
 required changes should be explained explicitly, like configure
 options that no longer exist or are no longer needed.
 
+If you are interested in getting notified of build failures and of
+further changes in the packages you added or modified, please add
+yourself to the DEVELOPERS file. This should be done in a separate
+patch of the series. See xref:DEVELOPERS[the DEVELOPERS file] for more
+information.
+
 ==== Preparing a patch series
 
 Starting from the changes committed in your local git view, _rebase_
diff --git a/docs/manual/developers.txt b/docs/manual/developers.txt
new file mode 100644
index 0000000..2fbbff3
--- /dev/null
+++ b/docs/manual/developers.txt
@@ -0,0 +1,46 @@
+// -*- mode:doc; -*-
+// vim: set syntax=asciidoc:
+
+[[DEVELOPERS]]
+== DEVELOPERS file and get-developers
+
+The main Buildroot directory contains a file named +DEVELOPERS+ that
+list the developers in charge of various areas of Buildroot. Thanks to
+this file, the +get-developer+ tool allows to:
+
+- Calculate the list of developers to whom patches should be sent, by
+  parsing the patches and matching the modified files with the
+  relevant developers. See xref:submitting-patches[] for details.
+
+- Find which developers are in charge of a given architecture or
+  package, so that they can be notified when a build failure occurs on
+  this architecture or package. This is done in interaction with
+  Buildroot's autobuild infrastructure.
+
+We ask developers adding new packages, new boards, or generally new
+functionality in Buildroot, to register themselves in the +DEVELOPERS+
+file. As an example, we expect a developer contributing a new package
+to include in his patch the appropriate modification to the
++DEVELOPERS+ file.
+
+The +DEVELOPERS+ file format is documented in detail inside the file
+itself.
+
+The +get-developer+ tool, located in +support/scripts+ allows to use
+the +DEVELOPERS+ file for various tasks:
+
+- When passing one or several patches as command line argument,
+  +get-developer+ will return the appropriate +git send-email+
+  command.
+
+- When using the +-a <arch>+ command line option, +get-developer+ will
+  return the list of developers in charge of the given architecture.
+
+- When using the +-p <package>+ command line option, +get-developer+
+  will return the list of developers in charge of the given package.
+
+- When using the +-c+ command line option, +get-developer+ will look
+  at all files under version control in the Buildroot repository, and
+  list the ones that are not handled by any developer. The purpose of
+  this option is to help completing the +DEVELOPERS+ file.
+
diff --git a/docs/manual/manual.txt b/docs/manual/manual.txt
index 3c531e3..7630ea6 100644
--- a/docs/manual/manual.txt
+++ b/docs/manual/manual.txt
@@ -64,6 +64,8 @@ include::debugging-buildroot.txt[]
 
 include::contribute.txt[]
 
+include::developers.txt[]
+
 = Appendix
 
 include::appendix.txt[]
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 3/4] docs/manual: update contribute.txt to cover get-developers
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 3/4] docs/manual: update contribute.txt to cover get-developers Thomas Petazzoni
@ 2016-09-12 21:09   ` Yann E. MORIN
  2016-09-15 20:29     ` Arnout Vandecappelle
  2016-09-21  7:07   ` Peter Korsgaard
  1 sibling, 1 reply; 17+ messages in thread
From: Yann E. MORIN @ 2016-09-12 21:09 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2016-09-12 22:54 +0200, Thomas Petazzoni spake thusly:
> This commit updates the contribute.txt part of the manual to tell
> people to use get-developers to get the appropriate "git send-email"
> command when sending patches.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>  docs/manual/contribute.txt | 12 ++++++++++--
>  1 file changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/docs/manual/contribute.txt b/docs/manual/contribute.txt
> index 1b1f4de..2973ef7 100644
> --- a/docs/manual/contribute.txt
> +++ b/docs/manual/contribute.txt
> @@ -283,10 +283,18 @@ automatically adding the +Signed-off-by+ line.
>  Once patch files are generated, you can review/edit the commit message
>  before submitting them, using your favorite text editor.
>  
> -Lastly, send/submit your patch set to the Buildroot mailing list:
> +Buildroot provides a handy tool to know to whom your patches should be
> +sent, called +get-developers+. This tool reads your patches and
> +outputs the appropriate +git send-email+ command to use:
>  
>  ---------------------
> -$ git send-email --to buildroot at buildroot.org outgoing/*
> +$ ./support/scripts/get-developers outgoing/*
> +---------------------
> +
> +Use the output of +get-developers+ to send your patches:
> +
> +---------------------
> +$ git send-email --to buildroot at buildroot.org --to bob --to alice outgoing/*

Minor tweak: I'd prefer we use carbon-copy:   --cc alice --cc bob

Regards,
Yann E. MORIN.

>  ---------------------
>  
>  Note that +git+ should be configured to use your mail account.
> -- 
> 2.7.4
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 0/4] Add a get-developers script and database
  2016-09-12 20:54 [Buildroot] [PATCH v3 0/4] Add a get-developers script and database Thomas Petazzoni
                   ` (3 preceding siblings ...)
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 4/4] docs/manual: add new section about the DEVELOPERS file and get-developer Thomas Petazzoni
@ 2016-09-12 21:14 ` Yann E. MORIN
  2016-09-12 21:30   ` Thomas Petazzoni
  4 siblings, 1 reply; 17+ messages in thread
From: Yann E. MORIN @ 2016-09-12 21:14 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2016-09-12 22:54 +0200, Thomas Petazzoni spake thusly:
> This is the third version of the patch series adding a get-developers
> script and the corresponding DEVELOPERS database.

All I want to say is, just commit that already! ;-)

Seriously, this thing is working: we've been receiving notifications for
some time now.

It will not be easy for you to maintain the developpers file locally, so
if we want people to register as developpers, we need to have that in
the tree.

Any remaining nit can be fixed afterward.

Regards,
Yann E. MORIN.

> Since v2, the DEVELOPERS database has seen numerous updates, following
> the feedback from several Buildroot developers.
> 
> Thanks,
> 
> Thomas
> 
> Thomas Petazzoni (4):
>   support/scripts/get-developers: add new script
>   DEVELOPERS: add initial list of Buildroot developers
>   docs/manual: update contribute.txt to cover get-developers
>   docs/manual: add new section about the DEVELOPERS file and
>     get-developer
> 
>  DEVELOPERS                         | 1581 ++++++++++++++++++++++++++++++++++++
>  docs/manual/contribute.txt         |   18 +-
>  docs/manual/developers.txt         |   46 ++
>  docs/manual/manual.txt             |    2 +
>  support/scripts/get-developers     |   83 ++
>  support/scripts/getdeveloperlib.py |  201 +++++
>  6 files changed, 1929 insertions(+), 2 deletions(-)
>  create mode 100644 DEVELOPERS
>  create mode 100644 docs/manual/developers.txt
>  create mode 100755 support/scripts/get-developers
>  create mode 100644 support/scripts/getdeveloperlib.py
> 
> -- 
> 2.7.4
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 0/4] Add a get-developers script and database
  2016-09-12 21:14 ` [Buildroot] [PATCH v3 0/4] Add a get-developers script and database Yann E. MORIN
@ 2016-09-12 21:30   ` Thomas Petazzoni
  0 siblings, 0 replies; 17+ messages in thread
From: Thomas Petazzoni @ 2016-09-12 21:30 UTC (permalink / raw)
  To: buildroot

Hello,

On Mon, 12 Sep 2016 23:14:50 +0200, Yann E. MORIN wrote:

> On 2016-09-12 22:54 +0200, Thomas Petazzoni spake thusly:
> > This is the third version of the patch series adding a get-developers
> > script and the corresponding DEVELOPERS database.  
> 
> All I want to say is, just commit that already! ;-)
> 
> Seriously, this thing is working: we've been receiving notifications for
> some time now.
> 
> It will not be easy for you to maintain the developpers file locally, so
> if we want people to register as developpers, we need to have that in
> the tree.

Exactly my current issue: we're adding new packages, but since the
DEVELOPERS file is not in the tree, it doesn't get updated accordingly.

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script Thomas Petazzoni
@ 2016-09-15 20:28   ` Arnout Vandecappelle
  2016-09-21  7:03   ` Peter Korsgaard
  1 sibling, 0 replies; 17+ messages in thread
From: Arnout Vandecappelle @ 2016-09-15 20:28 UTC (permalink / raw)
  To: buildroot



On 12-09-16 22:54, Thomas Petazzoni wrote:
> This script, and its companion library, is more-or-less Buildroot's
> equivalent to the kernel get_maintainer.pl script: it allows to get the
> list of developers to whom a set of patches should be sent to.
[snip]
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

 I think this script is good enough to go in, so I'm going to give it my

Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>

However, I have a few suggestions on how to make it more pythonic.

> ---
>  support/scripts/get-developers     |  83 +++++++++++++++
>  support/scripts/getdeveloperlib.py | 201 +++++++++++++++++++++++++++++++++++++
>  2 files changed, 284 insertions(+)
>  create mode 100755 support/scripts/get-developers
>  create mode 100644 support/scripts/getdeveloperlib.py
> 
> diff --git a/support/scripts/get-developers b/support/scripts/get-developers
> new file mode 100755
> index 0000000..f73512f
> --- /dev/null
> +++ b/support/scripts/get-developers
> @@ -0,0 +1,83 @@
> +#!/usr/bin/env python
> +
> +import argparse
> +import getdeveloperlib
> +
> +def parse_args():
> +    parser = argparse.ArgumentParser()
> +    parser.add_argument('patches', metavar='P', type=str, nargs='*',

 Why metavar P? Doesn't look great in the help text IMHO. The default PATCHES is
much better, no?

> +                        help='list of patches')
> +    parser.add_argument('-a', dest='architecture', action='store',

 You would typically use ('--architecture', '-a', action='store') i.e. make the
dest implicit based on the long option.


> +                        help='find developers in charge of this architecture')
> +    parser.add_argument('-p', dest='package', action='store',
> +                        help='find developers in charge of this package')
> +    parser.add_argument('-c', dest='check', action='store_const',
> +                        const=True, help='list files not handled by any developer')

 I wonder about the logic here: for patches, we support a list of patches, but
for architecture or package just a single one. Wouldn't it be better to use the
positional arguments as "things to work with" and -a/-p as a modifier?

> +    return parser.parse_args()
> +
> +def __main__():
> +    devs = getdeveloperlib.parse_developers()
> +    if devs is None:
> +        sys.exit(1)
> +    args = parse_args()
> +
> +    # Check that only one action is given
> +    action = 0
> +    if args.architecture is not None:
> +        action += 1
> +    if args.package is not None:
> +        action += 1
> +    if args.check:
> +        action += 1
> +    if len(args.patches) != 0:
> +        action += 1

 Why not use argparse.add_mutually_exclusive_group()? This will also print the
help text properly. So I would make it:

parser = ...
check_or_act = parser.add_mutually_exclusive_group(required=True)
check_or_act.add_argument('--check', '-c', ...)
act = check_or_act.add_argument_group()
action = act.add_mutually_exclusive_group(required=False)
action.add_argument('--architecture', '--arch', '-a', dest='action',
                    action='store_const', const='arch')
action.add_argument('--package', '-p', ...)
act.add_argument('things_to_work_with', nargs='*', ...)

 You may want to look for a better name than 'things to work with' though :-)

 While we're at it: I would also like a --file and --infra option.


> +    if action > 1:
> +        print("Cannot do more than one action")
> +        return
> +    if action == 0:
> +        print("No action specified")
> +        return

 Same here: argparse can do that check for you. Also you'd normally use
parser.error() for error exit. It calls sys.exit internally.

> +
> +    # Handle the check action

 A nicer way to handle the different actions is to use dest='action', const= and
the store_const action so you have a single 'action' attribute to check. So:

	if args.action == 'check':
	elif args.action == 'arch':
	...

 Or even better, create a function for each action (taking args as the
argument), use the functions as the const=, and call it directly:

	args.action(args)


> +    if args.check:
> +        files = getdeveloperlib.check_developers(devs)
> +        for f in files:
> +            print f

 If you're going to use Python 2, you must put python2 on the first line.

 But I'd prefer Python 3 :-). It's just the prints, so run it through 2to3 and add

from __future__ import print_function


> +
> +    # Handle the architecture action
> +    if args.architecture is not None:
> +        for dev in devs:
> +            if args.architecture in dev.architectures:
> +                print(dev.name)
> +        return
> +
> +    # Handle the package action
> +    if args.package is not None:
> +        for dev in devs:
> +            if args.package in dev.packages:
> +                print(dev.name)

 It would make sense to me if the infra was also analysed when you specify a
package.

> +        return
> +
> +    # Handle the patches action
> +    if len(args.patches) != 0:
> +        (files, infras) = getdeveloperlib.analyze_patches(args.patches)
> +        matching_devs = set()
> +        for dev in devs:
> +            # See if we have developers matching by package name
> +            for f in files:
> +                if dev.hasfile(f):
> +                    matching_devs.add(dev.name)
> +            # See if we have developers matching by package infra
> +            for i in infras:
> +                if i in dev.infras:
> +                    matching_devs.add(dev.name)

 I'm actually not so sure if it's a good idea to put people in Cc based on
infra. You really want to be Cc-ed every time someone bumps an autotools package?

> +
> +        result = "--to buildroot at buildroot.org"
> +        for dev in matching_devs:
> +            result += " --to \"%s\"" % dev

 I agree with Yann: --cc is better.

> +
> +        if result != "":
> +            print("git send-email %s" % result)
> +
> +__main__()
> +
> diff --git a/support/scripts/getdeveloperlib.py b/support/scripts/getdeveloperlib.py
> new file mode 100644
> index 0000000..7b39041
> --- /dev/null
> +++ b/support/scripts/getdeveloperlib.py
> @@ -0,0 +1,201 @@
> +import sys
> +import os
> +import re
> +import argparse
> +import glob
> +import subprocess
> +
> +#
> +# Patch parsing functions
> +#
> +
> +FIND_INFRA_IN_PATCH = re.compile("^\+\$\(eval \$\((host-)?([^-]*)-package\)\)$")
 Better make it a raw string:       ^r

> +
> +def analyze_patch(patch):
> +    """Parse one patch and return the list of files modified, added or
> +    removed by the patch."""
> +    files = set()
> +    infras = set()
> +    with open(patch, "r") as f:
> +        for line in f:
> +            # If the patch is adding a package, find which infra it is
> +            m = FIND_INFRA_IN_PATCH.match(line)
> +            if m:
> +                infras.add(m.group(2))
> +            if not line.startswith("+++ "):
> +                continue
> +            line.strip()
> +            fname = line[line.find("/") + 1 : ].strip()
> +            if fname == "dev/null":
> +                continue
> +            files.add(fname)
> +    return (files, infras)

 I think it is more useful to extract only the files from the patch, and then
look at the actual files in the filesystem to analyse them further. This does go
against the approach of get_maintainers.pl, but for me it's more logical. But
perhaps this was intentional, to avoid getting a mail every time a package using
a particular infra is changed?


> +
> +FIND_INFRA_IN_MK = re.compile("^\$\(eval \$\((host-)?([^-]*)-package\)\)$")
> +
> +def fname_get_package_infra(fname):
> +    """Checks whether the file name passed as argument is a Buildroot .mk
> +    file describing a package, and find the infrastructure it's using."""
> +    if not fname.endswith(".mk"):
> +        return None
> +
> +    if not os.path.exists(fname):
> +        return None
> +
> +    with open(fname, "r") as f:
> +        for l in f:
> +            l = l.strip()
> +            m = FIND_INFRA_IN_MK.match(l)
> +            if m:
> +                return m.group(2)
> +    return None
> +
> +def get_infras(files):
> +    """Search in the list of files for .mk files, and collect the package
> +    infrastructures used by those .mk files."""
> +    infras = set()
> +    for fname in files:
> +        infra = fname_get_package_infra(fname)
> +        if infra:
> +            infras.add(infra)
> +    return infras
> +
> +def analyze_patches(patches):
> +    """Parse a list of patches and returns the list of files modified,
> +    added or removed by the patches, as well as the list of package
> +    infrastructures used by those patches (if any)"""
> +    allfiles = set()
> +    allinfras = set()
> +    for patch in patches:
> +        (files, infras) = analyze_patch(patch)
> +        allfiles = allfiles | files
> +        allinfras = allinfras | infras
> +    allinfras = allinfras | get_infras(allfiles)
> +    return (allfiles, allinfras)
> +

 All of the above could be in a separate module.

> +#
> +# DEVELOPERS file parsing functions
> +#
> +
> +class Developer:
> +    def __init__(self, name, files):
> +        self.name = name
> +        self.files = files
> +        self.packages = parse_developer_packages(files)
> +        self.architectures = parse_developer_architectures(files)
> +        self.infras = parse_developer_infras(files)
> +
> +    def hasfile(self, f):
> +        f = os.path.abspath(f)
> +        for fs in self.files:
> +            if f.startswith(fs):
> +                return True
> +        return False
> +
> +def parse_developer_packages(fnames):
> +    """Given a list of file patterns, travel through the Buildroot source
> +    tree to find which packages are implemented by those file
> +    patterns, and return a list of those packages."""
> +    packages = set()
> +    for fname in fnames:
> +        for root, dirs, files in os.walk(fname):
> +            for f in files:
> +                path = os.path.join(root, f)
> +                if fname_get_package_infra(path):
> +                    pkg = os.path.splitext(f)[0]
> +                    packages.add(pkg)
> +    return packages
> +
> +def parse_arches_from_config_in(fname):
> +    """Given a path to an arch/Config.in.* file, parse it to get the list
> +    of BR2_ARCH values for this architecture."""
> +    arches = set()
> +    with open(fname, "r") as f:
> +        parsing_arches = False
> +        for l in f:
> +            l = l.strip()
> +            if l == "config BR2_ARCH":
> +                parsing_arches = True
> +                continue
> +            if parsing_arches:
> +                m = re.match("^\s*default \"([^\"]*)\".*", l)
> +                if m:
> +                    arches.add(m.group(1))
> +                else:
> +                    parsing_arches = False
> +    return arches
> +
> +def parse_developer_architectures(fnames):
> +    """Given a list of file names, find the ones starting by
> +    'arch/Config.in.', and use that to determine the architecture a
> +    developer is working on."""
> +    arches = set()
> +    for fname in fnames:
> +        if not re.match("^.*/arch/Config\.in\..*$", fname):
                             ^^^
 I don't think this is a good idea. First of all it looks ugly, second, this
would also match the Config.in.host file of a package called arch. And there is
no reason to. See below.

> +            continue
> +        arches = arches | parse_arches_from_config_in(fname)
> +    return arches
> +
> +def parse_developer_infras(fnames):
> +    infras = set()
> +    for fname in fnames:
> +        m = re.match("^package/pkg-([^.]*).mk$", fname)
> +        if m:
> +            infras.add(m.group(1))
> +    return infras
> +
> +def parse_developers(basepath=None):

 basepath isn't used and I also don't see how it could be used.

> +    """Parse the DEVELOPERS file and return a list of Developer objects."""
> +    developers = []
> +    linen = 0
> +    if basepath == None:
> +        basepath = os.getcwd()

 I don't see any reason to use absolute paths. Just use relative paths
everywhere, and require that the script is executed from the top-level buildroot
directory. Makes things a whole lot simpler.

 Note that BR2_EXTERNAL is implicitly supported: just put a DEVELOPERS file in
it, and run the script for the external directory.

> +    with open(os.path.join(basepath, "DEVELOPERS"), "r") as f:
> +        files = []
> +        name = None
> +        for l in f:
> +            l = l.strip()
> +            if l.startswith("#"):
> +                continue
> +            elif l.startswith("N:"):
> +                if name is not None or len(files) != 0:
> +                    print("Syntax error in DEVELOPERS file, line %d" % linen)

 Is it really required to have an empty line at the end of a developer? Just
'finish' the developer when you encounter the next one.

> +                name = l[2:].strip()
> +            elif l.startswith("F:"):
> +                fname = l[2:].strip()
> +                dev_files = glob.glob(os.path.join(basepath, fname))
> +                if len(dev_files) == 0:
> +                    print("WARNING: '%s' doesn't match any file" % fname)
> +                files += dev_files
> +            elif l == "":
> +                if not name:
> +                    continue
> +                developers.append(Developer(name, files))
> +                files = []
> +                name = None
> +            else:
> +                print("Syntax error in DEVELOPERS file, line %d: '%s'" % (linen, l))
> +                return None
> +            linen += 1
> +    # handle last developer
> +    if name is not None:
> +        developers.append(Developer(name, files))
> +    return developers

 IMHO this whole function would be simpler if structured like this:

for l in f:
	if '#': continue
	if 'N': developer = Developer(name); developers.append(developer)
	if 'F': for f in files: developer.addFile (f)

i.e. don't create the developer at the end, but create it immediately and update it.


> +
> +def check_developers(developers, basepath=None):
> +    """Look at the list of files versioned in Buildroot, and returns the
> +    list of files that are not handled by any developer"""
> +    if basepath == None:
> +        basepath = os.getcwd()
> +    cmd = ["git", "--git-dir", os.path.join(basepath, ".git"), "ls-files"]

 I don't understand why you need the --git-dir...

> +    files = subprocess.check_output(cmd).strip().split("\n")
> +    unhandled_files = []
> +    for f in files:
> +        handled = False
> +        for d in developers:
> +            if d.hasfile(os.path.join(basepath, f)):
> +                handled = True
> +                break
> +        if not handled:
> +            unhandled_files.append(f)
> +    return unhandled_files
> 


 You are creating a Developer -> Files/Arches/Infras mapping, but all the uses
are actually with the reverse, i.e. File -> Developers. So maybe it makes sense
to build up the reverse mapping as well. Protip: use collections.defaultdict.


 Regards,
 Arnout

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 3/4] docs/manual: update contribute.txt to cover get-developers
  2016-09-12 21:09   ` Yann E. MORIN
@ 2016-09-15 20:29     ` Arnout Vandecappelle
  0 siblings, 0 replies; 17+ messages in thread
From: Arnout Vandecappelle @ 2016-09-15 20:29 UTC (permalink / raw)
  To: buildroot



On 12-09-16 23:09, Yann E. MORIN wrote:
> Thomas, All,
> 
> On 2016-09-12 22:54 +0200, Thomas Petazzoni spake thusly:
>> This commit updates the contribute.txt part of the manual to tell
>> people to use get-developers to get the appropriate "git send-email"
>> command when sending patches.
>>
>> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
>> ---
>>  docs/manual/contribute.txt | 12 ++++++++++--
>>  1 file changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/docs/manual/contribute.txt b/docs/manual/contribute.txt
>> index 1b1f4de..2973ef7 100644
>> --- a/docs/manual/contribute.txt
>> +++ b/docs/manual/contribute.txt
>> @@ -283,10 +283,18 @@ automatically adding the +Signed-off-by+ line.
>>  Once patch files are generated, you can review/edit the commit message
>>  before submitting them, using your favorite text editor.
>>  
>> -Lastly, send/submit your patch set to the Buildroot mailing list:
>> +Buildroot provides a handy tool to know to whom your patches should be
>> +sent, called +get-developers+. This tool reads your patches and
>> +outputs the appropriate +git send-email+ command to use:
>>  
>>  ---------------------
>> -$ git send-email --to buildroot at buildroot.org outgoing/*
>> +$ ./support/scripts/get-developers outgoing/*
>> +---------------------
>> +
>> +Use the output of +get-developers+ to send your patches:
>> +
>> +---------------------
>> +$ git send-email --to buildroot at buildroot.org --to bob --to alice outgoing/*
> 
> Minor tweak: I'd prefer we use carbon-copy:   --cc alice --cc bob

 Agreed. With that,
Reviewed-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>


 Regards,
 Arnout

> 
> Regards,
> Yann E. MORIN.
> 
>>  ---------------------
>>  
>>  Note that +git+ should be configured to use your mail account.
>> -- 
>> 2.7.4
>>
>> _______________________________________________
>> buildroot mailing list
>> buildroot at busybox.net
>> http://lists.busybox.net/mailman/listinfo/buildroot
> 

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 4/4] docs/manual: add new section about the DEVELOPERS file and get-developer
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 4/4] docs/manual: add new section about the DEVELOPERS file and get-developer Thomas Petazzoni
@ 2016-09-15 20:35   ` Arnout Vandecappelle
  2016-09-21  7:17   ` Peter Korsgaard
  1 sibling, 0 replies; 17+ messages in thread
From: Arnout Vandecappelle @ 2016-09-15 20:35 UTC (permalink / raw)
  To: buildroot



On 12-09-16 22:54, Thomas Petazzoni wrote:
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> ---
>  docs/manual/contribute.txt |  6 ++++++
>  docs/manual/developers.txt | 46 ++++++++++++++++++++++++++++++++++++++++++++++
>  docs/manual/manual.txt     |  2 ++
>  3 files changed, 54 insertions(+)
>  create mode 100644 docs/manual/developers.txt
> 
> diff --git a/docs/manual/contribute.txt b/docs/manual/contribute.txt
> index 2973ef7..a8f9db7 100644
> --- a/docs/manual/contribute.txt
> +++ b/docs/manual/contribute.txt
> @@ -258,6 +258,12 @@ removed, preferably with the upstream commit ID. Also any other
>  required changes should be explained explicitly, like configure
>  options that no longer exist or are no longer needed.
>  
> +If you are interested in getting notified of build failures and of
> +further changes in the packages you added or modified, please add
> +yourself to the DEVELOPERS file. This should be done in a separate
> +patch of the series. See xref:DEVELOPERS[the DEVELOPERS file] for more
> +information.
> +
>  ==== Preparing a patch series
>  
>  Starting from the changes committed in your local git view, _rebase_
> diff --git a/docs/manual/developers.txt b/docs/manual/developers.txt
> new file mode 100644
> index 0000000..2fbbff3
> --- /dev/null
> +++ b/docs/manual/developers.txt
> @@ -0,0 +1,46 @@
> +// -*- mode:doc; -*-
> +// vim: set syntax=asciidoc:
> +
> +[[DEVELOPERS]]
> +== DEVELOPERS file and get-developers

 There should also be an xref to this section from the paragraph added in patch 3/4.

> +
> +The main Buildroot directory contains a file named +DEVELOPERS+ that
> +list the developers in charge of various areas of Buildroot. Thanks to
                       ^^^^^^^^^^^^ too strong. How about "involved in"?

> +this file, the +get-developer+ tool allows to:
> +
> +- Calculate the list of developers to whom patches should be sent, by
> +  parsing the patches and matching the modified files with the
> +  relevant developers. See xref:submitting-patches[] for details.
> +
> +- Find which developers are in charge of a given architecture or
                               ^^^^^^^^^ "taking care" ?


 Regards,
 Arnout

> +  package, so that they can be notified when a build failure occurs on
> +  this architecture or package. This is done in interaction with
> +  Buildroot's autobuild infrastructure.
> +
> +We ask developers adding new packages, new boards, or generally new
> +functionality in Buildroot, to register themselves in the +DEVELOPERS+
> +file. As an example, we expect a developer contributing a new package
> +to include in his patch the appropriate modification to the
> ++DEVELOPERS+ file.
> +
> +The +DEVELOPERS+ file format is documented in detail inside the file
> +itself.
> +
> +The +get-developer+ tool, located in +support/scripts+ allows to use
> +the +DEVELOPERS+ file for various tasks:
> +
> +- When passing one or several patches as command line argument,
> +  +get-developer+ will return the appropriate +git send-email+
> +  command.
> +
> +- When using the +-a <arch>+ command line option, +get-developer+ will
> +  return the list of developers in charge of the given architecture.
> +
> +- When using the +-p <package>+ command line option, +get-developer+
> +  will return the list of developers in charge of the given package.
> +
> +- When using the +-c+ command line option, +get-developer+ will look
> +  at all files under version control in the Buildroot repository, and
> +  list the ones that are not handled by any developer. The purpose of
> +  this option is to help completing the +DEVELOPERS+ file.
> +
> diff --git a/docs/manual/manual.txt b/docs/manual/manual.txt
> index 3c531e3..7630ea6 100644
> --- a/docs/manual/manual.txt
> +++ b/docs/manual/manual.txt
> @@ -64,6 +64,8 @@ include::debugging-buildroot.txt[]
>  
>  include::contribute.txt[]
>  
> +include::developers.txt[]
> +
>  = Appendix
>  
>  include::appendix.txt[]
> 

-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script Thomas Petazzoni
  2016-09-15 20:28   ` Arnout Vandecappelle
@ 2016-09-21  7:03   ` Peter Korsgaard
  2016-09-21  8:50     ` Thomas Petazzoni
  1 sibling, 1 reply; 17+ messages in thread
From: Peter Korsgaard @ 2016-09-21  7:03 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 > This script, and its companion library, is more-or-less Buildroot's
 > equivalent to the kernel get_maintainer.pl script: it allows to get the
 > list of developers to whom a set of patches should be sent to.

 > To do so, it first relies on a text file, named DEVELOPERS, at the root
 > of the Buildroot source tree (added in a followup commit) to list the
 > developers and the files they are interested in. The DEVELOPERS file's
 > format is simple:

 > N:     Firstname Lastname <email>
 > F:     path/to/file
 > F:     path/to/another/file

 > This allows to associate developers with the files they are looking
 > after, be they related to a package, a defconfig, a filesystem image, a
 > package infrastructure, the documentation, or anything else.

 > When a directory is given, the tool assumes that the developer handles
 > all files and subdirectories in this directory. For example
 > "package/qt5/" can be used for the developers looking after all the Qt5
 > packages.

 > Conventional shell patterns can be used, so "package/python-*" can be
 > used for the developers who want to look after all packages matching
 > "python-*".

 > A few files are recognized specially:

 >  - .mk files are parsed, and if they contain $(eval
 >    $(<something>-package)), the developer is assumed to be looking after
 >    the corresponding package. This way, autobuilder failures for this
 >    package can be reported directly to this developer.

 >  - arch/Config.in.<arch> files are recognized as "the developer is
 >    looking after the <arch> architecture". In this case, get-developer
 >    parses the arch/Config.in.<arch> to get the list of possible BR2_ARCH
 >    values. This way, autobuilder failures for this package can be
 >    reported directly to this developer.

 >  - pkg/pkg-<infra>.mk are recognized as "the developer is looking after
 >    the <infra> package infrastructure. In this case, any patch that adds
 >    or touches a .mk file that uses this infrastructure will be sent to
 >    this developer.

Committed, thanks. Care to send a followup patch fixing the issues
Arnout pointed out?

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 2/4] DEVELOPERS: add initial list of Buildroot developers
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 2/4] DEVELOPERS: add initial list of Buildroot developers Thomas Petazzoni
@ 2016-09-21  7:04   ` Peter Korsgaard
  0 siblings, 0 replies; 17+ messages in thread
From: Peter Korsgaard @ 2016-09-21  7:04 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 > This is an initial list of Buildroot developers. It has been created
 > semi-automatically by parsing the Git history, and finding the authors
 > of commits with a title like "<foo>: new package". Some additional
 > manual tweaking has been done (merging multiple entries corresponding to
 > the same person, adding some more entries, etc.).

 > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Committed, thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 3/4] docs/manual: update contribute.txt to cover get-developers
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 3/4] docs/manual: update contribute.txt to cover get-developers Thomas Petazzoni
  2016-09-12 21:09   ` Yann E. MORIN
@ 2016-09-21  7:07   ` Peter Korsgaard
  1 sibling, 0 replies; 17+ messages in thread
From: Peter Korsgaard @ 2016-09-21  7:07 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 > This commit updates the contribute.txt part of the manual to tell
 > people to use get-developers to get the appropriate "git send-email"
 > command when sending patches.

 > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

Committed after changing --to to --cc as suggested by Yann/Arnout, thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 4/4] docs/manual: add new section about the DEVELOPERS file and get-developer
  2016-09-12 20:54 ` [Buildroot] [PATCH v3 4/4] docs/manual: add new section about the DEVELOPERS file and get-developer Thomas Petazzoni
  2016-09-15 20:35   ` Arnout Vandecappelle
@ 2016-09-21  7:17   ` Peter Korsgaard
  1 sibling, 0 replies; 17+ messages in thread
From: Peter Korsgaard @ 2016-09-21  7:17 UTC (permalink / raw)
  To: buildroot

>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 > ---
 >  docs/manual/contribute.txt |  6 ++++++
 >  docs/manual/developers.txt | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 >  docs/manual/manual.txt     |  2 ++
 >  3 files changed, 54 insertions(+)
 >  create mode 100644 docs/manual/developers.txt

 > diff --git a/docs/manual/contribute.txt b/docs/manual/contribute.txt
 > index 2973ef7..a8f9db7 100644
 > --- a/docs/manual/contribute.txt
 > +++ b/docs/manual/contribute.txt
 > @@ -258,6 +258,12 @@ removed, preferably with the upstream commit ID. Also any other
 >  required changes should be explained explicitly, like configure
 >  options that no longer exist or are no longer needed.
 
 > +If you are interested in getting notified of build failures and of
 > +further changes in the packages you added or modified, please add
 > +yourself to the DEVELOPERS file. This should be done in a separate
 > +patch of the series. See xref:DEVELOPERS[the DEVELOPERS file] for more
 > +information.

Committed after tweaking the wording and adding an xref like suggested
by Arnout, thanks.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script
  2016-09-21  7:03   ` Peter Korsgaard
@ 2016-09-21  8:50     ` Thomas Petazzoni
  2016-09-21  9:25       ` Arnout Vandecappelle
  0 siblings, 1 reply; 17+ messages in thread
From: Thomas Petazzoni @ 2016-09-21  8:50 UTC (permalink / raw)
  To: buildroot

Hello,

On Wed, 21 Sep 2016 09:03:11 +0200, Peter Korsgaard wrote:

>  > A few files are recognized specially:  
> 
>  >  - .mk files are parsed, and if they contain $(eval
>  >    $(<something>-package)), the developer is assumed to be looking after
>  >    the corresponding package. This way, autobuilder failures for this
>  >    package can be reported directly to this developer.  
> 
>  >  - arch/Config.in.<arch> files are recognized as "the developer is
>  >    looking after the <arch> architecture". In this case, get-developer
>  >    parses the arch/Config.in.<arch> to get the list of possible BR2_ARCH
>  >    values. This way, autobuilder failures for this package can be
>  >    reported directly to this developer.  
> 
>  >  - pkg/pkg-<infra>.mk are recognized as "the developer is looking after
>  >    the <infra> package infrastructure. In this case, any patch that adds
>  >    or touches a .mk file that uses this infrastructure will be sent to
>  >    this developer.  
> 
> Committed, thanks. Care to send a followup patch fixing the issues
> Arnout pointed out?

Yes. I already started working on some of them. However, some
suggestions from Arnout are not working directly, especially the
argparse related suggestions around using mutually exclusive groups.
Patches from Arnout welcome :-)

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script
  2016-09-21  8:50     ` Thomas Petazzoni
@ 2016-09-21  9:25       ` Arnout Vandecappelle
  0 siblings, 0 replies; 17+ messages in thread
From: Arnout Vandecappelle @ 2016-09-21  9:25 UTC (permalink / raw)
  To: buildroot



On 21-09-16 10:50, Thomas Petazzoni wrote:
> Hello,
> 
> On Wed, 21 Sep 2016 09:03:11 +0200, Peter Korsgaard wrote:
> 
>>  > A few files are recognized specially:  
>>
>>  >  - .mk files are parsed, and if they contain $(eval
>>  >    $(<something>-package)), the developer is assumed to be looking after
>>  >    the corresponding package. This way, autobuilder failures for this
>>  >    package can be reported directly to this developer.  
>>
>>  >  - arch/Config.in.<arch> files are recognized as "the developer is
>>  >    looking after the <arch> architecture". In this case, get-developer
>>  >    parses the arch/Config.in.<arch> to get the list of possible BR2_ARCH
>>  >    values. This way, autobuilder failures for this package can be
>>  >    reported directly to this developer.  
>>
>>  >  - pkg/pkg-<infra>.mk are recognized as "the developer is looking after
>>  >    the <infra> package infrastructure. In this case, any patch that adds
>>  >    or touches a .mk file that uses this infrastructure will be sent to
>>  >    this developer.  
>>
>> Committed, thanks. Care to send a followup patch fixing the issues
>> Arnout pointed out?
> 
> Yes. I already started working on some of them. However, some
> suggestions from Arnout are not working directly, especially the
> argparse related suggestions around using mutually exclusive groups.
> Patches from Arnout welcome :-)

 I'll look into it. Some day :-)

 Regards,
 Arnout


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2016-09-21  9:25 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-12 20:54 [Buildroot] [PATCH v3 0/4] Add a get-developers script and database Thomas Petazzoni
2016-09-12 20:54 ` [Buildroot] [PATCH v3 1/4] support/scripts/get-developers: add new script Thomas Petazzoni
2016-09-15 20:28   ` Arnout Vandecappelle
2016-09-21  7:03   ` Peter Korsgaard
2016-09-21  8:50     ` Thomas Petazzoni
2016-09-21  9:25       ` Arnout Vandecappelle
2016-09-12 20:54 ` [Buildroot] [PATCH v3 2/4] DEVELOPERS: add initial list of Buildroot developers Thomas Petazzoni
2016-09-21  7:04   ` Peter Korsgaard
2016-09-12 20:54 ` [Buildroot] [PATCH v3 3/4] docs/manual: update contribute.txt to cover get-developers Thomas Petazzoni
2016-09-12 21:09   ` Yann E. MORIN
2016-09-15 20:29     ` Arnout Vandecappelle
2016-09-21  7:07   ` Peter Korsgaard
2016-09-12 20:54 ` [Buildroot] [PATCH v3 4/4] docs/manual: add new section about the DEVELOPERS file and get-developer Thomas Petazzoni
2016-09-15 20:35   ` Arnout Vandecappelle
2016-09-21  7:17   ` Peter Korsgaard
2016-09-12 21:14 ` [Buildroot] [PATCH v3 0/4] Add a get-developers script and database Yann E. MORIN
2016-09-12 21:30   ` Thomas Petazzoni

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.