tags:

views:

814

answers:

3

I'm a ClearCase newbie and up until now have been used to SVN. Therefore, I'm a bit confused on the steps I need to take to create a new directory structure containing multiple files to ClearCase.

So, say for example there is an existing directory structure within ClearCase as follows:

\ParentDirectory
    \ChildDirectory1
        \File1
        \File2
    \ChildDirectory2
    \ChildDirectory3
        \File1
    \ChildDirectory4

If I want to add a new subdirectory to this structure, ChildDirectory5, which will contain a number of other files, how do I go about this? From what I have been reading, I will need to first of all check out the parent directory and then use the mkelem command to make each subdirectory and file.

However, I have already created the necessary files and directories on my local machine so I just need to check them into ClearCase somehow. With SVN, all I would've needed to do was copy the parent folder into a checked out repo and do an add & commit command sequence on it.

+1  A: 

You have to import your local directory structure. The command is clearfsimport.

philippe
+2  A: 

As explained in How can I use ClearCase to “add to source control …” recursively?, you have to use clearfsimport which does what you are saying (checkout the parent directories, mkelem for the elements)

clearfsimport -preview -rec -nset c:\sourceDir\ChildDirectory5 m:\MyView\MyVob\ParentDirectory

Note the :

  • -preview option: it will allow to check what would happen without actually doing anything.
  • '*' used only in Windows environment, in order to import the content of a directory
  • -nset option (see my previous answer about nset).

I would recommend dynamic view for those initialization phases where you need to import a lot of data: you can quickly see what your view looks like without making any update (like "without updating your workspace"):
ClearCase allows to access the data in two ways:

  • snapshot view (like a SVN workspace, except all the .svn are actually externalized in a view storage outside the workspace)
  • dynamic view: all your files are visible through the network (instant access/update)
VonC
A: 

I use a variant of this script (I call it "ctadd"):

#!/usr/bin/perl

use strict;
use Getopt::Attrribute;

(our $nodo : Getopt(nodo));
(our $exclude_pat : Getopt(exclude_pat=s));

for my $i (@ARGV) {
  if ($i =~ /\s/) {
    warn "skipping file with spaces ($i)\n";
    next;
  }
  chomp(my @files = `find $i -type f`);
  @files = grep !/~$/, @files;  # emacs backup files
  @files = grep !/^\#/, @files; # emacs autosave files
  if (defined($exclude_pat)) {
    @files = grep !/$exclude_pat/, @files;
  }
  foreach (@files) {
    warn "skipping files with spaces ($_)\n" if /\s/ ;
  }
  @files = grep !/\s/, @files;
  foreach (@files) {
    my $cmd = "cleartool mkelem -nc -mkp \"$_\"";
    print STDERR "$cmd\n";
    system($cmd) unless $nodo;
  }
}

The -mkpath option of cleartool mkelem will automatically create and/or check out any needed directories.

For this script, -nodo will have it simply output the commands, and -exclude will allow you to specify a pattern for which any file that matches it will be excluded.

Note that Getopt::Attribute is not part of the standard Perl distribution, but it is available on a CPAN mirror near you.

jsegal