Once you choose to support fmultiple binary trees, the question of filesystem layout arises. In environments that require multiple binary trees, there are often a lot of binary trees. To keep all these trees straight requires some thought.
A common way to organize this data is to designate a large disk for a binary tree "farm." At (or near) the top level of this disk is one directory for each binary tree. One reasonable layout for these trees is to include in each directory name the vendor, hardware platform, operating system, and build parameters of the binary tree:
$ ls hp-386-windows-optimized hp-386-windows-debug sgi-irix-optimzed sgi-irix-debug sun-solaris8-profiled sun-solaris8-debug
When builds from many different times must be kept, it is usually best to include a date stamp (and even a timestamp) in the directory name. The format yymmdd or yymmddhhmm sorts well:
$ ls hp-386-windows-optimized-040123 hp-386-windows-debug-040123 sgi-irix-optimzed-040127 sgi-irix-debug-040127 sun-solaris8-profiled-040127 sun-solaris8-debug-040127
Of course, the order of these filename components is up your site. The top-level directory of these trees is a good place to hold the makefile and testing logs.
This layout is appropriate for storing many parallel developer builds. If a development team makes "releases," possibly for internal customers, you can consider adding an additional release farm, structured as a set of products, each of which may have a version number and timestamp as shown in Figure 6-2.
Figure 6-2. Example of a release tree layout
Here products might be libraries that are the output of a development team for use by other developers. Of course, they may also be products in the traditional sense.
Whatever your file layout or environment, many of the same criteria govern the implementation. It must be easy to identify each tree. Cleanup should be fast and obvious. It is useful to make it easy to move trees around and archive trees. In addition, the filesystem layout should closely match the process structure of the organization. This makes it easy for nonprogrammers such as managers, quality assurance, and technical publications to navigate the tree farm.