summaryrefslogblamecommitdiffstats
path: root/Documentation/howto-contribute.txt
blob: 6d3e7892d766a7e9aad9aa12092aa86801dee191 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12


                                                                             
                                                          







                                                                          


                                                                        


                                                                           


                                                                                  




                                                                             

                                                                       












































                                                                               




                                                                         
                                                              

                                                                        





                                                                 
                                                                                                        


                                                                        
                                        
 


















                                                                             


                                                                                


                                                                     



                                                                             



                                                                          


                                                                 

















                                                                         
 




























                                                                       








                                                                      
Patches

	* send your patches to the mailing list or to the upstream maintainer
	  (see the README file in project root directory).

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

	* neutrality; The stuff in util-linux should be rather
	  distribution-neutral. No RPMs/DEBs/... are provided - get yours
	  from your distributor.

	* patches are delivered via email or git remote repository only.
	  Downloading them from internet servers is a pain.  See
	  howto-pull-request.txt for remote repository instructions.

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

	* mail attachments are difficult. Tip:
	  git send-email --to util-linux@vger.kernel.org origin/master..yourbranch

	* many small patches are favoured over one big. Break down is done on
	  basis of logical functionality; for example #endif mark ups,
	  compiler warning and exit codes fixes all should be individual
	  small patches.

	* 'Subject: [PATCH] subsystem: description'. See also 'Patching
	  process'.

	* 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.)

Before sending a patch

	* make sure that after patching source files will compile without
	  errors.

	* test that previously existed program behavior is not
	  unintentionally alterred. If you alter the behavior tell about
	  it in commit message.

Coding style

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

	  http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/plain/Documentation/CodingStyle

	* Use `FIXME:' and a good description if want to inform others
	  something is not quite right, and you are unwilling to fix the
	  issue in the submitted change.

Patching process

	* Tell in mail list when you are going to work with some particular
	  piece of code for long time.  This helps other to avoid massive
	  merge conflicts.  Small or quick work does not need to be
	  announced.

	* Submit only changes that you think are ready to merge.  If you only
	  want change review tell your intention clearly in change cover
	  letter, and/or in each patch subject to review-only.

	* When getting comments align the changes with them.  Resubmission
	  without changes is as good as ignoring advice, and is neither
	  recommended nor polite.

	* Resubmission can be partial or complete.  If only few alterations
	  are needed here and there resubmit particular patches.  When
	  comments cause greater effect resubmit everything again.

	* Mark resubmission with [PATCH v2]. Hint:
	  git format-patch origin/master..yourbranch --subject-prefix='PATCH v2'

	* Use of remote repository for resubmission can be good idea.
	  See also howto-pull-request.txt

	* All patch submissions, big or small, are either commented, reject,
	  or merge.  When maintainer rejects a patch (series) it is pointless
	  to resubmit.

Various notes

	* The util-linux does not use kernel headers for file system super
	  blocks structures.

	* Patches relying on features that are not in Linus' tree
	  are not accepted.

	* Do not use `else' after non-returning functions. For
	  example

	  if (this)
		err(EXIT_FAIL, "this failed");
	  else
		err(EXIT_FAIL, "that failed");

	  is wrong and should be wrote

	  if (this)
		err(EXIT_FAIL, "this failed");
	  err(EXIT_FAIL, "that failed");

	* When you use if shortshort hand make sure it is not wrapped to
	  multiple lines. In case the shorthand does not look good on one
	  line use normal "if () else" syntax.

Standards compliancy

	Some of the commands maintained in this package have Open Group
	requirements. These commands are;

		cal
		col
		ipcrm
		ipcs
		kill
		line
		logger
		mesg
		more
		newgrp
		pg
		renice

	If you change these tools please make sure a change does not
	conflict with the latest standard.  For example it is
	recommendable not to add short command line options before they
	are part of standard.  Introducing new long options is
	acceptable.

		The Single UNIX(TM) Specification, Version 2
		Copyright (C) 1997 The Open Group

		http://pubs.opengroup.org/onlinepubs/7908799/xcuix.html

IRC channel

	* We have a new #util-linux IRC channel at freenode.net.

	  irc://chat.freenode.net/util-linux

	  the channel is for developers or upstream maintainers.  User
	  support is recommended to go to distribution channels or
	  forums.