
 Notes for util-linux-ng developers
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

AUTOTOOLS:

     * "./autogen.sh" generates all necessary files (run it after checkout from
       git)

     * "make distclean" removes all unnecessary files, but code is still possible
       recompile by "./configure; make"

     * "make dist-gzip" (or -bzip2) creates tarball which is possible use without
      autogen.sh


PATCHES:

     * send your patches to the mailing list or to upstream maintainer
       (see the AUTHORS file)

     * diff -u

     * don't include generated (autotools) stuff to your patches
       (hint: use git-clean [-X])

     * patches are delivered via email only.  Downloading them from internet
       servers is a pain.

     * one patch per email, with the changelog in the body of the email.

     * Subject: [PATCH] subsystem: description

     * if someone else wrote the patch, they should be credited (and blamed)
       for it. To communicate this, add a line:

          From: John Doe <jdoe@wherever.com>

     * add a Signed-off-by line (hint: use "git commit -s")

       The sign-off is a simple line at the end of the explanation for the
       patch, which certifies that you wrote it or otherwise have the right to
       pass it on as a open-source patch.  The rules are pretty simple: if you
       can certify the below:

           By making a contribution to this project, I certify that:

           (a) The contribution was created in whole or in part by me and I
               have the right to submit it under the open source license
               indicated in the file; or

           (b) The contribution is based upon previous work that, to the best
               of my knowledge, is covered under an appropriate open source
               license and I have the right under that license to submit that
               work with modifications, whether created in whole or in part
               by me, under the same open source license (unless I am
               permitted to submit under a different license), as indicated
               in the file; or

           (c) The contribution was provided directly to me by some other
               person who certified (a), (b) or (c) and I have not modified it.

           (d) I understand and agree that this project and the contribution
               are public and that a record of the contribution (including all
               personal information I submit with it, including my sign-off) is
               maintained indefinitely and may be redistributed consistent with
               this project or the open source license(s) involved.

       then you just add a line saying

               Signed-off-by: Random J Developer <random@developer.example.org>

       using your real name (sorry, no pseudonyms or anonymous contributions.)


     * for more details see:

       The perfect patch
                http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt

CODING STYLE:

     * the preferred coding style is based on the linux kernel Documentation/CodingStyle.
       For more details see:

       http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=Documentation/CodingStyle


SCM (source code management):

     git clone git://git.kernel.org/pub/scm/utils/util-linux-ng/util-linux-ng.git util-linux-ng


    * maintenance (stable) branch
        - created for every <major>.<minor> release
        - branch name: stable/v<major>.<minor>

    * bugfix branch
        - created for <major>.<minor>.<maint> release for critical/security bugs only
        - this branch is optional
        - branch name: stable/v<major>.<minor>.<maint>

    * master branch
        - the status of this branch is: "it works for me". It means useful
          but not well tested patches.
        - it's source for occasional snapshots
        - for long-term development or invasive changes should be an active
          development forked into a separate branch (topic branches) from the
          tip of "master".

    * A new tag object is created for:
        - every release, tag name: v<version>


    * KNOWN BUGS:
        - tag v2.13.1 is typo. Please, ignore this tag.

