# Vendor branches

`trunk/thirdparty` contains several packages that are
maintained as
[svn vendor branches](http://svnbook.red-bean.com/en/1.0/ch07s04.html).
The `svn_load_dirs.pl` script in `trunk/thirdparty/svn`
is used to maintain these vendor branches.

## Updating Google App Engine

Download the latest `.zip` file containing the Google
App Engine SDK from the
[Google App Engine SDK downloads list](http://code.google.com/p/googleappengine/downloads/list).
Unzip the downloaded `.zip` file.

From the `trunk/` directory of a Melange `svn` working
copy the `svn_load_dirs.pl` command would look something
like:

```
thirdparty/svn/svn_load_dirs.pl \
 --svn_username SVN_USERNAME \
 --svn_password SVN_PASSWORD \
 https://soc.googlecode.com/svn/trunk/thirdparty/google_appengine/ \
 . \
 PATH/TO/google_appengine/
```

Where:
  * _SVN\_USERNAME_ is your [Melange](http://code.google.com/p/soc/) user name
  * _SVN\_PASSWORD_ is your [Google Code Subversion password](http://code.google.com/hosting/settings)
  * _PATH/TO/google\_appengine/_ is the path to the unzipped Google App Engine SDK

At some point, if the
[Google App Engine SDK source repository](http://code.google.com/p/googleappengine/source/browse/)
ever begins tracking the contents of the release download
`.zip` files, needing to download the archive file and unzip
it will be replaced with `svn:externals` for
`/vendor/google_appengine`.

## Updating Django

From the `trunk/` directory of a Melange `svn` working
copy the `svn_load_dirs.pl` command would look something
like:

```
thirdparty/svn/svn_load_dirs.pl \
 --svn_username SVN_USERNAME \
 --svn_password SVN_PASSWORD \
 https://soc.googlecode.com/svn/trunk/app/django \
 . \
 ../vendor/django
```

Where:
  * _SVN\_USERNAME_ is your [Melange](http://code.google.com/p/soc/) user name
  * _SVN\_PASSWORD_ is your [Google Code Subversion password](http://code.google.com/hosting/settings)