Developer Intro/Committer

From Blender Developer Wiki
Jump to: navigation, search

For All Developers

You've been added as bf-blender project member with Git write access, welcome! You can use this access now to work on Blender. You're also welcome to work on other features or fixes as discussed with the team online. Please always verify with the module owners listed on this wiki page, or with one of the bf-blender admins (Campbell Barton, Brecht van Lommel, or Ton Roosendaal) before committing. You can also consult the bf-committers email list or talk with us on one of the official IRC channels if in doubt.

Here's the standard checklist & guidelines all new devs need to read:

- The main rules for committing are:

  1. Always ensure that what you commit is either on your "own code", or you've verified the patch with the owner of the module. If you want to change things in other parts of the code, check with one of the developers who owns/maintains that.

  2. Always carefully check which files you have included in your local Git commit before pushing it to the main repository. Use 'git status', 'git show' and similar commands to inspect your commit. Check carefully if the files marked as modified are actually what you want to commit. Also remember to pull in recent changes to ensure your own changes are still working.
    If needed, use 'git rebase --interactive' to reorder, edit, fixup (join), or split the not yet pushed commits so they keep a comprehensible history and do not break 'git bisect' or other tools like automatic builds.

  3. Verify that the licensing and copyright information is correct in files you commit (especially for new files).

  4. Always contribute code in the same style as the code you're modifying. We have a long history of software development and can't restyle all code to a unified standard. Ensuring a per-file style consistency at least keeps things readable.
    Make sure you use real TABs (not spaces), and don't configure your editor to cleanup whitespace.
    For new code see our Code Style Guide

  5. Blender is strictly cross-platform and we only accept code that compiles correctly for all current platforms. For OpenGL (nothing older than 3.3, or correctly wrapped), Python (3.7), gcc (4.8 should work), msvc (2015 should work), etc. If in doubt, send a patch to the bf-committers list.

  6. if you think your commit may cause errors on others configurations, note this in your commit log, or better yet: notify the bf-committers mailing list or go to the irc.freenode.net #blendercoders channel.

  7. Subscribe to both mailing lists below Before committing:
    http://lists.blender.org/mailman/listinfo/bf-committers/
    http://lists.blender.org/mailman/listinfo/bf-blender-cvs/

  8. Blender has stages in its development cycle called BCon levels. Patches may be delayed or refused (even if the patch is acceptable) if a new Blender version is being prepared for release. To avoid this, make sure to check on the current BCon stage. (Release Cycle Docs)

- Blender Foundation -

Best Practice

Etiquette

  • When making very large changes to blender's source, keep yourself available for some time after committing them (1-3 hrs) in case your changes break blender in some way.
  • Don't make large changes before release
    See: Release Cycle Docs
  • Developers may reply to your commit logs. Even if you don't read every message on the bf-committers mailing list, at least be sure to reply comments on your commit.
  • When committing contributions from others, make sure the log includes their name and the patch number from the tracker where applicable.

Code Style

C/C++

There's Code Style Guidelines which should be followed when working on source code.

Some areas of the code haven't been ported to these code guidelines and if this is the case, the existing style should be followed when working on them. Do not mix feature implementations / bugfixes with a style cleanup.

Python

For python we follow pep8 where possible.

See: Best Practice - Style Conventions


Commit (Best Practice)

  • Always double check your commits before pushing
    (just as a quick verification to make sure other changes aren't accidentally being included).
  • Make sure you're using SSH to push commits, as described in Tools/Git#Commit_Access.
  • As mentioned under the C/C++ section, do not combine code cleanup/refactoring commits with functional changes, since this makes it harder to investigate when a commit causes new bugs.
  • Avoid having trailing whitespace in new code.
  • Don't do minor cleanup to existing code (such as trailing whitespace, space between functions, fullstops ending comments... or other superficial changes).
  • Store test files in: https://svn.blender.org/svnroot/bf-blender/trunk/lib/tests/

Commit Logs

Please follow the following guidelines and provided templates for your commits:

  • 50 characters for first line and 72 for following ones

Many git tools assume these metrics for proper rendering, such as git log --pretty=oneline or gitweb. Automated reports or just plain future development depend on good logs.

Bug Fixes

  • Don't copy the bug report name verbatim if it's not descriptive, explain exactly what the problem was.
  • Explain what you fixed on a user level, do not focus only on what was wrong in the code.
  • Start the commit log with e.g. "Fix T12345: " or "Fix:", so it's immediately clear that it's a bugfix.
  • Bonus Feature: mentioning "Fix T12345" will autoclose the bug T12345 on developer.blender.org!

Example:

Fix T12345: single short line to explain on a user level what the bug was

Optionally, more user level information about which scenarios the bug
happened in, why it was fixed in this particular way, etc.

If non-obvious, some technical note about what the cause of the bug was and
how it was solved.

Features

  • Explain what the feature does on a user level, not just the code changes.
  • Keep user level explanation and code changes explanation separate.
  • Explain features in terms of their names in the user interface, not internal code terminology.
  • If it's not obvious, explain what the feature is useful for or when it should be used.

Example:

Category: single short line saying what the feature you have implemented is

More user level information about how this feature works, explanation about why
it's good to have, link to docs or release notes, etc.
 
Optionally short technical notes about how the feature was implemented.

Code Cleanups

  • Make it clear when there are no functional changes.

Example:

Cleanup: single short line describing what you cleaned up

Optionally more information about the cleanup.

Code Review

If you are committing a patch that went through code review, the following lines should be added at the end. If you use Arcanist these are added automatically on landing.

Example:

Reviewed By: someone

Differential Revision: http://developer.blender.org/D123

This will autoclose the revision and give us a standard way to indicate who reviewed the code. Please remove all other fields like "Subscribers" or "Reviewers" to keep the commit message clean.

Branch Usage

Committers can create their own branches, this section notes some guidelines.

  • Avoid cryptic names or wordplay, branches should be named clearly, relating to their purpose.
    good: cycles_ctests, ui-api-refactor, temp-mathutils-doc, particles_refactor
    bad: test, experiment, terrible_consequencer.
  • If you intend to make a short-lived branch for some development purpose, use the prefix temp-.
    This lets others know it is a branch which will eventually be deleted.
    We sometimes use these to more easily collaborate on a patch before going into master.
  • Even though you have a lot of freedom to make changes in your own branch, please avoid committing large binary files,
    since this increases the size of Blender's repo for everyone.
    This includes changes to the splash image, fonts... etc. Or anything which isn't essential to your development.
  • If any branches you create no longer serves a useful purpose (such as branches that have been abandoned entirely or branches that were rebased into master and don't have a history worth keeping), you can delete them:
    git push origin --delete <branchName>