ROS Development Policies
------------------------------------
This document will talk about coding standards, version control, and
contribution policies.

Our coding standard is similar to the Linux kernel style (but with a tabstop of
4), so when in doubt, do what they do.
- No spaces after the name of a function in a call.  For example,
  printk("hello") not printk ("hello").

- Functions that take no arguments are declared f(void) not f().

- Function names are all lower-case, separated by underscores.

- One space after commas.  For example foo(x, y, z), not foo(x,y,z);

- One space after keywords "if", "for", "while", "switch".  For example, if
  (x) not if(x).

- Space before braces.  For example, if (x) { not if (x){.

- For if/while/etc, the opening brace is on the same line as the if.  If you
  have just one line, no brace is necessary.  If you have an if / else clause,
  and one of them has braces, put braces on both.  An else line should start
  with a brace.

- Beginning-of-line indentation via tabs, not spaces.  Use spaces for
  additional formatting (such as lining up text when word wrapping).

- Preprocessor macros are usually upper-case.  Try to avoid using macros
  unless necessary (I prefer static inlines).

- Pointer declarations have the * on the variable.  void *x, not void* x.

- Multi-word names are lower_case_with_underscores.  Keep your names short,
  especially for local variables.

- 'Permanent' comments in are C /* ... */ comments.  Only use C++ style (//)
  for temporary commenting-out, such as if you want to not call a function.
  If you want to block out large chunks of code, use #if 0 ... #endif

- In a function definition, the function name shoud NOT start a new line.  Old
  code incorrectly does this, and should be changed over time.
 
- Feel free to use gotos, especially in functions that have cleanup before
  they exit, or in other places that enhance readability.

- 80 characters per line.  When you wrap, try to line things up so they make
  sense, such as space-indenting so function arguments line up vertically.

- Do not typedef structs.  You can typedef function pointers when convenient.
  Keep in mind that typedefs require people to look up the real type when they
  analyze the code.

- Try to avoid making lots of separate files or extravagant directory
  hierarchies.  Keep in mind that people will need to work with and find these
  files (even via tab completion, it can be a pain).

Version Control: (git)
- Git allows us to do a lot of cool things.  One of its primary purposes is to
  provide a means for us to review each others code.

- Do not merge.  You should rebase your commits on top of the latest branch,
  then do a fast-forward merge.  You need to figure this out before working
  with the main repo.  Merges can be appropriate, but ask brho first.  If you
  are new to git, then odds are you should do the rebase/merge approach.

- Do not commit crappy commits.  Hold on to your commits for a little while
  before pushing, and if a problem appears in a branch that only you are using,
  you should go back and amend those commits.  git rebase and git commit
  --amend are your friend.

- Do not commit to "share code."  If two people are working on the same code
  and want to pass code from machine to machine, do not use a real branch from
  the origin repo.  You can do whatever on your own machines (or even in a
  temporary branch on the scm machine), but the version of the code submitted
  to the mainline must not have those crappy commits.

- Commit messages consist of one short line, followed by an empty line, and
  then a descriptive message (word wrapped).  Most editors (like vi) will help
  you with this.

- Once you've pushed a branch to the origin, you normally should not reset it -
  if the problem is minor, fix it later.  If you do it right away, it is
  usually not a big deal.  If you broke the repo, fix it, and you should
  probably send something to ros-kernel@.

- You ought to use gitk --all, or a similar program, to help visualize what is
  going on with the tree.

- Your commits should be of a reasonable size.  Try to isolate your commits to
  small, easily verifiable changes.  Each commit must compile, but you don't
  want to change everything in one commit.  Put another way, one commit that
  can be decoupled into smaller ones ought to be broken up.

- Likewise, don't do a commit just to change irrelevant things, such as turning
  off a printk or adjusting your manager() function (unless there's a good
  reason).  You just pollute the commit stream.

Contributing:
- Currently, we are not accepting unsolicited, large contributions.  If you
  have something in mind, contact us and we'll see how we can make it work.
  If you want your work to be merged, you should check with us before starting
  a project that may be incompatible with our system and goals.

- We will accept bug fixes.  Until we sort out the copyrights, if you want us
  to accept your patch, you'll need to assign your copyright to the Regeants of
  the University of California, which shouldn't be an issue for an UC Berkeley
  personnel.

- Expect your code to be audited by the appropriate subsystem maintainer.
  Basically, this means that if it is related to the riscv port, you need to
  make Andrew happy.  Otherwise, you need to make Barret happy.

- Despite being a research project, we make every effort to do things the
  proper way.  We are extremely reluctant to allow "ghetto hacks", especially
  the type that pop up near paper deadlines.  The appropriate way to deal with
  this is to have a separate branch for all the shameful commits you have, and
  after your deadlines have passed, you pick and choose which commits to apply
  to the real branch in a way that does not violate our standards.
