Search code examples
clearcase

ClearCase: Copy old versions with Snapshot Views under Windows


Using IBM Rational ClearCase: - I have only access to Snapshot Views so NO dynamic Views

I want to copy ALL versions from a certain changeset to c:\temp. I have already listed the changeset versions in a file (couple of hundred of versions, I only need the latest one), I do not have a baseline over this older set.

What I now have and does not work:

#!/usr/bin/perl -w
#
#  PROGRAM: copytest.pl
$filename = "Design test123.doc";
$view = "D:\\AdminViews\\ABC_R1_READ_2\\ABCD002\\ABC_DESIGN\\BLA Framework\\P0\\";
$version = "\\main\\ABC_R1_READ\\1";
$printhet = 'cleartool find . -name "' . $filename . '" -version version(' . $version. ') -exec "cmd /c copy %CLEARCASE_XPN% D:\temp\%CLEARCASE_PN%"';
system($printhet);

Basically because: http://www-01.ibm.com/support/docview.wss?uid=swg21150317 (XPN)

update: I read In ClearCase, how can I view old version of a file in a static view, from the command line? again and I see that a diff with an empty file is the /hack for having no XPN. ok... but a diff with empty and a doc in the above gives me "0"


Solution

  • I am not sure what this IBM article (you mention in your question) can mean in your situation since it only works for dynamic view (if the view does not directly select the version you need).

    And my old answer for accessing an extended path file content in a snapshot view is not trivial to adapt here.


    So why not aim at something equivalent but simpler?

    Why not create another snapshot view directly within c:\temp (c:\temp\myview_snap), with a config spec along the lines of (you can keep '/' instead of '\'):

    element * CHECKEDOUT
    element "/ABC_R1_READ_2/ABCD002/ABC_DESIGN/BLA Framework/P0/..." /main/ABC_R1_READ/1
    element -directory "/ABC_R1_READ_2/ABCD002/ABC_DESIGN/BLA Framework/P0/..." /main/ABC_R1_READ/LATEST
    element -directory "/ABC_R1_READ_2/ABCD002/ABC_DESIGN/BLA Framework/P0/..." /main/LATEST
    element "/ABC_R1_READ_2/ABCD002/ABC_DESIGN/BLA Framework/P0/..." -none
    element /ABC_R1_READ_2/ABCD002 /main/ABC_R1_READ/1
    element /ABC_R1_READ_2/ABCD002 /main/LATEST
    element /ABC_R1_READ_2/ABCD002/ABC_DESIGN /main/ABC_R1_READ/1
    element /ABC_R1_READ_2/ABCD002/ABC_DESIGN /main/LATEST
    element "/ABC_R1_READ_2/ABCD002/ABC_DESIGN/BLA Framework" /main/ABC_R1_READ/1
    element "/ABC_R1_READ_2/ABCD002/ABC_DESIGN/BLA Framework" /main/LATEST
    element * -none
    load /ABC_R1_READ_2
    

    That way, you should select:

    • any element under /ABC_R1_READ_2/ABCD002/ABC_DESIGN/BLA Framework/P0 (P0 included) with the right version
    • any directory which had not the exact version will try first to load itself as the LATEST on ABC_R1_READ, else as /main/LATEST as fallback (always exists)
    • if an element (file) has not that version, it won't be selected at all and not loaded.
    • any parent element (/ABC_R1_READ_2/ABCD002/ABC_DESIGN/BLA Framework), if it has not the right version, will be selected as /main/LATEST (always exist)
    • any other element (outside of the relevant tree) will be ignored, non-selected

    Just tested it: it works fine.


    Notes:

    • "BLA Framework" is a directory with a space in it, so you need to add the double quotes where it is used.
    • the load rule can just load the vob ABC_R1_READ_2: since the '-none' rules will not select what you don't need, they won't be loaded anyway.