223 lines
6.0 KiB
Bash
Executable File
223 lines
6.0 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
if [ -z "$CODENAME" ]; then
|
|
echo "update_tasks: codename not specified" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$MIRROR"x = ""x ] ; then
|
|
echo "update_tasks: mirror dir not specified" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$BDIR"x = ""x ] ; then
|
|
echo "update_tasks: temp dir not specified" >&2
|
|
exit 1
|
|
fi
|
|
TDIR=$BDIR/update_tasks
|
|
mkdir -p $TDIR
|
|
|
|
# Sort primary and secondary tasks and add language tasks for both
|
|
# Secondary tasks are indicated by a "-" suffix in the task.list file
|
|
# When adding language tasks, 'desktop' is sorted before '*-desktop'
|
|
expand_task_list () {
|
|
outbase=$1
|
|
tasklist=$2
|
|
langlist=$3
|
|
|
|
# Filter out comments, empty lines and secondary tasks
|
|
task_primary="$(grep -Ev "^(#.*)?(.*-)?[[:space:]]*$" $tasklist)"
|
|
# Select only secondary tasks
|
|
task_secondary="$(grep -Ev "^(#.*)?[[:space:]]*$" $tasklist | \
|
|
grep -E "(.*-)[[:space:]]*$" | sed "s/[[:space:]]\+-.*$//")"
|
|
|
|
echo "# Primary main tasks" >$outbase.primary
|
|
echo "$task_primary" >>$outbase.primary
|
|
|
|
echo >>$outbase.primary
|
|
echo "# Primary language tasks" >>$outbase.primary
|
|
for task in "" $(echo "$task_primary" | grep "^desktop" || true) \
|
|
$(echo "$task_primary" | grep -- "-desktop" || true); do
|
|
for language in $(cat $langlist); do
|
|
echo $language${task:+-$task}
|
|
done
|
|
done >>$outbase.primary
|
|
|
|
rm -f $outbase.secondary
|
|
if [ "$task_secondary" ]; then
|
|
echo "# Secondary main tasks" >$outbase.secondary
|
|
echo "$task_secondary" >>$outbase.secondary
|
|
|
|
echo >>$outbase.secondary
|
|
echo "# Secondary language tasks" >>$outbase.secondary
|
|
for task in $(echo "$task_secondary" | grep "^desktop" || true) \
|
|
$(echo "$task_secondary" | grep -- "-desktop" || true); do
|
|
for language in $(cat $langlist); do
|
|
echo $language-$task
|
|
done
|
|
done >>$outbase.secondary
|
|
fi
|
|
}
|
|
|
|
update_full_list () {
|
|
file=$1
|
|
tasklist=$2
|
|
pkgfile=$3
|
|
|
|
(grep -Ev "^(#.*)?[[:space:]]*$" $tasklist ; echo DONE ; cat $pkgfile) | mawk '
|
|
/DONE/ {
|
|
in_packages = 1
|
|
next
|
|
}
|
|
/.*/ {
|
|
if (!in_packages) {
|
|
tasklist[$1] = num_tasks
|
|
num_tasks++
|
|
}
|
|
}
|
|
/^Package: / {
|
|
if (in_packages) {
|
|
pkgname = $2
|
|
next
|
|
}
|
|
}
|
|
/^Task: / {
|
|
if (in_packages) {
|
|
# Parse the Tasks: line, splitting into array "these"
|
|
gsub("Task: ", "", $0)
|
|
gsub(",", "", $0)
|
|
split($0, these)
|
|
|
|
# And see if we have any matches
|
|
for (task in these) {
|
|
for (taskname in tasklist) {
|
|
if (these[task] == taskname) {
|
|
printf("%d:%s\n", tasklist[taskname], pkgname)
|
|
next
|
|
}
|
|
}
|
|
}
|
|
}
|
|
next
|
|
}' | sort -n | cut -d: -f2 >> $file
|
|
}
|
|
|
|
update_essential_list () {
|
|
file=$1
|
|
tasklist=$2
|
|
tasksel=$3
|
|
|
|
file=$tasksel/usr/share/tasksel/descs/debian-tasks.desc
|
|
if [ ! -e $file ]; then
|
|
file=$tasksel/usr/share/tasksel/debian-tasks.desc
|
|
fi
|
|
|
|
(grep -Ev "^(#.*)?[[:space:]]*$" $tasklist ;
|
|
echo DONE ;
|
|
cat $file) | mawk '
|
|
|
|
/DONE/ {
|
|
in_tasks = 1
|
|
next
|
|
}
|
|
/^ / {
|
|
if (in_key) {
|
|
printf("%d:%s\n", tasklist[cur_task], $1)
|
|
next
|
|
}
|
|
}
|
|
/.*/ {
|
|
if (!in_tasks) {
|
|
tasklist[$1] = num_tasks
|
|
num_tasks++
|
|
}
|
|
if (in_key) {
|
|
in_key = 0
|
|
}
|
|
}
|
|
/^Task: / {
|
|
if (in_tasks) {
|
|
cur_task = $2
|
|
next
|
|
}
|
|
}
|
|
/^Key: / {
|
|
if (in_tasks) {
|
|
for (taskname in tasklist) {
|
|
if (taskname == cur_task) {
|
|
in_key = 1
|
|
}
|
|
}
|
|
}
|
|
next
|
|
}' | sort -s -n -k1 | cut -d: -f2 >> $file
|
|
}
|
|
|
|
# Look for the coreutils package (which should exist in all archs, and is
|
|
# a non -all package) to determine a valid arch for the rest of this
|
|
# script
|
|
arch=$($BASEDIR/tools/which_deb $MIRROR $CODENAME coreutils binary | sed -e "s/\.deb//" -e "s/.*_//")
|
|
# We need to gunzip a copy of the appropriate Packages.gz file(s)
|
|
TMP_PKG=$TDIR/Packages
|
|
zcat $MIRROR/dists/$CODENAME/main/binary-$arch/Packages.gz > $TMP_PKG
|
|
if [ -n "$LOCAL" ] ; then
|
|
if [ -n "$LOCALDEBS" ] ; then
|
|
zcat $LOCALDEBS/dists/$CODENAME/local/binary-$arch/Packages.gz >> $TMP_PKG
|
|
else
|
|
zcat $MIRROR/dists/$CODENAME/local/binary-$arch/Packages.gz >> $TMP_PKG
|
|
fi
|
|
fi
|
|
|
|
# Now grab the appropriate tasksel package
|
|
TASKSEL_DEB=$MIRROR/`mawk '
|
|
/^Package: tasksel-data$/ { found=1 }
|
|
/^Filename:/ { if (found==1) { print $2; exit } }' $TMP_PKG`
|
|
|
|
# For testing purposes - set up FORCE_SID_TASKSEL to force us to use
|
|
# sid's tasksel data even if we're using stable/testing.
|
|
if [ "$FORCE_SID_TASKSEL"x = "1"x ] ; then
|
|
echo "update_tasks: forcing use of the sid tasksel-data tasks"
|
|
TASKSEL_DEB=$MIRROR/$($BASEDIR/tools/which_deb $MIRROR sid tasksel-data binary)
|
|
fi
|
|
|
|
dpkg -x $TASKSEL_DEB $TDIR/tasksel
|
|
|
|
[ -e task.languages ] || exit 1
|
|
grep -Ev "^(#.*)?[[:space:]]*$" task.languages > $TDIR/languages
|
|
|
|
for tlist in task.list.*; do
|
|
variant=${tlist##*.}
|
|
|
|
expand_task_list task.gen.$variant $tlist $TDIR/languages
|
|
|
|
# Create (empty) output files
|
|
: >task-essential-$variant
|
|
: >task-full-$variant
|
|
|
|
update_essential_list \
|
|
task-essential-$variant \
|
|
task.gen.$variant.primary \
|
|
$TDIR/tasksel
|
|
|
|
update_full_list \
|
|
task-full-$variant \
|
|
task.gen.$variant.primary \
|
|
$TMP_PKG
|
|
|
|
# Now add packages for secondary tasks; start with Key packages again
|
|
if [ -e task.gen.$variant.secondary ]; then
|
|
update_essential_list \
|
|
task-full-$variant \
|
|
task.gen.$variant.secondary \
|
|
$TDIR/tasksel
|
|
|
|
update_full_list \
|
|
task-full-$variant \
|
|
task.gen.$variant.secondary \
|
|
$TMP_PKG
|
|
fi
|
|
done
|
|
|
|
rm -rf $TDIR
|