How to find all the component root folder in a vob? - clearcase

I have asked this question long back and the answer was given. Now i would like to get all the component root folder in a vob.
The answer in that question was if i give the component name ,it will give the root folder. But now my vob contains plenty of components and it was tough for me to enter each component.
What is the cleartool command for finding all the component root folder in a vob?

That would be cleartool lscomp, for listing all the component names.
For each component name, you can the call the routine described in "how to find root[folder] for each component using cleartool?"
cleartool lscomp -s -invob \aVobTag
(with -s, you only get the name, not the extended name)
As in:
cleartool lscomp -invob /vobs_projects
cleartool lscomp -invob \vobs_projects # on Windows
2007-09-17T12:06:59 vobs_parser bill
root directory: "/vobs_parser"
2007-03-29T17:23:16 vobs_applets pklenk
root directory: "/vobs_applets"
Note that /vobs_projects is a pvob (project pvob).
–inv/ob vob-selector
Displays information for all components in the specified project VOB.
See "What is the Difference between VOB and PVOB?".

Related

Equivalent of mkdir -p for cleartool mkdir

UNIX mkdir has the -p flag that creates the parent directories if they don't exist. Is there an equivalent in cleartool for that? Obviously cleartool mkdir foo/bar/ doens't work when foo doesn't already exist.
The simplest way is to create a file in the directory structure and use mkelem -mkpath...
I created a "temp1" directory, and a "temp2" directory, and a "temp.txt" file in one of my sandbox vobs, then added the file to source control with -mkpath from the parent of the "temp1" view private directory.
PS M:\tempview\foobarf\Documents> cleartool mkelem -mkpath .\temp1\temp2\temp.txt
Creating parent directory element ".\temp1\temp2".
Creating parent directory element ".\temp1".
Created directory element ".\temp1".
Checking out parent directory ".\temp1".
Created directory element ".\temp1\temp2".
Checking out parent directory ".\temp1\temp2".
Creation comments for ".\temp1\temp2\temp.txt":
Test1.
.
Created element ".\temp1\temp2\temp.txt" (type "utf16le_file").
Checked out ".\temp1\temp2\temp.txt" from version "\main\0".
It's UTF-16LE because Powershell's Locale is wide character and the "temp.txt" was created using "dir > temp1\temp2\temp.txt".
cleartool mkelem -mkpath is a good option when adding one file.
But if you have multiple files to add, in a tree structure which does not exist yet, don't forget about clearfsimport: it can import flat files to a branch in one command, and will create any missing folder for you.
As seen here: clearfsimport -rec -nset <Source> <target>

Clearcase Element existence

I want to check with a batch file if a certain element is already existent in Clearcase, or if I still have to add it.
How can I put this into a conditional statement?
Like:
if cleartool exists myFileName do myaction
else doOtherAction
You need to build a function which returns true or false depending on the element full name being part of the ClearCase view elements or not.
Then you can call that function from your if... else... statement.
Here are various commands that your function could use in order to determine if a file is a ClearCase element (meaning already added to source control) or not:
You can start by using the result of cleartool ls -l: if its output includes view-private object, it isn't added to source control yet.
cmd-context ls -long
version Makefile##\main\3 Rule: element * \main\LATEST
view private object bug.report
version cm_add.c##\main\0 Rule: element * \main\LATEST
derived object (unshared) hello##2007-03-24T11:32.418
version hello.h##\main\CHECKEDOUT from \main\2
Rule: element * CHECKEDOUT
Here 'bug.report' isn't added yet.
See more at "About view-private objects".
I already recommended that approach for a previous question using C#: "c# How to determine if a file is in ClearCase?".
Another approach is to use cleartool describe, which would trigger an error if the element described is a private one.
As mentioned in the technote "How to list view-private files in a view in Rational ClearCase", the command cleartool lsprivate works only in dynamic views, not in snapshot views.
For snapshot view, you can use: cleartool ls -r -view_only
Another approach is to use cleartool find, as in "Clearcase: How do I check if an element has a version on the trunk that was created after I branched off from the trunk?"
The following DOS batch file will add a file to ClearCase if it's not in there yet. Works in both dynamic and snapshot views.
#ECHO OFF
cleartool ls -l %1 | FIND "view private object"
IF %ERRORLEVEL% == 1 GOTO END
cleartool co -nc .
cleartool mkelem -nc -ci %1
cleartool ci -nc .
:END
You may want to add suitable comments instead of using the -nc switch.

How to avoid repeat check outs on already checked out files or directories?

I have some files and directories out of which few are already checked out and few are not.
To check out those uncheck out files I am running recursive checkout:
ct co -nc ./*
Which gives below message for already checkout files or directory:
cleartool: Error: Element "abc/xyz" is already checked out to view "pqr".
Is there any way I can avoid performing ct co on already checked out files or directories?
First, you can check if you have the same issue when applying my old method "How do I perform a recursive checkout using ClearCase?".
cleartool find somedir -type f -exec "cleartool checkout -c \"Reason for massive checkout\" \"%CLEARCASE_PN%\""
(which is mirrored by the IBM technote swg21122520)
The other option is to:
first find checked out files (see "How to find all checkedout files with ClearCase cleartool?", without the -cview option, in order to list checked out files in all views)
redirect that find into a file
Then you can replace the -exec directive above in order, for each \"%CLEARCASE_PN%\" found, to:
check if it is listed in the checked out files found in the previous point
if it is not, proceed with the checkout.
In short: a two-step process.

How to find clearcase symlinks?

Currently, I have to wait for a symlink error when updating a clearcase view. I then take the name for the broken symlink and search for it specifically.
is there a way to find all broken symlinks, without necessarily knowing the name?
how to find one at a time:
cleartool> cd C:\cc_view\view_name\source_app
cleartool> find -all -type l -name "missing.link.name" -nxname -print
You shouldn't need a -all in your find query.
Broken symlink in a snapshot view update are element which are visible:
cleartool find . -type l -name "missing.link.name" -nxname -print
You can execute that command in a DOS session ("cleartool find", instead of a cleartool one "cleartool> find"): that allows you to redirect the result in a text file and parse the result.
The IBM article "How to find broken (orphaned) Symlinks" can also help.
Cause
User renamed the target, so the symbolic link is pointing to a non existing target.
After the rename of the versioned target file (a.doc -> a.docx, done by ClearCase Explorer) I get the update error, that the symlink a.doc does not exist.
Unable to resolve symlink "filename.doc". The symlink target will not be loaded.
Where can I find the link itself (in which folder is it located?)?
How can I solve the rename (?) of the symlink?
Answer
To find and remove the symlink:
Use a dynamic view (snapshot views cannot load the missing links).
Run M:\viewtag\vobtag>cleartool find . -kind slink -print
Refer to the following technote for information about how to remove the symlinks as found in the output of the above command: "Unable to resolve VOB symlink":
A cleartool ls from the command prompt will show:
virt.46e5e94ff9024144ab0fe9ed432ce6e6 --> ../virt
virt.5043bcc7c8f44439938d634bd5ba9ac2 --> ..virt [not loaded]
The above symbolic link is to a resource outside of ClearCase, which renders the hyperlink invalid for use in UCM.
Resolving the problem
Remove the broken (dangling) link from the VOB to clear the error, using the cleartool rmname command.
Example:
cleartool rmname virt.46e5e94ff9024144ab0fe9ed432ce6e6
Using cleartool rmname allows you to preserve the symbolic link, but remove references
to it from future directory versions.
Symbolic links can be permanently removed using cleartool rmelem, refer to technote 1148781 for more details.

Can't see directory/Can't uncheckout

When I do "ct lsco -a" I can see that I have three checkouts. But they don't show up in xclearcase, and the directories aren't visible from the command line.
ct lsco -a | grep hendrixjl
--07-29T15:32 hendrixjl checkout directory version "/vobs/CORE/CORE_APPS/src/mapmgr_decoupled##/main/rel_core_0.5.0.0__int/fea__cr_54__0.5.0.0_decouple_map_manager/3/icondetails_decoupled" from /main/rel_core_0.5.0.0__int/fea__cr_47__0.5.0.0_ui_decouple/0 (unreserved)
--07-29T15:32 hendrixjl checkout directory version "/vobs/CORE/CORE_APPS/src/mapmgr_decoupled##/main/rel_core_0.5.0.0__int/fea__cr_54__0.5.0.0_decouple_map_manager/4/overlays" from /main/rel_core_0.5.0.0__int/fea__cr_47__0.5.0.0_ui_decouple/0 (unreserved)
--07-29T15:32 hendrixjl checkout directory version "/vobs/CORE/CORE_APPS/src/mapmgr_decoupled##/main/rel_core_0.5.0.0__int/fea__cr_54__0.5.0.0_decouple_map_manager/4/overlays/main/rel_core_0.5.0.0__int/fea__cr_54__0.5.0.0_decouple_map_manager/1/images" from /main/rel_core_0.5.0.0__int/fea__cr_47__0.5.0.0_ui_decouple/0 (unreserved)
[hendrixjl#BA-JBCP-HENDRIX CORE]$ cd /vobs/CORE/CORE_APPS/src/mapmgr_decoupled
[hendrixjl#BA-JBCP-HENDRIX mapmgr_decoupled]$ ls
Makefile ascope_translator common_decoupled displaySA_decoupled filters mgr_decoupled unit_test
[hendrixjl#BA-JBCP-HENDRIX mapmgr_decoupled]$ ct unco .
cleartool: Error: No branch of element is checked out to view "cc-svr:/data/cc_store/viewstore/hendrixjl/fea__cr_47__0.5.0.0_ui_decouple__hendrixjl_view.vws".
cleartool: Error: Unable to find checked out version for ".".
[hendrixjl#BA-JBCP-HENDRIX mapmgr_decoupled]$ ct unco icondetails_decoupled
cleartool: Error: Element name not found: "icondetails_decoupled".
[hendrixjl#BA-JBCP-HENDRIX mapmgr_decoupled]$
Those directories are checked-out in parent directories which are not visible/selected by your current view, probably because they have been removed (rmnamed).
That means the checked-out versions are not accessible from this view.
However, a potential workaround is to search for those same checked-out directories from the GUI "find checkouts" window: there you can select the checked-out element (file or directory) and select "undo checkout".
Another workaround is to go to the full extended path of that directory in a dynamic view: you will then be able to "cleartool unco" the directory.
cd /vobs/CORE/CORE_APPS/src/mapmgr_decoupled##/main/rel_core_0.5.0.0__int/fea__cr_54__0.5.0.0_decouple_map_manager/3
cleartool unco icondetails_decoupled
In any case, whenever you don't see an element, the first think to do is a version tree of the parent directory of that element, in order to check if the missing element has been rmname'd in one of the version of said parent directory.

Resources