#!/bin/sh # --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: bin/sde-reschedule-new # Copyright (C) 2008 The OpenSDE Project # # More information can be found in the files COPYING and README. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. A copy of the # GNU General Public License can be found in the file COPYING. # --- SDE-COPYRIGHT-NOTE-END --- #Description: Reschedule updated packages from the builds [ -n "$SDEROOT" ] || export SDEROOT=$( cd "${0%/*}/.."; pwd -P ) . "$SDEROOT/lib/libsde.in" reschedule_usage() { local progname=${0##*/} cat <] ... Supported Options: --deps|-D every package depending on the others --any|-A process any available config --dry-run|-n don't really reschedule --soft|-s don't remove the packages when rescheduling EOT } shortopts='DAns' longopts='help,deps,any,soft,dry-run' options=$( getopt -o "$shortopts" -l "$longopts" -- "$@" ) if [ $? -ne 0 ]; then reschedule_usage exit -1 fi # load new arguments list eval set -- "$options" reschedule_dependers= reschedule_any= reschedule_soft= reschedule_dry= reschedule_configs= while [ $# -gt 0 ]; do case "$1" in --help) reschedule_usage exit 0 ;; --deps|-D) reschedule_dependers=yes ;; --any|-A) reschedule_any=yes ;; --soft|-s) reschedule_soft=yes ;; --dry-run|-n) reschedule_dry=yes ;; --) shift; break ;; *) echo_abort 1 "$1: Unknown argument, aborting." esac shift done . "$SDEROOT/lib/sde-config.in" . "$SDEROOT/lib/sde-package.in" # receives a list of sandboxes, and returns a list of unique packages involved reschedule_packages_list() { local x= for x; do ( cd "$SDEROOT/$x/var/adm/packages" && ls -1d * ) 2> /dev/null done | sort -u } # compares the package's chksum on a given config/sandbox to the current # and reschedule if it's different # reschedule_new() { local pkg="$1" cksum1="$2" cksum2= config="$3" sandbox="$4" local pkgfile="$SDEROOT/$sandbox/var/adm/packages/$pkg" local dependers= x= if [ -s "$pkgfile" ]; then cksum2=$( grep -R '^\(ROCK Linux\|T2\|OpenSDE\) Package Source Checksum: ' \ "$pkgfile" | cut -d: -f2 ) if [ " $cksum1" != "$cksum2" ]; then if [ "$reschedule_dependers" = "yes" ]; then # TODO: Implement dependers detection dependers= fi for x in $pkg $dependers; do echo "$config: $x" if [ "$reschedule_dry" != "yes" ]; then if [ "$reschedule_soft" != "yes" ]; then mine -rf -R "$SDEROOT/$sandbox/" "$x" fi rm -f "$SDEROOT/$sandbox/var/adm"/*/?-$x.* 2> /dev/null fi done fi fi } # which configs? # if [ -n "$reschedule_any" ]; then reschedule_configs=$( config_list ) [ -n "$reschedule_configs" ] || echo_abort 1 "No config found." elif [ $# -eq 0 ]; then # try default set -- 'default' fi if [ -z "$reschedule_configs" ]; then for x; do if config_exists "$x"; then reschedule_configs="$reschedule_configs $x" else echo_warning "$x: Invalid config." fi done fi tuples= sandboxes= for x in $reschedule_configs; do y=$( config_id "$x" ) if [ -z "$y" ]; then echo_warning "$x: Broken config." elif [ -d "$SDEROOT/build/$y/" ]; then tuples="$tuples $x:build/$y" sandboxes="$sandboxes build/$y" fi done for pkg in $( reschedule_packages_list $sandboxes ); do cksum1=$( sh $SDEROOT/lib/sde-package/pkgchksum.sh \ `package_confdir $pkg` ) for x in $tuples; do ( reschedule_new $pkg $cksum1 ${x/:/ } ) & done wait done