views:

843

answers:

2

I am trying to branch a file in ClearCase Remote Client. I have the branch set up and the config spec is updated to handle the branch. But I can't find the option, and the googling isn't helping much.

+4  A: 

The way I understand your question, it sounds like you want to somehow select a command from a Clearcase RC menu(s) and have the branch explicitly created(?)

Clearcase has no explicit "Generate Branch for this File" command; you would want the "Checkout" command in this case. Branching is indirect and is a result of checking out a version of a file in a view that has a config spec with the '-mkbranch ' operation in it. I.e. the following config spec will create the dev_1.0_branch once I check it out (for any and all vobs and files):

element * CHECKEDOUT
element * .../dev_1.0_branch/LATEST
element * /main/LATEST -mkbranch dev_1.0_branch

The first line is standard for views in which you are doing development, line 2 will assure that I see any file that has a dev_1.0_branch (particularly important for the checkout+mkbranch to work as expected :-), and line 3 will select the latest version of any file that does not have a dev_1.0_branch and will create the branch if (and only if) the file version selected by that rule is checked out.

Please let me know if any of the above sounds greek to you, particularly any of the config spec rules. Having worked with ClearCase for a long time, I assume and use a lot of its terminology and concepts as if it's common knowledge :-P.

One thing of note: if you checkout the file, then immediately uncheckout the file, you will leave an empty branch on that file (i.e. in the above you would have a file with a version such as: foo.c@@/main/dev_1.0_branch/0, but no /main/dev_1.0_branch/1 version). Many sites prefer to keep the version tree clean and remove empty branches (one can be found in this IBM Rational Technical article)

Just to be clear, I'm familiar with ClearCase Base & ClearCase MultiSite, but have not worked with the Remote Client yet.

--- 2009-Jun-29 Update In response to Paul's comment below, if you want to be selective in what files are branched, you can modify the "*" to be more specific. For example, if you want to only branch foo.c in the FOODEV VOB, but leave everything else on main:

UNIX config spec:

element * CHECKOUT 
element * .../my_dev_branch/LATEST
element /vobs/FOODEV/src/foo.c -mkbranch my_dev_branch 
element * /main/LATEST

(For windows, you would want to use Windows conventions. I.e. \FOODEV\src\foo.c).

You can also select a directory and all elements below the directory (again UNIX config spec):

element * CHECKOUT
element * .../my_dev_branch/LATEST
element /vobs/FOODEV/src/mycomponent/... -mkbranch my_dev_branch
element * /main/LATEST

The main page for config_spec (cleartool man config_spec from the command line on windows or unix) provides decent guidance in the "Pattern" section for how to write the element/version selector (2nd column).

You can do a lot of complex version selection with the config specs. Please let me know if you would like more details or specifics.

PerplexedMind
That makes sense. But, suppose I only want to branch on one or two files that I check out? E.g., some of my work is done on main/ for some files, and other work is on my .../paulnath/ branch.
Paul Nathan
A: 

Here's a config spec that I used for fixing a particular bug, with names changed to disguise some of the guilty.

element * CHECKEDOUT

element * .../TEMP.bugnum171238.jleffler/LATEST
mkbranch -override TEMP.bugnum171238.jleffler

include /clearcase/cspecs/project/version-1.23.45

To create the branch, in each VOB, I used a command:

ct mkbrtype -c 'Branch for bug 171238' TEMP.bugnum171238.jleffler@/vobs/project

Previously, we used config specs with -mkbranch rules appended to the various element lines.

Jonathan Leffler