My favorites | Sign in
Project Logo
                
Search
for
Updated Nov 08, 2009 by heliocentric
Labels: Developer
DeveloperGuide  
Guide for new developers.

The Evoke Platform

Evoke Library

WARNING, THE EVOKE API IS NOT SET IN STONE YET

V_Object

The basic composite data-type for the Evoke library is the 'V_Object'. A V_Object is a data structure very similar in spirit to the BMessage of BeOS and Haiku. They are a data structure which are typed, and which contain one or more data fields, all with a unique name, and all typed. It is meant to allow passing of composite data types from one function to another, without resorting to blind pointer dereferencing.

Functions should also not access the V_Object directly, but instead use the following functions:

  • V_ObjectNew(V_String type);

Programs must always use the function error() and evaluate the return value on any V_Object they recieve. This function checks for NULL pointers, and looks for the general error datatype.

For example:

   V_Object * socket = V_Dial("invalid string", 0);
   if (V_ErrorPrint(socket)) {
      V_ErrorPrint(socket);
      V_Exit(socket);
   }

This should be self explanatory, if the V_Dial call returns an error, the message string is printed, and the process exits with the proper errno.

V_ObjectData

V_String

A V_String is a composite 'string' data type, containing a pointer to the string, and it's length. The following are the public elements:

Object Types

Object types are typically expressed in three ways. Currently there is only one hard restriction on types, which is that mime types cannot be used for the application signature.

Mime Types

The ubiquitous mime-type, which is conventionally used for V_ObjectData types, and file types.

ex.

Signature Types

Signature style types, which are inverted domain name style types, typically used for application signatures and V_Object types. The / character is explicitly disallowed. Occasionally used for V_ObjectData.

ex.

Quick Types

These are used internally by V_Object. Since they are all 4 bytes in size (or less), they replace the pointer. They are almost always basic data types.

ex.

Evoke program guide

Default OPTIONS values:

Command based programs

Example:

Search UI programs

Example:

File operation based programs

File operation programs must take a list of files as their argument list, each file in a seperate argv entry in the array. All options are based via OPTIONS.

Example:

Using the SVN Repo

Checkout

It is highly recommended that you at least check out the tools, and add them to your PATH, before any other paths.

svn https://evoke.googlecode.com/svn/tools evoke-tools

Commit Log format

* Item A
* Item B
* Item C

For certain commits, a short description line is necessary, like so.

Description

* Item A
* Item B
* Item C

Special Commits

Issue

Any commit directly or indirectly resulting from an issue, must have the following form:

Issue from id1 id2 id3 ...

* Item A
* Item B
* Item C

The third field, and every field till the end of line MUST be a valid issue id number. Make sure to check the issue tracker for any issues that may be directly or indirectly related to the commit in question. This is so that in the future, we can trigger automatic hints to test possible fixes.

AQA

AQA's are automated quality assurance tests. They get a special description, when a fix for a bug discovered through one of these tests. Note that right now the AQA's don't live up to the 'A' portion, but they will soon.

The commit message is as follows:

AQA from HPAT run number: 6daae55f-f516-4afd-8a95-59e02fb8d830

* Item A
* Item B
* Item C

The sixth field /must/ be the uuid of the run. This is done for accounting purposes.

The third field is the test short name, one of the following:

Short Name Full Name Description Technical Notes
AFRT Automated Functionality Regression Test Runs the contents of each src/share/bin and each tools under both the 'run' environment, and the iso environment. Will only pick up bugs that have existing regression tests to check. [AQA_AFRT]
HPAT Haiku Portability Acid Test The same as AFRT, but run under a haiku environment to test the portability. The haiku environment is both a) alien enough to trigger portability bugs, but b) modern enough that the environment is useful for us. [AQA_HPAT]
MFRT Manual Functionality Regression Test Explicitly not automated. A human being runs the iso in a qemu or a bare metal machine, or uses the run script. As not all concievable regressions can be tested, this is done on the build machine after large changesets. [AQA_MFRT]

Release Engineering Guide

Creating a Release Branch

(All commands relevant to /, not /trunk)

To initially create a release branch, always use the following steps:

svn copy trunk branches/releases/0.2/R1

R1 is always the first revision.

Next, add a release page:

svn add wiki/Release02.wiki

There is only one release page per release, so ignore the revision.

The first thing to do is fill out the release page with the todo list:

#summary 0.2 Release Notes

== Todo ==

 * any items that need to be done before R1

Now, we commit:

svn commit

The format of the commit message is similar to 'Merge', except the items are not commit logs that apply, rather, it is the contents of the initial Todo list.

Branch /trunk rREVISION to /branches/releases/0.2/R1

 * any items that need to be done before R1

Then, we need to copy the wiki into the branch, like so:

svn copy wiki branches/releases/0.2/R1/doc

Finally, we commit:

svn commit

The format of the commit message is similar to 'Merge', however, the item list should be a todo list for the documents.

Branch /wiki rREVISION to /branches/releases/0.2/R1/doc

 * any items that need to be done before R1

'Setting' a release branch

When the binaries for a revision of a release branch are finished, and placed on the http mirror, you must set a property on the copy of the release tree. After this point, NO more commits may happen to that revision. You must create a new revision of the release branch and work on that.

You should set it with this command:

svn propset evoke-binaries-built "" https://evoke.googlecode.com/svn/branches/releases/0.2/R1

Back merging changes into a release branch

Use the backmerge utility in tools/, like so.

cd branches/releases/0.1/R1/ backmerge

Note that there is no options to the utility yet. When we need them, I will add them.

Creating a new revision

As stated earlier, you cannot commit to a revision after the binaries have been built, therefore you must do a copy, like so:

svn copy https://evoke.googlecode.com/svn/branches/releases/0.2/R1 https://evoke.googlecode.com/svn/branches/releases/0.2/R2

The rules for creating binaries apply to every revision, not just the first revision. In this way, our boot versioning system can be used by the users effectively.


Sign in to add a comment
Powered by Google Project Hosting