The subversion repository at work was set up without much planning as to its structure. There are currently no explicit tags, trunk or branches configured, although some tagging metadata is present through the use of subclipse:tags
Currently the repository is in the format:
/CoreCodeA
/CoreCodeB
/Project1
/Project2
Recently a new developer started on "version 2" of our internal application which he placed under different folder:
/new/NewCoreA
/new/NewCoreB
/new/Project3
/new/Project4
These projects all have dependencies upon various parts of the Core code, and upon similar projects (e.g several projects might be dependent upon the same theme). These dependencies are referenced inside the contents of some text based project property files.
I've been playing with using the svndumpfilter command, piping the output through sed and reorganising this into two separate repositories ("old" and "new"). Easy enough to do, and I now have two distinct repositories with trunk, tags and branches set up (the subclipse tagging information can be reparsed at a later date).
My concern is that by fiddling with the subversion structure over every commit, that I am breaking builds that previously worked, especially given the dependencies upon other projects. On the other hand, I need to have tags and branches in this codebase sooner rather than later. But I also don't want to have to force the developers to re-check out their projects if I change my mind a few months down the line.
I guess my choices for each repository are:
- Mark the repository with a "pre-restructuring" tag, reorganise the repository how I want, tag with "post-restructuring.
- Good: Won't break historic builds
- Bad: Effectively disconnects future work from past work, no easy ability to make x.x.1 patch releases
- Restructure the entire repository, breaking previous builds
- Good: History continuity of code is maintained
- Bad: Previous builds are broken, will definitely require x.x.1 patch releases if ever needed again
- Restructure the entire repository AND edit the project property files at each stage
- Good: Continuity of code is maintained and projects should build
- Bad: Editing actual content of files is far more fragile than simply changing metadata concerning their location
The first two choices are easy enough to do - but I'd like some real world 20-20 hindsight from other developers about what they did in a similar situation, and what went wrong or right.