Note: AccuRev keeps track of changes to both files and directories.
What is a Software Configuration?
A configuration is a particular set of versions of a particular set of files.
The contents of files change over time, as developers, QA engineers, technical writers, and release engineers work on them. These people save the changes in new versions of the files. The organization of the files changes, too: new files are created, old files are deleted, some files get renamed, and directory structures get reorganized.
Take a particular set of files — for example, the files required to build and deliver an application named Gizmo. At any given moment, this set of files is in a particular state, which can be described in terms of version numbers:
gizmo.c version 45
frammis.c version 39
base.h verion 8
release_number.txt version 4
Gizmo_Overview.doc version 19
Gizmo_Release_Notes.doc version 3
... or in terms of time:
gizmo.c last modified 2004/11/18 14:15:03
frammis.c last modified 2004/11/18 14:15:19
base.h last modified 2004/10/08 09:09:44
release_number.txt last modified 2004/11/17 21:59:34
Gizmo_Overview.doc last modified 2004/11/20 17:25:00
Gizmo_Release_Notes.doc last modified 2004/11/21 19:29:57
That’s two different ways of specifying the same configuration.
Suppose one of the files changes:
release_number.txt last modified 2004/11/24 07:19:18 (version 5)
You can think of this change as producing a new software configuration. But in many situations, it’s more useful to think of this as an incremental change to an existing, long-lived configuration — the one called “Gizmo source base” or, perhaps more precisely, “Gizmo Version 2.5 source base”.
So in the end, is a software configuration just “a bunch of files”? Almost, but not quite. It’s important to keep in mind that a software configuration does not contain the files themselves, but only a description or listing of the files and their versions. Think of the difference between an entire book (big) and its table of contents (small). This crucial distinction makes it possible for AccuRev to keep track of hundreds or thousands of software configurations, without needing an infinite amount of disk storage.
The change described above to file release_number.txt illustrates the distinction between files and configurations of files. The change to the contents of the file is something like this:
replace text line “RELEASE=2.5” with text line “RELEASE=2.5.1”
The change to the software configuration is something like this:
replace version 4 of file “release_number.txt” with version 5
For another example of the distinction, recall that a configuration takes into account filenames and directory structures, too. Consider this configuration:
src/gizmo.c version 45
src/frammis.c version 39
src/base.h verion 8
src/release_number.txt version 4
doc/Gizmo_Overview.doc version 19
doc/Gizmo_Relnotes.doc version 3
Boldface shows the differences from the first configuration listed above. The file contents are exactly the same; but one filename has changed, and the files have been organized into subdirectories. So this is a different software configuration, even though there has been no change to the contents of the files.
Software Configurations and Development Tasks
In most modern software development organizations, many tasks are under way concurrently. At the beginning of this section, we listed a few: new products, new releases of existing products, ports to different platforms, and bugfixes. In addition, consider the fact that each one of the above tasks is often several coordinated efforts: initial development, unit testing, internal system testing, external system (“beta”) testing, final production.
To enable all the tasks to progress smoothly at the same time, each person gets her own software configuration — her own set of versions of the files in the repository. (A small, close-knit team might choose to share a single configuration.)
- Keep track of the various configurations.
- Manage, preserve, and protect changes to the files.
- Detect conflicting changes that take place in different configurations (for example, two people modify the same section of the same file).
- Assist in resolving those conflicting changes.