Index: packaging/templates/generic-build-script =================================================================== RCS file: /cvs/cygwin-apps/packaging/templates/generic-build-script,v retrieving revision 1.43 diff -u -p -r1.43 generic-build-script --- packaging/templates/generic-build-script 18 Oct 2005 05:01:36 -0000 1.43 +++ packaging/templates/generic-build-script 20 Nov 2005 21:05:49 -0000 @@ -163,7 +163,7 @@ Actions are: spkg, src-package Prepare the source package ${src_pkg_name} finish Remove source directory ${srcdir} checksig Validate GPG signatures (requires gpg) + upgrade-self Merge changes from upstream generic-build-script. first Full run for spkg (mkdirs, spkg, finish) almostall Full run for bin pkg, except for finish all Full run for bin pkg @@ -402,6 +403,111 @@ checksig() { echo "You need the gnupg package installed in order to check signatures." ; \ fi } +upgrade_self() { + # make sure we have cvs and merge. + if ! which merge >/dev/null || ! which cvs >/dev/null; then + echo "$0 upgrade-self: I need merge and cvs!" + exit 1 + fi + scriptname=`basename $0` + my_gbs_ver="$(version |sed -e 's/.* //')" + gbs_cvs_repo=':pserver:anoncvs@sources.redhat.com:/cvs/cygwin-apps' + gbs_cvs_dir='packaging/templates/' + mkdir -p /usr/share/gbs + share_gbs_fresh=false + test -n "$(find /usr/share/gbs -name generic-build-script-HEAD -mtime -1)" \ + && share_gbs_fresh=true + # get HEAD + if ${share_gbs_fresh}; then + cp /usr/share/gbs/generic-build-script-HEAD \ + /tmp/generic-build-script-HEAD-$$-1.sh + else + echo "$0 upgrade-self will now connect to the Red Hat CVS-server." + echo "If you are prompted for a password, press ''." + cvs -z3 -d ${gbs_cvs_repo} co -p ${gbs_cvs_dir}generic-build-script \ + >/tmp/generic-build-script-HEAD-$$-1.sh + fi + # fool version-check + touch /tmp/generic-build-script-HEAD-$$.tar + new_gbs_ver="$( + ( cd /tmp; sh -c "/tmp/generic-build-script-HEAD-$$-1.sh version" + ) |sed -e 's/.* //' + )" + if test "${my_gbs_ver}" != "${new_gbs_ver}"; then + # get ``my'' version + use_old_gbs=false + ${share_gbs_fresh} \ + && test -f "/usr/share/gbs/generic-build-script-${my_gbs_ver}" \ + && use_old_gbs=true + if ${use_old_gbs}; then + cp /usr/share/gbs/generic-build-script-${my_gbs_ver} \ + /tmp/generic-build-script-${my_gbs_ver}-$$-1.sh + else + echo $0 upgrade-self will now connect to the Red Hat CVS-server. + echo If you are prompted for a password, press ''. + cvs -z3 -d ${gbs_cvs_repo} co -r${my_gbs_ver} -p \ + ${gbs_cvs_dir}generic-build-script \ + >/tmp/generic-build-script-${my_gbs_ver}-$$-1.sh + fi + echo upgrading $0 from ${my_gbs_ver} to ${new_gbs_ver} + cp $0 /tmp/${scriptname}-$$ + export merge_failed=false + echo Merging... + ( cd /tmp + merge -L "${scriptname}" -L "${my_gbs_ver}" -L "${new_gbs_ver}" \ + ${scriptname}-$$ \ + generic-build-script-${my_gbs_ver}-$$-1.sh \ + generic-build-script-HEAD-$$-1.sh \ + ) || export merge_failed=true + if ! ${share_gbs_fresh}; then + cp /tmp/generic-build-script-HEAD-$$-1.sh \ + /usr/share/gbs/generic-build-script-HEAD + cp /tmp/generic-build-script-HEAD-$$-1.sh \ + /usr/share/gbs/generic-build-script-${new_gbs_ver} + fi + if ! ${use_old_gbs}; then + cp /tmp/generic-build-script-${my_gbs_ver}-$$-1.sh \ + /usr/share/gbs/generic-build-script-${my_gbs_ver} + fi + rm /tmp/generic-build-script-HEAD-$$.tar + rm /tmp/generic-build-script-HEAD-$$-1.sh + rm /tmp/generic-build-script-${my_gbs_ver}-$$-1.sh + if ${merge_failed}; then + echo \ + 'upgrade-self: Conflicts in merge. Edit the script before continuing.' + echo -n 'Press . ' + read dmy + ${EDITOR:-vim} "/tmp/${scriptname}-$$" + answer= + while test "${answer}" != "yes" -a "${answer}" != "no"; do + echo -n "Do you want to install the edited script as $0? (yes/no) " + read answer + done + if test "${answer}" = "yes"; then + export merge_failed=false + fi + fi + if ! ${merge_failed}; then + exec 5<&0 sh -es "$@"<<-EOSH + exec 0<&5 + mv -f --backup=numbered /tmp/${scriptname}-$$ $0 + echo "$0 upgraded to generic-build-script revision ${new_gbs_ver}." + shift + if test -n \$1; then + $0 "\$@" + fi + exit 0 + EOSH + # not reached. + else + echo "$0 not replaced! keeping /tmp/${scriptname}-$$" + exit 1 + fi + else + echo $0 already at generic-build-script version ${my_gbs_ver} + fi +} + while test -n "$1" ; do case $1 in help|--help) help ; STATUS=$? ;; @@ -428,6 +534,7 @@ while test -n "$1" ; do spkg) spkg ; STATUS=$? ;; finish) finish ; STATUS=$? ;; checksig) checksig ; STATUS=$? ;; + upgrade-self) upgrade_self "$@" ; STATUS=$? ;; first) mkdirs && spkg && finish ; STATUS=$? ;; almostall) checksig && prep && conf && build && install && \ strip && pkg && spkg ; STATUS=$? ;;