# How to Keep IcedCoffeeScript Up-to-Date with Mainline CoffeeScript
## Source
### Current Method: Fork/Merge
Here is the current system:
1. Add a remote upstream repo to pull in the mainline changes:
```sh
git remote add upstream git@github.com:jashkenas/coffee-script
```
1. Pull from the upstream into our master branch; push to our own origin/master while we are at it.
```sh
git checkout master
git pull upstream master
git push origin master
```
1. Make sure the local `iced2` branch is up-to-date:
```sh
git checkout iced2
git pull origin iced2
```
1. Then do the merge:
```sh
git merge master
```
1. Then, once the rebase has succeeded:
a. Update the version number of `package.json`
a. Update the version number in `src/coffee-script.coffee`
1. Then build a million different times:
```sh
./bin/cake build
./bin/cake build:parser
./bin/cake build
./bin/cake build
./bin/cake build:browser
./bin/cake test
```
1. You're good to push if it all looks good. First commit all the new changes post-rebase with:
```sh
git commit -a
```
1. Then do a push to the *iced2* branch.
```sh
git push origin iced2
```
1. Make and push a new tag (supplying whatever your new version is):
```
git tag -a -m vbump 1.6.2c
git push --tags
```
1. Finally, publish to npm. It's usually worth cloning out a fresh
copy from github, and then running:
```sh
npm publish
```
## Documentation
The documentation system is totally separate. Here is the general idea:
1. Make sure the *iced* branch is up-to-date:
```sh
git checkout iced2
git pull origin iced2
```
1. Checkout and update the *gh-pages* branch:
```sh
git checkout gh-pages
git pull origin gh-pages
```
1. Then do the merge:
```sh
git merge iced2
```
1. This will destroy you with conflicts, but most of them can be worked
through. Basically, you want to call `theirs`, as below, on everything
*but* the `documentation/index.html.erb` file.
1. Edit `documentation/index.html.erb` by hand, changing the current version
number to whatever it is nowadays.
1. Rebuild the documentation like `index.html` and the
embedded examples.
```sh
rake doc
```
1. Run `docco` on the source files:
```sh
icake doc:source
```
1. Commit everything:
```sh
git commit -a
```
1. And push
```sh
git push origin gh-pages
```
1. Test that the `run` button still works on the front page, and that the
sandbox is still operational.
#### To Accept Their Changes
I wrote a little shell script called `theirs`:
```bash
#!/bin/sh
git checkout --theirs $*
git add $*
```
I run this on any *autogenerated* file that has a
conflict. For instance, those files in `lib/coffee-script/`
or `documentation/js`. For conflicts in `package.json`, `Cakefile`
or `src/`, you probably need to do a hand-merge.