Subversion Repositories se3

Rev

Rev 6636 | Rev 6638 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#!/bin/bash
#
## $Id$ ##
#
##### Met a jour Se3 depuis le depot SVN #####
#


function usage {
        echo "usage: $0 -b branche -a archi -d distrib -v version [-n maj] -u|-l [-fs] [package]"
        echo "       -b :  choix de la branche (se3testing|se3XP)"
        echo "       -a :  choix de l'architecture (i386|amd64)"       
        echo "       -d :  choix de la distrib (lenny|squeeze)"
        echo "       -v :  choix de la version (2.1|2.2)"
        echo "       -n :  majnb pour se3master"
        echo "       -u :  met a jour automatiquement (implique -f et -s) le depot distant"
        echo "       -l :  met a jour automatiquement (implique -f ) le depot local"
        echo "       -f :  force la mise a jour même si cette version est deja sur le depot"
        echo "       -s :  upload des fichiers sur le serveur"
        exit $1;
}

while getopts ":hb:a:d:v:n:ufsl" cmd
do
        case $cmd in   
          b) BRANCHE=$OPTARG ;;
          a) ARCH=$OPTARG;;
          d) DISTRIB=$OPTARG;;
          v) VERSION=$OPTARG ;;
          n) MAJNB=$OPTARG ;;
          u) UPDATE=1
              FORCE=1
              UPLOAD=1
              LOCAL=0 ;;
          f) FORCE=1 ;;
          s) UPLOAD=1 ;;
          l) LOCAL=1
             FORCE=1
             UPLOAD=0
             UPDATE=1 ;;
          h) usage 0 ;;
          ?) echo "bad option!"
              usage 1 ;;
        esac
done

shift $(($OPTIND - 1))

if ( [ -z "$VERSION" ] || [ -z "$DISTRIB" ] || [ -z "$BRANCHE" ]  ); then
usage 1
fi
[ "$BRANCHE" == "xp" -o "$BRANCHE" == "se3xp" ] && BRANCHE="se3XP" && VERSION="2.2"

builddir=$(pwd)
mkdir -p debs
mkdir -p svn

svnurl="https://svn.ac-grenoble.fr/svn/se3"

# configuration de la liaison ssh avec le serveur pour la mise a jour

repocmd="$builddir/debs/update_repo_${BRANCHE}.sh"


if [ "$LOCAL" == "1" ]; then
    # chemin du dépot local ( à modifier )
    depot="/var/se3-2/repos/apt/debian"
    sshcmd=""
else
    # user ( creer l'utilisateur sur le serveur et  faire ssh-copy-id reprepo@serveur avant )
    repouser="reprepo"

    # chemin du depot debian sur le serveur distant
    # ( a modifier ):
    depot="/var/se3-2/repos/apt/debian"
    url="$repouser@se3:~/"
    sshcmd="ssh  $repouser@se3"
    scpcmd="scp"
fi

echo "#!/bin/bash" > $repocmd
chmod u+x $repocmd


[ "$VERSION" == "2.1" ]  && url_branche="$svnurl/branches/$VERSION"
[ "$VERSION" == "2.2" ] && url_branche="$svnurl/trunk"

if [ $# -eq "0" ]
then
  echo "compilation des modules :"
  liste_modules=$(svn list $url_branche | sed "s|/||g")
  echo "$liste_modules"
else
  liste_modules=$@
  echo "compilation de $@"
fi

# paquets debian sources ( versions avec dch ) ou DEBIAN
function compile {
  if [ "$1" == "se3master" ]; then
     module="se3"
  else
     module="$1"
  fi
  if [ -d "$builddir/svn/$module" ]; then          
     svn switch $url_branche/$1 $builddir/svn/$module >> $builddir/build.log
  else
     svn checkout $url_branche/$1 $builddir/svn/$module >> $builddir/build.log
  fi
  VERSION_MODULE=${VERSION}.$(svn info $builddir/svn/$module | grep "R*vision de la der" | awk '{ print $NF }')
  mkdir -p $builddir/build/tmp
  cp -a $builddir/svn/$module/* $builddir/build/tmp
  cd $builddir/build/tmp
  find * -name .svn -exec rm -fr "{}" \; &>/dev/null  
  # commandes specifiques a un paquet ( a eviter si possible, modifier les sources !)
  [ -f "$builddir/buildscripts.d/$module" ] && . $builddir/buildscripts.d/$module
  if [ -d DEBIAN ]; then
     # packages DEBIAN
     sed -i "s/#VERSION#/$VERSION_MODULE/g" DEBIAN/control*
     find * -name .svn -exec rm -fr "{}" \; &>/dev/null
     deb="${module}_${VERSION_MODULE}_all.deb"
     dpkg-deb -b . ../$deb >> $builddir/build.log
  elif [ -d sources/debian ]; then
     # packages source/debian
     cd sources
     dh_clean
     debuild -uc -us -b >> $builddir/build.log
  elif [ -d debian ]; then
     # packages debian
     dh_clean
     debuild -uc -us -b >> $builddir/build.log
  fi
  cd ..
  if changesfile=$(ls ${module}_*.changes 2>/dev/null); then
     [ "$UPLOAD" == "1" ] && echo "$scpcmd $builddir/debs/$changesfile $url" >> $repocmd
     [ "$UPLOAD" == "1" ] && echo "$scpcmd $builddir/debs/${module}_*.deb $url" >> $repocmd
     [ "$FORCE" == "1" ] && echo "$sshcmd \"reprepro -C $BRANCHE -b $depot remove $DISTRIB $module\"" >> $repocmd  
     echo "$sshcmd \"reprepro -C $BRANCHE --ignore=wrongdistribution -b $depot include $DISTRIB $changesfile\"" >> $repocmd  
     cp $changesfile $builddir/debs
     cp ${module}_*.deb $builddir/debs
  elif debfile=$(ls ${module}_*.deb 2>/dev/null); then
     [ "$UPLOAD" == "1" ] && echo "$scpcmd $builddir/debs/$debfile $url" >> $repocmd
     [ "$FORCE" == "1" ] && echo "$sshcmd \"reprepro -C $BRANCHE -b $depot remove $DISTRIB $module\"" >> $repocmd  
     echo "$sshcmd \"reprepro -C $BRANCHE -b $depot includedeb $DISTRIB $debfile\"" >> $repocmd
     cp $debfile $builddir/debs
  else
     echo "ERREUR : le paquet $module n'a pas été généré"
  fi
  cd $builddir
  rm -fr $builddir/build/*
}

for package in $liste_modules ;  do
    echo "compilation de $package pour la branche $BRANCHE version $VERSION distrib $DISTRIB"
    compile $package
done

if [ "$UPDATE" == "1" ]; then
    $repocmd
fi
exit 0