Home | Source Control Management

AlexandriaCM Binary Control Management

What is AlexandriaCM?

AlexandriaCM Binary Control Management. A Binary Control Management system is a client/server application that allows the storage and retrieval of artifacts from a central repository. The term Binary is to differentiate this type of system from a Source Control System.

The idea is that we can store reusable artifacts in a central location that can be shared between multiple groups, teams, or individuals. Clients will then communicate with the sever and retrieve the desired artifact from the repository. Because these artifacts are versioned the client can retrieve whatever version it is interested in without the worry of a previous version being overwritten.

We cover basic usages in several scenarios:

Company A Builds 15 Different Products

Public API Libraries

A company has a product that is easily extended and releases a public set of libraries to be used by its customers and independent developers to extend their product. Instead of creating an installer on a slow release cycle they publish their libraries to an AlexandriaCM BCM Repository. Or as a component team finds a bug they can easily and quickly publish the fix which can then be pulled immediately to all clients, if they so desire.

Common Architecture

A company has a Common Architecture team that spans the company's products. The Common Architecture team has 12 libraries that they maintain plus new ones coming online every few iterations. They have a responsibility to maintain older releases as well as come up with new features as the products they support require it. They can build and publish their builds to an internal AlexandriaCM BCM repository letting their customers pull at their own leisure when they are ready to upgrade.

Product Team

A product team has been split into multiple parts to handle the complexity of the application. The teams consist of Database, Core, Thin and Thick Client. The database team wants to stay ahead of the Core team, while the Core wants to stay ahead of the clients. Also no team wants to build the previous team's projects to get the libraries and although they can use a network share they opt to use an AlexandriaCM Repository to allow each the flexibility to use the necessary versions, get bug fixes (at their own pace), and use the integration into their IDE, without the overhead of the network file share restrictions.

TFS Security

Command line Reference:
msdn.microsoft.com/en-us/library/ms252587.aspx

Command-line permissions that are proceeded by a 'tf:' are used by 'tf.exe', others are used by the TFSSecurity.exe utility.

Server Permissions
Permission (Command-line name [, other names]) Team Foundation Team Foundation Service Accounts
Allow Deny Allow Deny Allow Deny
Administer shelved changes (tf: AdminShelvsets) x x x
Administer warehouse (ADMINISTER_WAREHOUSE) x x
Administer workspaces (tf: AdminWorkspaces) x x
Create a workspace (tf: CreateWorkspace) x x x
Create new projects (CREATE_PROJECTS) x
Edit server-level information (GENERIC_WRITE, tf: AdminConfiguration, tf: AdminConnections) x
Alter trace settings (DIAGNOSTIC_TRACE) x x
Trigger Events (TRIGGER_EVENT) x
Manage process template (MANAGE_TEMPLATE) x
View server-level information (GENERIC_READ) x x x
View system synchronization information (SYNCHRONIZE_READ) x
TFS Project Access
Permission (Command-line name) Readers Protected Contributors Leads Administrator
Allow Deny Allow Deny Allow Deny Allow Deny Allow Deny
Administer a build (ADMINISTER_BUILD) x x
Delete this project (DELETE) x
Edit build quality (EDIT_BUILD_STATUS) x x x
Edit project-level information (GENERIC_WRITE) x x
Publish test results (PUBLISH_TEST_RESULTS) x x
Start a build (START_BUILD) x x x
View project-level information (GENERIC_READ) x x x
Write to build operational store (UPDATE_BUILD) x x
Version Control Folder Access
Permission (Command-line name) Readers Protected Contributors Leads Administrator
Allow Deny Allow Deny Allow Deny Allow Deny Allow Deny
Read (tf:Read) x x x
Check Out (tf:PendChange) x x x
Check in (tf:Checkin) x x x
Label (tf:Label) x x x
Lock (tf:Lock) x x x
Revise other users' changes (tf:ReviseOther) x x
Unlock other users' changes (tf:Unlock) x x
Undo other users' changes (tf:UndoOther) x x
Administer labels (tf:LabelOther) x x x
Manipulate security settings (tf:AdminProjRights) x
Check in other users' changes (tf:CheckinOther) x x
Area/Iteration Access
Permission (Command-line name) Readers Protected Contributors Leads Administrator
Allow Deny Allow Deny Allow Deny Allow Deny Allow Deny
Create and order child nodes (CREATE_CHILDREN) x x x
Delete this node (DELETE) x x
Edit this node (GENERIC_WRITE) x x
Edit work items in this node (WORK_ITEM_WRITE) X x x
View this node (GENERIC_READ) x x
View work items in this node (WORK_ITEM_READ) x x x

Directory Structure

The directory structure for a project should be set up in the suggested manner:

Suggested Directory Structure

Definitions:

  1. Releaseable Project -A project that has its own release schedule. All folders underneath the project/trunk folder should be on the same release schedule. If an item is on a different release schedule it should be analyzed for a possible move to its own project folder.

This accomplishes several tasks:

  1. When the Trunk is branched not only is the source branched, but all items related to the creation of the application will be branched as well.
  2. Directory clutter that often results when there are several groups trying to use the same space will be reduced
    1. Build files will be placed in the build directory
    2. Custom or external tools will be placed in the tools directory
    3. Documentation can have its own space
  3. The extra directories (Database, Tools, Documentation, etc...) are optional and only needed if the project requires them. Build and Src should be required directories.

Build Directory

The build directory is used by the build manager to keep the source directory from being cluttered. This will allow build managers their own "space".

Suggested Directory Structure

Src Directory

The Source directory (src) contains all items related to the applications source code. This is relatively loosely defined as it can contain custom tool code that may not be shipped with the application, documentation, etc... This decision is to be made by the development team.

Suggested Directory Structure

Version Number Definitions:
Version Sequence Name Version Sequence Location Definition
Major Major.minor.Patch.Build When the major sequence changes this signifies a large architectural change, in reality any change can happen at this level and there are not binding contracts.
Minor Major.minor.Patch.Build When the minor sequence changes this signifies that a smaller architectural change has happened. Obsolete'd code has been removed, and/or some significant API changes to public contracts.
Patch/Release Major.minor.Patch.Build When the patch/revision sequence changes:
  • Small well communicated API changes have occurred
  • Additions to the code have occurred (this means the consumer cannot use any previous Patch/Revision versions).
Build Major.minor.Patch.Build When the Build sequence changes:
  • Bug fixes only
  • Absolutely no breaking changes

Relying on AlexandriaCM is a smart business move so that you can focus on what you do best!

Subversion is an excellent choice for those companies that are looking for a source control solution only. It is inexpensive to operate and extremely reliable.

Web Designed and Developed by Half Nut Development