Working with OpenSim recently, I didn’t want to have to worry about checking in generated files by accident, or filtering my
git status output in order to determine what I changed and was generated. In this post, I’ll describe how I do this and outline some tools I use to make it easy.
The basic premise in my development style is that I build the project in a separate directory than where the checked out code lives:
# checked out code lives in ~/source/opensim $ cd ~/source $ svn co http://opensimulator.org/svn/opensim/trunk opensim # the workspace is where I build and run the project $ mkdir ~/source/workspace
Then, to build and run the code:
# first I rsync the code to the workspace, skipping .svn folders # and other unneeded files $ rsync -avz --exclude=\.svn [...] ~/source/opensim/ ~/source/workspace/ # then I run prebuild and compile $ cd ~/source/workspace $ mono bin/Prebuild.exe /target nant $ nant
This way I never have to filter through generated files when inspecting or committing my changes, and I don’t commit generated files by mistake.
I have a set of scripts I use when developing OpenSim on Linux (I also use some of the scripts on Windows with cygwin). The scripts are available on github.
All those above commands are encapsulated in
os_build.sh, a single script which takes two arguments, the first is the name of the directory in
~/source/ in which the source
lives, and the second is the name of the directory in
~/source/ in which to build:
# this one command performs the rsync, prebuild and nant steps from above $ os_build.sh opensim workspace
Another key part is the
os_clean_workspace.sh script which removes all build artifacts from the workspace directory, while keeping all configuration files in
place. I use this whenever I need to do a clean build.
My typical session looks like this:
$ cd ~/source/opensim $ git svn rebase # pull the latest changes from upstream $ vim -p file1 file2 ... # open the files I'll be working on ... edit source ... $ os_build.sh opensim workspace # rsync, prebuild, build ... in another terminal, run & test ... ... make more edits ... # sync only changed files, rebuild only what's needed $ os_build_sh opensim workspace ... make big changes requiring clean build ... # removes everything except config files $ os_clean_workspace.sh workspace $ os_build.sh opensim workspace