Skip to content

Contributing to Project Wonder

pascalrobert edited this page Dec 3, 2012 · 3 revisions

Introduction

There are many ways for anyone to help develop Project Wonder. It would be helpful to become familiar with the information in Getting the Wonder Source Code, Creating and Submitting an Acceptable Patch and Getting Started with Git.

Project Wonder is a large set of frameworks and example applications and utility applications. Contributors should keep all of this in mind as they make changes.

Please see this tutorial on importing the Project Wonder sources into your Eclipse environment.

There are dependencies between the frameworks that make up Project Wonder that must be kept in mind while changes are being made.

Webcast

We have done a webcast about how to contribute to Project Wonder by using Git, you can get the recording here.

The "integration" branch

Starting February 17th 2011, we added a new "integration" branch in Project Wonder. This branch will include contributions from the community that will be added later in the "master" branch. Major changes, like new frameworks or big updates to existing code, will be added to this branch so that everyone can try it out and give feedback. After a couple of weeks, if nobody reports problems with changes in "integration", the changes will be pushed to "master".

Like the master branch, the integration branch is also build with Jenkins, you can find the artifacts on http://jenkins.wocommunity.org.

Merging from integration to master

Commits from integration to master are integrated each two weeks. We merge commits that are more than 30 days old from the integration branch. The merge is done in a release candidate branch, so that people can try the release candidate before we merge this branch into master.

To Wonder committers: you need to do the following:

  • Create a new branch for the release candidate: git checkout master; git checkout -b rc-wonder-5.x.x
  • Check the Git history of the integration branch and note the last commit that is 30 days old (remember to check if a fix to that commit have been done days after!)
  • Do a merge with the commit id of the previous step: git merge -s recursive -Xpatience -Xtheirs XXXXXX
  • Push the release candidate to GitHub: git push origin rc-wonder-5.x.x

A week after the release candidate branch have been done, you need to merge the RC into master. You also need to tag the merge with a "wonder-5.x.x" tag (don't forget to push the tag to GitHub).

WebObjects Version Differences

Since the move of Project Wonder to GitHub, the main branch (master) is for WebObjects 5.4. If you use WebObjects 5.3, you have to use the Wonder_5_0_0_Legacy branch.

Naming Schemes

Project Wonder uses different name prefixes for different parts of the system. Prefixes include those in the list below. Note that there may be components and classes in very different parts of the system which do similar things. Code and resources are not necessarily organized by functionality, but may be organized by time of creation, by author, or by some other factor.

  • Ajax - Ajax-capable components and code
  • D2W - DirectToWeb, prefix inherited from WebObjects. May also be seen as "DTW".
  • Drew - 2 classes, author: Drew
  • DR - 14 classes - ??
  • EG - 2 files - ??
  • EO - EnterpriseObject, prefix inherited from WebObjects
  • ER - author: "eResource", a company that become NetStruxr and contributed lots of code
  • ERC - variation of ER?
  • ERD - variation of ER?
  • ERI - variation of ER?
  • ERX - variation of ER?
  • GC - Google Chart
  • GS - author: GammaStream Technologies, Inc.
  • IERX - Interfaces should start with
  • JS - JavaScript
  • JSON - JavaScript Object Notation
  • NEU - related to the "New" look in DirectToWeb
  • SC - SproutCore
  • Selenium - the testing tool
  • UJAC - Useful Java Application Components, see http://ujac.sourceforge.net/
  • WO - WebObjects, , prefix inherited from WebObjects
  • WR - WebObjects Reporting?
  • WX - WebObjects Extension?
  • YUI - Yahoo! User Interface, see http://developer.yahoo.com/yui

It is not always easy to find things. Ask the mailing list if you have questions.

Coding style

  • If you add new components into ERExtensions, please put your bindings into the WOD file. For other non-core frameworks and examples, you can use WOOgnl bindings.

  • If you are adding new code to Wonder, please use of the above prefix for your additions. If you don't know which one to use, go with "ER".

  • You need to add a .gitignore file in the project so that the content of build/ and bin/ is not committed in Git (if you use eGit in Eclipse, right click on the build folder and select Team -> Ignore).

  • When adding a new project to Wonder, you need to add it to the Ant build files, in Build/build/build.xml (check the existing targets for examples). After you done that, build Wonder (ant examples) and check if your new app have been built like the other examples.

  • If your example is using a database, it should be set to H2 by default, so that people don't need something else to run it.

Some ground commit rules

  • DO small commits so that it can be easier to revert one of the commits if something went wrong in one of your changes.

  • Your contributions MUST be done in the integration branch, the reason being that we can check if it works with other changes, and won't break the stable (master) branch.

  • Do NOT commit reformatted code, at the very least, do it in two steps, one for the reformat, one for the actual changes so one can see what is going on.

  • DO NOT commit changes in the d2wmodels when saved with RuleEditor. This should be obvious from the previous rule, but it's VITAL that these files are committed with one and one tool only.

  • You can do pretty much what you like in your own projects, but take EXTREME care in Frameworks/Core.