Creating a new subdirectory structure in ClearCase?
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)
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.
You have to import your local directory structure. The command is clearfsimport.