#!/usr/bin/ksh
#
# SAMPLE NAME: extractAllFilesForComponent
#
# FUNCTIONS:   This sample shell script extracts all the files 
#              associated with a specific component and places them in 
#              the path specified by the relativePathName parameter.
#              If a file belongs to several releases, one version is
#              extracted for each release, under a subdirectory that is
#              named after the release.
#              The versions of the files can be current (default) or committed.
#
# USAGE: 
# extractAllFilesForComponent componentName relativePathName [current|committed]
#                                                             *******
# ENVIRONMENT VARIABLE(S): CMVC_FAMILY [CMVC_BECOME]
#
# 5765-207 (C) COPYRIGHT International Business Machines Corp. 1993,1998
# 5765-202 (C) COPYRIGHT International Business Machines Corp. 1993,1998
# 5622-063 (C) COPYRIGHT International Business Machines Corp. 1993,1998
# All Rights Reserved
# Licensed Materials - Property of IBM
#
# US Government Users Restricted Rights - Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
#
#           NOTICE TO USERS OF THE SOURCE CODE EXAMPLES
#
# INTERNATIONAL BUSINESS MACHINES CORPORATION PROVIDES THE SOURCE CODE
# EXAMPLES, BOTH INDIVIDUALLY AND AS ONE OR MORE GROUPS, "AS IS" WITHOUT
# WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
# LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE
# OF THE SOURCE CODE EXAMPLES, BOTH INDIVIDUALLY AND AS ONE OR MORE GROUPS,
# IS WITH YOU.  SHOULD ANY PART OF THE SOURCE CODE EXAMPLES PROVE
# DEFECTIVE, YOU (AND NOT IBM OR AN AUTHORIZED RISC System/6000* WORKSTATION
# DEALER) ASSUME THE ENTIRE COST OF ALL NECESSARY SERVICING, REPAIR OR
# CORRECTION.
#
# * RISC System/6000 is a trademark of International Business Machines
#   Corporation.
#
# /usr/lpp/cmvc/samples/extractAllFilesForComponent
#


# Validation of input parameters and environment variables.

if [ $# -eq 0 ]
then
  print "usage: $0 componentName relativePathName [committed]"
  print "This sample shell script extracts all the files associated"
  print "with a specific component and places them in the path specified"
  print "by the relativePathName parameter."
  print "If a file belongs to several releases, one version is extracted for"
  print "each release, under a subdirectory that is named after the release."
  print "By default, the current version is extracted, unless"
  print "the committed parameter is specified."
  exit 1
fi

if [ -z "$CMVC_FAMILY" ]
then
  print "The CMVC family must be set with the CMVC_FAMILY environment variable."
  exit 1
fi

#
if [ $# -gt 3 ]
then
  print "Provide a componentName and a relativePathName"
  print "as input parameters.\n"
  exit 1
fi

componentName=$1
relative=$2

if [ $# -eq 3 ]
then
  desiredVersion=$3
  if [ "$desiredVersion" = "committed" ] || [ "$desiredVersion" = "current" ]
  then
    print ""     # no-op
  else
    print "The desired version should be either current (default) or committed"
    exit 1
  fi
else
  desiredVersion="current"
fi

print "Multiple copies of a file may exist within a component with each"
print "version of the file being owned by a separate release."
print "As a result, a directory will be created for each release and the"
print "files will be copied into their respective directories relative to"
print "the relativePathName parameter that you have supplied."

RELEASENAME=
PATHNAME=
SAVEPATHNAME=

# Find out the committed files in a component and extract them

Report -view FileView -where "compName='$componentName' and dropDate is null order by pathName" -raw > /tmp/cv$$
while read line
do
   RELEASENAME=`echo $line | cut -d'|' -f2 `
   PATHNAME=`echo $line | cut -d'|' -f8 `
   if [ "$desiredVersion" = "committed" ] 
   then
     VERSION=`echo $line | cut -d'|' -f4 `
     print "Extracting file: $PATHNAME committed version $VERSION release $RELEASENAME"
   else
     VERSION=`echo $line | cut -d'|' -f9 `
     print "Extracting file: $PATHNAME current version $VERSION release $RELEASENAME"
   fi
   File -extract $PATHNAME -relative $relative/$RELEASENAME -release $RELEASENAME -version $VERSION
done </tmp/cv$$

# Cleanup the temporary file
[ -r /tmp/cv$$ ] && rm -f /tmp/cv$$

print "The extraction of the files is done!"

exit 0

### end of file ###
