#!/bin/csh -f
source $aleph_proc/def_local_env

##----------

set wk_si   = RDA2
set wk_ver  = 22
set wk_fr   = 304
set wk_rc   = 2243

##----------

echo "  "
echo "========================================================================"
echo "  "
echo "START hotfix-installation"
echo "========================="
echo " - based on  incident  SI-$wk_si"
echo " - solution by fix_request $wk_fr / rep_change #$wk_rc / version $wk_ver"
echo "  "

echo -n "---> Enter any input to cancel or  CR  to continue... "
set wk_read = `read_line -l`
if ("$wk_read" != "") exit (1)

##----------

echo "  "
echo "------------------------------------------------------------------------"
echo "  "
echo " CREATE list of all sources of fix_request ..."
echo " --------------------------"

rm -f wkfile_source_names.* >& /dev/null
set wk_status = 0
set wk_ls = "fix_request_$wk_ver.$wk_fr/files/*"
while (! $wk_status)
  ls -1 -d $wk_ls >> wkfile_source_names.all
  set wk_status = $status
  set wk_ls = "$wk_ls/*"
end 
sort -u wkfile_source_names.all > wkfile_source_names.sort
set wk_lines = `cat wkfile_source_names.sort| wc -l`
set wk_line = 1
while ($wk_line <= $wk_lines)
  set wk_source = `head -$wk_line wkfile_source_names.sort| tail -1`
  if (-f $wk_source) then
    echo $wk_source >> wkfile_source_names.src
  endif
  @ wk_line++
end

echo "... source list is:"
echo "   "
cat wkfile_source_names.src
echo "   "

echo -n "---> Enter any input to cancel or  CR  to continue... "
set wk_read = `read_line -l`
if ("$wk_read" != "") exit (1)

##----------

echo "  "
echo "------------------------------------------------------------------------"
echo "  "
echo " CREATE list of all actions of fix_request ..."
echo " --------------------------"

rm -f wkfile_actions >& /dev/null
perl -e '$sw_action=0;  \
  while ($l=<STDIN>){ chomp $l; $l=~s/^\s*//; $l=~s/\s*$//;  \
    if($l=~/^\s*$/){next;}  \
    if($l=~/^Action[s]?\s*:$/i){$sw_action++; next;}  \
    if($l=~/.*:.*/ && $sw_action){$sw_action++; next;}  \
    if($sw_action!=1){next;}  \
    printf "%s\n", $l;  \
  }'  \
    < fix_request_$wk_ver.$wk_fr/implement.txt  \
    > wkfile_actions

echo "... action list is:"
echo "   "
cat wkfile_actions
echo "   "

echo -n "---> Enter any input to cancel or  CR  to continue... "
set wk_read = `read_line -l`
if ("$wk_read" != "") exit (1)

##----------

echo "  "
echo "------------------------------------------------------------------------"
echo "  "
echo " COPY of all sources of the fix_request into ALEPH environment"
echo " -------------------"

echo "   "
set wk_lines = `cat wkfile_source_names.src| wc -l`
set wk_line = 1
while ($wk_line <= $wk_lines)
  set wk_source = `head -$wk_line wkfile_source_names.src| tail -1`

  set wk_src_basename = `basename $wk_source`
  set wk_to_name = `echo $wk_source| perl -p -e '$_=~s/^fix_request_\d+\.\d+\/files\///;'`

  echo "...-> copy $wk_src_basename"
  echo "        to "'$'"aleph_dev/$wk_to_name"

  cp -p $wk_source $aleph_dev/$wk_to_name

  if ($status == 0 && -f $aleph_dev/$wk_to_name) then
    echo "      --> DONE copy new source"
  else
    echo " ERROR - copy new source failed ????"
    echo "---> exit to system ......"
    exit (1)
  endif

  set wk_wcl = `diff $wk_source $aleph_dev/$wk_to_name | wc -l`
  if ($wk_wcl != 0) then
    echo " ERROR - differences in copied new source ????"
    echo "---> exit to system ......"
    exit (1)
  endif

  @ wk_line++
end

echo -n "---> Enter any input to cancel or  CR  to continue... "
set wk_read = `read_line -l`
if ("$wk_read" != "") exit (1)

##----------

echo "  "
echo "------------------------------------------------------------------------"
echo "  "
echo " SAVE all old compiled sources of new *.cbl / *.c / *.pc sources"
echo " -----------------------------"

echo "   "
set wk_lines = `cat wkfile_actions | wc -l`
set wk_line = 0
while ($wk_line < $wk_lines)
  @ wk_line++
  set wk_action = `head -$wk_line wkfile_actions | tail -1`

  echo "...-> check save for action:  $wk_action"

  set wk_save_src = `echo "$wk_action" | perl -p -e 'chomp $_; $_=~s/\s+/ /g;if($_=~/^iprou [^ ]+ ([^ \.]+)\.cbl$/ || $_=~/^iprou [^ ]+ ([^ \.]+)$/){$_=$1.".gnt";} elsif($_=~/^compile_ora [^ ]+ ([^ \.]+)\.pc$/ || $_=~/^compile_ora [^ ]+ ([^ \.]+)$/){$_=$1.".o";} elsif($_=~/^compile_cc [^ ]+ ([^ \.]+)\.pc$/ || $_=~/^compile_cc [^ ]+ ([^ \.]+)$/){$_=$1.".o";} elsif($_=~/^iprou/ || $_=~/^compile_ora/ || $_=~/^compile_cc/){$_="##########"} else {$_="#####";}'`

  if ($wk_save_src == "##########") then
    echo " ERROR - parsing of action not with clear result"
    echo "---> exit to system ......"
    exit (1)
  endif
  if ($wk_save_src == "#####") then
    echo "     -> nothing to save, no source compilation"
    continue
  endif
  set wk_save_src_saved = $wk_save_src.saved_by_hotfix_rc$wk_rc
  echo "      -> save  "'$'"aleph_exe/$wk_save_src"
  echo "           to  "'$'"aleph_exe/$wk_save_src_saved"

  if (! -f $aleph_exe/$wk_save_src) then
    echo "      -> Attention! no save, save-file missing, could be new \!\!"
    continue
  endif
  if (-f $aleph_exe/$wk_save_src_saved) then
    echo "      -> Attention! no save, saved-to-file already exist \!\!"
    continue
  endif

  cp -p $aleph_exe/$wk_save_src $aleph_exe/$wk_save_src_saved

  if ( $status || ! -f $aleph_exe/$wk_save_src_saved) then
    echo " ERROR - cp for save failed, saved-to-file not exist"
    echo "---> exit to system ......"
    exit (1)
  endif

  echo "      --> DONE save"

end

echo -n "---> Enter any input to cancel or  CR  to continue... "
set wk_read = `read_line -l`
if ("$wk_read" != "") exit (1)
  
##----------

echo "  "
echo "------------------------------------------------------------------------"
echo "  "
echo " ACTION processing"
echo " -----------------"

echo "   "
set wk_lines = `cat wkfile_actions | wc -l`
set wk_line = 1
while ($wk_line <= $wk_lines)
  set wk_action = `head -$wk_line wkfile_actions | tail -1`

  echo "...-> start action: $wk_action"

  $wk_action

  echo "      --> DONE action"

  @ wk_line++
end

echo -n "---> Enter any input to cancel or  CR  to continue... "
set wk_read = `read_line -l`
if ("$wk_read" != "") exit (1)

##----------
  
echo "  "
echo "========================================================================"
echo "  "
echo "DONE hotfix-installation"
echo "  "

exit (0)
