Question: What is the best way to maintain a project based on another OSS project, through Xcode and version managed by SVN?
I’d like to start a fork (?) of a reasonably popular open source project (it’s allowed). Mostly, I want to build my own user interface written in Cocoa/ObjC for it and throw in a few custom features of my own as well.
Now, this OSS project isn’t exactly small. The project itself has over 3000 files, and the build process is pretty intense- consisting of multiple stages and steps, which need to compile build tools, run those, then compile the results.
All this is fine and dandy in Xcode, since it’s easy enough to setup build phases and rules to handle everything.
What I’m not clear on, is how best to manage patches from upstream. They are constantly working on the project and I’d like to be able to keep up to date with those patches as easily as possible, as many of the diff files effect sometimes up to a hundred (!) files at once.
So maintaining a pristine unmodified copy of that source tree so I can apply patches to it seems like a smart thing to do, because I really don’t want to be sorting through hundreds of files every few weeks merging patches by hand.
What I’m thinking of doing in this regard is:
1) Setup an “upstream” SVN repo to hold a copy of the upstream source, plus the bare minimum required to compile it in Xcode (so an xcproject, a few xcconfigs, some prefix header files and that’s it)
2) Setup my own “downstream” SVN repo where I do all my work and apply my own modifications.
Whenever upstream releases a patch, I can apply it to #1 then synchronize across to #2, and deal with any issues created by my own modifications.
What I’m not clear about, is if this is a sane way of handling things- or if there’s some better practice I should be following.
Is this the best way to handle things, or should I be looking at doing this some other way?
In SVN-world it was named “Vendor Branches” long time ago and intensively used by many teams (you can additionally google this phrase)
Technically it’s
If (or “when”) vendor branch got updates from upstream, you have just merge branch to /your place/, integrate changes and continue to work