diff options
Diffstat (limited to 'eclass/unipatch-001.eclass')
-rw-r--r-- | eclass/unipatch-001.eclass | 312 |
1 files changed, 0 insertions, 312 deletions
diff --git a/eclass/unipatch-001.eclass b/eclass/unipatch-001.eclass deleted file mode 100644 index 2e1706f19627..000000000000 --- a/eclass/unipatch-001.eclass +++ /dev/null @@ -1,312 +0,0 @@ -# -# Documentation is certain to come, but please disregard this eclass for the -# time being, until it has been through more testing. -# - -unipatch() { - # Behavioural environment variables. - # UNIPATCH_STRICTORDER - # UNIPATCH_EXCLUDE - # KPATCH_DIR - # UNIPATCH_POPTS - # UNIPATCH_SILENT_DROP - - local myLC_ALL - local checkfile checkfile_noext checkfile_ext checkfile_patchlvl - local checkfile_meta checkfile_patchdir checkfile_suffix - local strictcount i n pipecmd - local file_list patch_to_process patch_plevel - - # set to a standard locale to ensure sorts are ordered properly. - myLC_ALL="${LC_ALL}" - LC_ALL="C" - - # Setup UNIPATCH_POPTS if not set already - UNIPATCH_POPTS=${UNIPATCH_POPTS:--g0 -s} - - # Set UNIPATCH_SILENT_DROP if not already set - # Please bare in mind these *cannot* start with an asterisk - UNIPATCH_SILENT_DROP='000*' - - # We need a temporary directory in which we can stor our patches. - KPATCH_DIR="${KPATCH_DIR:-${WORKDIR}/patches/}" - mkdir -p ${KPATCH_DIR} - - # We're gonna need it when doing patches with a predefined patchlevel - shopt -s extglob - - # lets obtain our patch list - # any .diff/.patch/compressed file is added, and if neccessary decompressed. - # any tarred file is unpacked and added - # anything else is added to the drop pattern - UNIPATCH_LIST="${@:-${UNIPATCH_LIST}}" - - n=0 - strictcount=0 - for checkfile in ${UNIPATCH_LIST} - do - # unset parsed vars first - unset checkfile_suffix - unset checkfile_ext - unset checkfile_patchdir - checkfile_patchlvl=0 - - # did we pass suffix? or a patchlvl? - for((i=0; i<=${#checkfile}; i++)); do - case ${checkfile:${i}:1} in - @) checkfile_suffix="${checkfile:0:${i}}";; - :) checkfile_patchlvl="${checkfile:${i}}";; - esac - done - - # now lets sane up the checkfile var - [[ -n ${checkfile_suffix} ]] && checkfile=${checkfile//*@} - [[ -n ${checkfile_patchlvl} ]] && checkfile=${checkfile//:*} - - # is this file even valid? - if [[ ! -f ${checkfile} ]]; then - ewarn "Unable to read file:" - ewarn "${checkfile}" - ewarn "Please check this file exists, and its permissions." - die "unable to locate ${checkfile}" - fi - - #if we use strict dir, then lets prepend an order - if [[ -n ${UNIPATCH_STRICTORDER} ]]; then - checkfile_patchdir=${KPATCH_DIR}/${strictcount}/ - mkdir -p ${checkfile_patchdir} - strictcount=$((${strictcount} + 1)) - fi - - # Find the directory we are placing this in. - checkfile_patchdir="${checkfile_patchdir:-${KPATCH_DIR}}" - - # so now lets get finding patches. - # This is a list of patterns to match, and the resulting extention. - # you MUST specify the LEAST specific first, if the pattern would match - # more than one extension. think, .tar.gz vs. .gz - local testvalues test value temp - testvalues='*:DROP - *README:DOC - *.txt:DOC - *.gz*:gz - *.bz*:bz2 - *.tar.bz*:tbz - *.tbz*:tbz - *.tar.gz*:tgz - *.tgz*:tgz - *.tar:tar - *.z*:gz - *.zip*:zip - *.diff*:diff - *.patch*:patch' - - # lets see if we qualify for one of the above - for i in $testvalues; do - value=${i/*:/} - test=${i/:*/} - temp=${checkfile/${test}/${value}} - if [[ ${temp} == ${value} ]] - then - # if we do, then set the extention and the filename, minus ext. - checkfile_ext="${temp}" - checkfile_noext="${checkfile/${test:1}/}" - fi - done - - # if we specify a suffix, we want to over-ride the above now. - [[ -n ${checkfile_suffix} ]] && \ - checkfile_ext="${checkfile_suffix}" \ - checkfile_noext="${checkfile/${checkfile_suffix}/}" - - # set metafile - checkfile_meta="${checkfile_patchdir}/.meta_${checkfile_noext/*\//}" - - # Debug environment - edebug 3 "Debug environment variables" - edebug 3 "---------------------------" - edebug 3 "checkfile=${checkfile}" - edebug 3 "checkfile_ext=${checkfile_ext}" - edebug 3 "checkfile_noext=${checkfile_noext}" - edebug 3 "checkfile_patchdir=${checkfile_patchdir}" - edebug 3 "checkfile_patchlvl=${checkfile_patchlvl}" - edebug 3 "checkfile_meta=${checkfile_meta}" - edebug 3 "checkfile_suffix=${checkfile_suffix}" - - # and setup the appropriate pipecmd for it. - # the outcome of this should leave the file we want in the patch dir - case ${checkfile_ext} in - tbz) pipecmd="mkdir ${T}/ptmp/; - cd ${T}/ptmp/; - tar -xjf ${checkfile}; - find . -type f | sed -e \ - 's:\./:${checkfile_patchdir}:g' \ - > ${checkfile_meta}_files; - cp -Rf ${T}/ptmp/* ${checkfile_patchdir}; - rm -Rf ${T}/ptmp; - cd \${OLDPWD}";; - tgz) pipecmd="mkdir ${T}/ptmp/; - cd ${T}/ptmp/; - tar -xzf ${checkfile}; - find . -type f | sed -e \ - 's:\./:${checkfile_patchdir}:g' \ - > ${checkfile_meta}_files; - cp -Rf ${T}/ptmp/* ${checkfile_patchdir}; - rm -Rf ${T}/ptmp; - cd \${OLDPWD}";; - tar) pipecmd="mkdir ${T}/ptmp/; - cd ${T}/ptmp/; - tar -xf ${checkfile}; - find . -type f | sed -e \ - 's:\./:${checkfile_patchdir}:g' \ - > ${checkfile_meta}_files; - cp -Rf ${T}/ptmp/* ${checkfile_patchdir}; - rm -Rf ${T}/ptmp; - cd \${OLDPWD}";; - zip) pipecmd="mkdir ${T}/ptmp/; - cd ${T}/ptmp/; - unzip ${checkfile}; - find . -type f | sed -e \ - 's:\./:${checkfile_patchdir}:g' \ - > ${checkfile_meta}_files; - cp -Rf ${T}/ptmp/* ${checkfile_patchdir}; - rm -Rf ${T}/ptmp; - cd \${OLDPWD}";; - diff) pipecmd="cp ${checkfile} ${checkfile_patchdir}; - echo ${checkfile_patchdir}/${checkfile/*\//} \ - > ${checkfile_meta}_files;";; - patch) pipecmd="cp ${checkfile} ${checkfile_patchdir}; - echo ${checkfile_patchdir}/${checkfile/*\//} \ - > ${checkfile_meta}_files;";; - gz) pipecmd="gzip -dc ${checkfile} > ${T}/gunzip; - cp ${T}/gunzip ${checkfile_patchdir}${checkfile_noext/*\//}.diff; - rm ${T}/gunzip; - echo ${checkfile_patchdir}/${checkfile_noext/*\//}.diff \ - > ${checkfile_meta}_files;";; - bz2) pipecmd="bzip2 -dc ${checkfile} > ${T}/bunzip; - cp ${T}/bunzip ${checkfile_patchdir}${checkfile_noext/*\//}.diff; - rm ${T}/bunzip; - echo ${checkfile_patchdir}/${checkfile_noext/*\//}.diff \ - > ${checkfile_meta}_files;";; - DROP) pipecmd="";; - DOC) pipecmd="cp ${checkfile} ${checkfile_patchdir}";; - esac - - # Debug environment - edebug 3 "pipecmd=${pipecmd}" - - if [[ -z ${pipecmd} ]]; then - # if we dont know about it, lets drop it and move to the next - einfo "Unknown Filetype, Ignoring: ${checkfile/*\//}" - else - # if we do know about it, prepare it for patching, and - # populate metadata - ebegin "Preparing ${checkfile/*\//}" - eval ${pipecmd} - eend $? - - echo "PATCHLVL=${checkfile_patchlvl}" >> ${checkfile_meta} - fi - done - - # OK so now we got this far, we have everything neatly unpacked. - # we should probably build up our patch-list. - edebug 2 "Locating .meta_*_files and building patch list" - - for i in $(find ${KPATCH_DIR} -iname ".meta_*_files") - do - file_list=$(sort -n ${i}) - patch_plevel=$(sed -e 's:PATCHLVL=\(.*\):\1:' < ${i/_files/} | uniq) - edebug 3 "processing: ${i}" - edebug 3 "file_list=${file_list}" - edebug 3 "patch_plevel=${patch_plevel}" - - # OK, so now we have trhe list of files to process in this metafile - # we should process the patch. - for patch_to_process in ${file_list}; do - edebug 2 "Processing: ${patch_to_process}" - - # if we pass UNIPATCH_EXCLUDE then we scan through that. - # if we find a match, we dont bother applying it. - # This is done here to catch files within tarballs. - local tempname to_patch=1 - - tempname="${patch_to_process/*\//}" - # Process silent drops - for x in ${UNIPATCH_SILENT_DROP}; do - edebug 4 "Checking ${x} against ${tempname} = ${tempname//${x}}" - if [[ -z ${tempname//${x}} ]]; then - to_patch=-1 - edebug 2 "Dropping ${tempname} based on ${x} match" - break; - fi - done - - # Process excludes - for x in ${UNIPATCH_EXCLUDE}; do - [[ -z ${tempname/${x}*/} ]] && to_patch=0 - done - - if [[ ${to_patch} -eq -1 ]]; then - # This is something we silently ignore - : - elif [[ ${to_patch} -eq 1 ]]; then - apply_patch ${patch_to_process} - else - einfo "Excluding: ${tempname}" - fi - unset tempname to_patch - done - done - - LC_ALL=${myLC_ALL} -} - -apply_patch() { - local plvl patch_log pmsg - plvl=${patch_plevel} - patch_log="${T}/${1/*\//}.log" - - echo "************" > ${patch_log} - echo "patch log for file:" >> ${patch_log} - echo "${1}" >> ${patch_log} - echo "************" >> ${patch_log} - while [ ${plvl} -lt 5 ] - do - edebug 3 "Attempting patch (${1}) with -p${plvl} (${UNIPATCH_POPTS})" - - echo "Attempting:" >> ${patch_log} - echo "patch ${UNIPATCH_POPTS} -p${plvl} --dry-run -f" >> ${patch_log} - if (patch ${UNIPATCH_POPTS} -p${plvl} --dry-run -f < ${1}) >> ${patch_log} - then - [[ ${VERBOSITY} -ge 1 ]] && pmsg="-p${plvl}" - [[ ${VERBOSITY} -ge 2 ]] && pmsg="${UNIPATCH_POPTS} ${pmsg}" - [[ -n ${pmsg} ]] && pmsg=" (${pmsg})" - echo "**** Applying:" >> ${patch_log} - ebegin "Applying patch: ${1/*\//}${pmsg}" - patch ${UNIPATCH_POPTS} -p${plvl} -f < ${1} >> ${patch_log} - eend $? - plvl=6 - else - plvl=$((${plvl} + 1)) - fi - done - if [ ${plvl} -eq 5 ] - then - ewarn "Unable to apply patch: ${1/*\//}" - ewarn "Please attach the following patch log when submitting" - ewarn "a bug." - ewarn "${patch_log}" - die "Unable to apply patch: ${1/*\//}" - fi -} - -edebug() { - local verbosity msg - verbos=${1} - shift - msg=${@} - - VERBOSITY=${VERBOSITY:-0} - [ ${VERBOSITY} -ge ${verbos} ] && echo "(DD): ${msg}" -} |