Hacking PackageKit

Coding Style
------------
Please stick to the existing coding style.
Tabs should be hard (not expanded to spaces), and set equivalent to
8 spaces.

All documentation and code should be in US English.

Please consider enabling git's default pre-commit hook:

	$> cd PackageKit
	$> chmod +x .git/hooks/pre-commit

This hook will run before every checkin, and check your changes for
suspicious use of whitespace.

In the C files use the following convention.
The number of spaces and tabs are very important!

	/* map the roles to policykit rules */
	if (role == PK_ROLE_ENUM_UPDATE_PACKAGES ||
	    role == PK_ROLE_ENUM_UPDATE_SYSTEM) {
		policy = "org.freedesktop.packagekit.update";
	} else if (role == PK_ROLE_ENUM_REMOVE_PACKAGE) {
		policy = "org.freedesktop.packagekit.remove";
	}

and please DO NOT use "!" for a null pointer check.

Functions are nearly always the same format, gtk-doc is optional:

/**
 * pk_engine_search_name:
 **/
gboolean
pk_engine_search_name (PkEngine *engine, const gchar *search, GError **error)
{
	gboolean ret;
	PkTransactionItem *item;

	g_return_val_if_fail (engine != NULL, FALSE);
	g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);

	return TRUE;
}

Finally: DO NOT COMMIT TRAILING WHITESPACE.

Security
--------
Remember:
* The daemon is running as the root user
 - no FIXME or TODO code please
* If the daemon crashes, then that's a DOS
* Text from the user (over the dbus interface) is insecure!
 - even filters and enumerated values can be wrong
 - users can use dbus-send to do bad stuff as users
* Never allocate a buffer on user input
* Output from backends is trusted, they are run from standard locations

Submitting Patches
------------------
We prefer patches submitted as pull requests to our GitHub project at
https://github.com/PackageKit/PackageKit

However, if you are unable to use GitHub, you can also submit patches
via email.

To do so, Use 'git format-patch' to generate patches against a checked
out copy of the source.

For example:

	$> cd PackageKit
	HACK HACK HACK
	$> git commit -m "My first commit"
	HACK HACK HACK
	$> git commit -m "My second commit"
	$> git format-patch -M HEAD^^
	0001-My-first-commit.patch
	0002-My-second-commit.patch

Send these patches in an introductory email as attachments to
packagekit@lists.freedesktop.org

Commit/Patch Style
------------------
Commits (and thus patches) should be structured such that each one
is a logically distinct change that stands well and can be tested
on its own.

Commit/Patch messages should be wrapped at 72 characters, and the
subject line (minus the subsystem prefix) should be less than 50
characters.

What we mean by subsystem prefix is the portion of the codebase
that is being modified.

For example, if you are changing something in the main library,
use "lib:" as the prefix of the patch subject. If you are
changing something in one of the backends, use the backend name
as the prefix in the patch subject.

There are a number of examples of this already in the revision
history, so look at any number of them for good examples.

Finally, please do not use commit messages as a means for
advertising. The revision history is not a place for rent-free
permanent advertising. It can be especially problematic as
sponsoring entities change, rename, or such.  That means that
tags like "Sponsored-by" or similar are not allowed.
