Software Configuration

AccuRev is a software configuration management (SCM) product. So what is a software configuration? A configuration is a particular set of versions of a particular set of files.

Note: AccuRev keeps track of changes to both files and directories.

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              version 8
src/release_number.txt  version 4
doc/Gizmo_Overview.doc  version 19
doc/Gizmo_Relnotes.doc  version 3

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.