When we didn't use CVS, we used a Perl script I wrote that would keep track of what files we've changed, what files we've utterly replaced, and things like that. It could be invoked much like cvsreport.pl, except it would do this:
- First create diffs between stock LJ CVS (what we have on hand, NOT the most recent version) and the current Plogs.net code.
- Copy all live files that we've marked as "replace" files.
- Update LJ CVS.
- Copy LJ CVS over Plogs.net code.
- Copy Plogs.net "replace" files over the files we just copied out of CVS.
- Apply the patches we created earlier.
Then I would go in and fix any rejected hunks. Okay, this worked. It only took an hour or two every week to update Plogs.net to the most recent LJ source. After doing this for two months, we decided that we wanted our own CVS repository. It was a natural decision from there to stop doing this whole Perl script nonsense. We'd just manually apply things that looked interesting from the LJ CVS by watching changelog.
Go ahead and laugh.
Now that I'm realizing that it's nigh impossible for one person to keep up with new features to a codebase in addition to looking over, modifying as appropriate, and committing patches being checked in by three other people... this isn't working.
I've read the documentation regarding maintaining a "local" directory under $LJHOME/cvs, but that won't really work. We have a lot of changes we've made to specific LJ files such as ljlib.pl and update.bml and whatnot that we would need to preserve. Maintaining an entirely separate copy of ljlib.pl within the cvs/local directory would be silly.
I figure there are folks in this community that have a lot more experience with this, so I'm asking for suggestions. What is the easiest (read: least amount of time to maintain, setup time I don't care about) way to maintain a separate set of changes and combine them with other changes that are going on? I'd like to keep our changes in a CVS of some sort, but it seems like having two separate CVS repositories is going to be ... well, virtually impossible.
Thanks in advance.
Edit: I'm reading up on branches.. this seem promising. Still would like suggestions, though.
Edit x2: Alright. Vendor branches. My god, my brain is going to explode from CVS syntax. Someone should make this userfriendly. Unless someone says otherwise, this seems to be the best way to do it: import LJ's CVS as a "vendor branch." Maintain Plogs.net CVS as another branch. Then, changes can be merged from the vendor branch into the local branch and the local branch can be put live. This should work, if I can get it all working. Again, any thoughts? Right track? Not?