Files
build/bin/build_last_changed
2015-07-18 01:14:47 +02:00

74 lines
1.9 KiB
Bash
Executable File

#!/bin/bash
# Quick and dirty script to install the package changed
# last in a recently changed overlay.
# Copyright 2015 Sławomir Nizio
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
if [[ -e /sabayon/bin/buildrc ]]; then
. /sabayon/bin/buildrc || exit 2
else
echo "Warning: buildrc not found" >&2
fi
overlays_dir=${1:-/var/lib/layman}
conventions="sabayon-distro:sabayon sabayon:for-gentoo"
for c in ${conventions}; do
o1=${c%:*}
o2=${c#*:}
if [[ -e ${overlays_dir}/${o1} && -e ${overlays_dir}/${o2} ]]; then
break
fi
done
o1_name=sabayon-distro
o2_name=sabayon
post=/.git/index
ind1=${overlays_dir}/${o1}${post}
ind2=${overlays_dir}/${o2}${post}
if [[ ! -e ${ind1} || ! -e ${ind2} ]]; then
echo "Either ${ind1} or ${ind2} not found (or even both)!" >&2
exit 1
fi
if [[ ${ind1} -nt ${ind2} ]]; then
newer=${o1}
name=${o1_name}
else
newer=${o2}
name=${o2_name}
fi
echo "taking from ${newer}"
changes=$(git --work-tree="${overlays_dir}/${newer}" \
--git-dir="${overlays_dir}/${newer}/.git" \
diff-tree --name-status -r --no-commit-id HEAD) || exit 1
echo "changes for the last commit:"
echo "${changes}"
# This can be made by one command but well, lol.
pkg_changes=$(echo "${changes}" | grep -v "^D" \
| sed -r -e 's/^[a-zA-Z0-9]+[[:space:]]*//' -e 's:^([^/]+/[^/]+).*:\1:' \
| sort -u | grep -E '^(virtual/|[^/]+-)' | awk "{print \$1 \"::${name}\"}")
echo "packages to install:"
echo "${pkg_changes}"
set -f
emerge -av ${pkg_changes}