Files changed (1)
+-Safely maintain (in source control) the relationships of serveral in-house and third-party libraries
+-Avoid package versioning issues by integrating module dependencies within source control operations
+A survey of existing solutions yielded many variations on two themes: mercurial extensions/wrappers and package managers.
+Although many of these solutions were rich with features and well implemented, I found them all to be wanting
+Noteable Mercurial extensions are the built-in subrepos and the well-adopted Guest Repos extension. These solutions are attractive
+because the module relationships are safely tied to tracked files. Also, they enable a developer to act on the interdependent
+repositories as groups, carefully maintaining their interdependence. The clear benefit here is that a new team member (or a developer
+going back to an old project) can clone from a single source and have all that is necessary to recreate a release. An additional benefit
+is that a dependent repo can automatically find the source of its dependencies, which allows it more flexibility in how to build and link
+These solutions use fixed mappings to clone subrepos to subpaths within the repo. For example, if repo A depends upon repos B and C, you could create the following directory structure:
+The achillies heel with these solutions is that they carry along a lot of backage when projects use many dependencies: they grow into a heirarchy of redundant dependencies. Take the
+above example, but assume that repo B also depends upon repo C. The resulting clone would something like:
+Now repo C exists twice in the same project directy tree. Obviously, this can quickly get out of hand as more repos with interdepencies are added. The inefficiencies in file
+There is another notable solution that falls into this family called Repoman. Repoman calls itself a "forest manager" and seems to attempt to solve some of the issues described above.
+However, the documenation and examples are scarce. Before digging too deep, I abandoned Repoman because it acts as a wrapper to Mercurial, which means I'd have to put aside all the the Mercurial commands I use on a regular basis and learn a new command set.