Version 1.7.b4.3 - 02/May/2016

- Optimized code for generating ChangeLogs. (phenixia2003)
This commit is contained in:
Matteo Rossini 2016-05-02 22:44:59 +02:00
parent 15bab88651
commit 80cf09386d
3 changed files with 64 additions and 27 deletions

View file

@ -1,3 +1,6 @@
Version 1.7.b4.3 - 02/May/2016
- Optimized code for generating ChangeLogs. (phenixia2003)
Version 1.7.b4.2 - 18/Apr/2016
- Improved cached downloader with specifics output for ChangeLogs
- Fixed a bug in TAG_PRIORITY when the package is not installed

View file

@ -1,3 +1,6 @@
Version 1.7.b4.3 - 02/May/2016
- Optimized code for generating ChangeLogs. (phenixia2003)
Version 1.7.b4.2 - 18/Apr/2016
- Improved cached downloader with specifics output for ChangeLogs
- Fixed a bug in TAG_PRIORITY when the package is not installed

View file

@ -129,6 +129,10 @@ if [ "$SLACKPKGPLUS" = "on" ];then
# Override cleanup() to improve log messages and debug functions
#
function cleanup(){
# Get the current exit-code so that we can check if cleanup is
# called in response of a CTRL+C (ie. $?=130) or not.
local lEcode=$?
if [ "$CMD" == "info" ];then
DETAILED_INFO=${DETAILED_INFO:-none}
[[ "$DETAILED_INFO" != "none" ]]&&more_info
@ -138,6 +142,19 @@ if [ "$SLACKPKGPLUS" = "on" ];then
if [ "$ANSWER" != "Y" ] && [ "$ANSWER" != "y" ]; then
touch $WORKDIR/pkglist
fi
# When cleanup() has not been called in response of a CTRL+C, copy
# the files -downloaded and generated by getfile()- from
# TMPDIR/ChangeLogs into WORKDIR/ChangeLogs
#
if [ $lEcode -ne 130 ] && [ -e ${TMPDIR}/ChangeLogs ] ; then
if [ ! -e ${WORKDIR}/ChangeLogs ] ; then
mkdir ${WORKDIR}/ChangeLogs
else
rm -f ${WORKDIR}/ChangeLogs/*
fi
cp ${TMPDIR}/ChangeLogs/* ${WORKDIR}/ChangeLogs
fi
fi
[ "$TTYREDIRECTION" ] && exec 1>&3 2>&4
[ "$SPINNING" = "off" ] || tput cnorm
@ -564,18 +581,21 @@ if [ "$SLACKPKGPLUS" = "on" ];then
fi
if [ $(basename $1) = "ChangeLog.txt" ];then
# ChangeLog.txt from slackware and 3rd party repository are merged
# into WORKDIR/Unified-ChangeLog.txt
# ChangeLog.txt from slackware and 3rd party repository are stored
# into TMPDIR/ChangeLogs directory. This directory is automatically
# moved into WORKDIR by function cleanup() unless when this function
# is called in response to a CTRL+C
#
# At this point, ChangeLog.txt from slackware has been already
# download and is stored in WORKDIR/ChangeLog.txt
# see http://www.linuxquestions.org/questions/slackware-14/slackpkg-vs-third-party-package-repository-4175427364/page35.html#post5537830
cat $WORKDIR/ChangeLog.txt > $WORKDIR/Unified-ChangeLog.txt
mkdir ${TMPDIR}/ChangeLogs
# Copy slackware ChangeLog.txt into directory dedicated to changelogs...
cat ${TMPDIR}/ChangeLog.txt > ${TMPDIR}/ChangeLogs/slackware.txt
for PREPO in ${REPOPLUS[*]}; do
echo "======== Repository: $PREPO ========" >>${WORKDIR}/Unified-ChangeLog.txt
BASEDIR=${MIRRORPLUS[${PREPO/SLACKPKGPLUS_}]%}
CLOGNAM=ChangeLog-$PREPO.txt
CLOGNAM=$PREPO.txt
LIMIT=1
@ -604,24 +624,26 @@ if [ "$SLACKPKGPLUS" = "on" ];then
done
if [ -s ${TMPDIR}/$CLOGNAM ] ; then
echo -e " Merging ChangeLog.txt from repository $PREPO with Unified-ChangeLog.txt.\n"
cat ${TMPDIR}/$CLOGNAM >> ${WORKDIR}/Unified-ChangeLog.txt
echo -e " Saving ChangeLog.txt from repository $PREPO ...\n"
cat ${TMPDIR}/$CLOGNAM >> ${TMPDIR}/ChangeLogs/$CLOGNAM
else
echo -e " Repository $PREPO has no ChangeLog.txt.\n"
fi
done
# Extract each package entry in Unified-ChangeLog.txt and store them in
# $WORKDIR/Unified-ChangeLog.idx which is used by showChangeLogInfo()
# For each <reponame>.txt file in TMPDIR/ChangeLogs, create a corresponding
# <reponame>.idx which is used by showChangeLogInfo()
#
# The output file is formatted as below :
# <idx>:<pathname>: <status>
#
# <idx> is the line index of the entry in original Unified-ChangeLog.txt
# <idx> is the line index of the entry in original changelog <reponame>.txt
# <pathname> is the full pathname of the package (ie. a/cryptsetup-1.7.1-x86_64-1.txz)
# <status> is the package status, which can be added,moved,rebuilt,removed,upgraded)
#
grep -inE "$CLOG_PKGREGEX" ${WORKDIR}/Unified-ChangeLog.txt > ${WORKDIR}/Unified-ChangeLog.idx
for PREPO in slackware ${REPOPLUS[*]} ; do
grep -inE "$CLOG_PKGREGEX" ${TMPDIR}/ChangeLogs/$PREPO.txt > ${TMPDIR}/ChangeLogs/$PREPO.idx
done
for PREPO in ${REPOPLUS[*]};do
# Not all repositories have the ChangeLog.txt, so I use md5 of CHECKSUMS.md5 instead
@ -1168,33 +1190,42 @@ if [ "$SLACKPKGPLUS" = "on" ];then
function showChangeLogInfo() {
local Cpkg
local CpkgInfos
local CLogIdxFile
local CLogStartIdx
local Pathname
local Status
local Cline
local Repository
echo -n "" > $TMPDIR/Packages.clog
for Cpkg in $(<$TMPDIR/dialog.out) ; do
# get infos about the current package from changeLog-packages.idx file, if any. The
# variable CpkgInfos is a string formatted as below:
# <clogidx>:<pathname>: <status>
# get infos about the current package from *.idx files in WORKDIR/ChangeLogs,
# if any. The variable CpkgInfos is a string formatted as below:
# path/<reponame>.idx:<clogidx>:<pathname>:<status>
#
# clogidx=line index of the entry in ChangeLog.txt that match Cpkg
# clogidx=line index of the entry in WORKDIR/ChangeLogs/<reponame>.txt that match Cpkg
#
CpkgInfos=( $(grep $Cpkg $WORKDIR/Unified-ChangeLog.idx | tr ":" " ") )
CpkgInfos=( $(grep -R $Cpkg $WORKDIR/ChangeLogs/*.idx | tr ":" " ") )
if [ ! -z "$CpkgInfos" ] ; then
CLogStartIdx=${CpkgInfos[0]}
Pathname=${CpkgInfos[1]}
Status=$(echo ${CpkgInfos[2]} | tr --delete " .")
CLogIdxFile=${CpkgInfos[0]}
CLogStartIdx=${CpkgInfos[1]}
Pathname=${CpkgInfos[2]}
Status=$(echo ${CpkgInfos[3]} | tr --delete " .")
echo "$Pathname ($Status)" >> $TMPDIR/Packages.clog
# Get the repository name containing a changelog entry about the current
# package (ie Cpkg).
#
Repository=$(basename $CLogIdxFile .idx)
# extra information on package Cpkg can be found in ChangeLog.txt file
# starting at line CLogStartIdx+1 and ending the line before the first
# line matching the regular expression CLOG_SEPREGEX or CLOG_PKGREGEX.
echo "$Repository::$Pathname ($Status)" >> $TMPDIR/Packages.clog
# extra information on package Cpkg can be found in file
# WORKDIR/ChangeLogs/${Repository}.txt starting at line
# CLogStartIdx+1 and ending the line before the first line matching
# the regular expression CLOG_SEPREGEX or CLOG_PKGREGEX.
#
# CLOG_SEPREGEX match the "standard" changelog separator entry, ie. a string
# which start with a plus followed by dashes and a plus. For instance:
@ -1207,7 +1238,7 @@ if [ "$SLACKPKGPLUS" = "on" ];then
((CLogStartIdx++))
tail -n "+$CLogStartIdx" $WORKDIR/Unified-ChangeLog.txt | while read Cline ; do
tail -n "+$CLogStartIdx" $WORKDIR/ChangeLogs/${Repository}.txt | while read Cline ; do
if ! echo "$Cline" | grep -qiE "($CLOG_SEPREGEX)|($CLOG_PKGREGEX)" ; then
echo -e " $Cline" >> $TMPDIR/Packages.clog
else
@ -1504,7 +1535,7 @@ if [ "$SLACKPKGPLUS" = "on" ];then
fi
SPKGPLUS_VERSION="1.7.b4.2"
SPKGPLUS_VERSION="1.7.b4.3"
VERSION="$VERSION / slackpkg+ $SPKGPLUS_VERSION"