A script to clean obsolete sstate cache files
There would be many obsolete cache files in the SSTATE_DIR after several builds, this script can remove the obsolete one for a pkg, only leave the up to date one. Here is the help text: sstate-cache-management.sh <OPTION> Options: --help, -h Display this help and exit. --cache-dir=<sstate cache dir> Specify sstate cache directory, will use the environment variable SSTATE_CACHE_DIR if it is not specified. --remove-duplicated Remove the duplicated sstate cache files of one package, only the newest one would be kept. [YOCTO #1682] (From OE-Core rev: 7c99ef6d2173b14e1109a540ee5ae47b56d707e7) Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
ef29851fe8
commit
6224e30834
|
@ -0,0 +1,135 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2012 Wind River Systems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License version 2 as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
usage () {
|
||||
cat << EOF
|
||||
Welcome to sstate cache management utilities.
|
||||
sstate-cache-management.sh <OPTION>
|
||||
|
||||
Options:
|
||||
--help, -h
|
||||
Display this help and exit.
|
||||
|
||||
--cache-dir=<sstate cache dir>
|
||||
Specify sstate cache directory, will use the environment
|
||||
variable SSTATE_CACHE_DIR if it is not specified.
|
||||
|
||||
--remove-duplicated
|
||||
Remove the duplicated sstate cache files of one package, only
|
||||
the newest one would be kept.
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Print error information and exit.
|
||||
echo_error () {
|
||||
echo "ERROR: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Remove the duplicated cache files for the pkg, keep the newest one
|
||||
remove_duplicated () {
|
||||
local all_suffixes="$1"
|
||||
local ava_archs="$2"
|
||||
local total_deleted=0
|
||||
for suffix in $all_suffixes; do
|
||||
local deleted=0
|
||||
echo -n "Removing the sstate-xxx_$suffix.tgz ... "
|
||||
# sed twice to avoid the greedy match
|
||||
file_names=`for arch in $ava_archs; do
|
||||
ls sstate-*-$arch-*_$suffix.tgz 2>/dev/null | \
|
||||
sed -e 's/\(.*\)-'"$arch"'-.*/\1/' \
|
||||
-e 's/\(.*\)-'"$arch"'-.*/\1/'
|
||||
done | sort -u`
|
||||
|
||||
for fn in $file_names; do
|
||||
for arch in $ava_archs; do
|
||||
ls $fn-$arch-*_$suffix.tgz 2>/dev/null >>/tmp/$fn
|
||||
done
|
||||
# Also delete the .siginfo file
|
||||
to_del=$(ls -t $(cat /tmp/$fn) | sed -n '1!p' | sed -e 'p' -e 's/$/.siginfo/')
|
||||
rm -f $to_del
|
||||
let deleted=$deleted+`echo $to_del | wc -w`
|
||||
rm -f /tmp/$fn
|
||||
done
|
||||
echo "($deleted files)"
|
||||
let total_deleted=$total_deleted+$deleted
|
||||
done
|
||||
echo "$total_deleted files have been removed"
|
||||
}
|
||||
|
||||
# Parse arguments
|
||||
while [ -n "$1" ]; do
|
||||
case $1 in
|
||||
--cache-dir=*)
|
||||
cache_dir=`echo $1 | sed -e 's#^--cache-dir=##' -e 's#/*$##' | xargs readlink -f`
|
||||
[ -d "$cache_dir" ] || echo_error "Invalid argument to --cache-dir"
|
||||
shift
|
||||
;;
|
||||
--remove-duplicated)
|
||||
rm_duplicated="yes"
|
||||
shift
|
||||
;;
|
||||
--help|-h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Invalid arguments $*"
|
||||
echo_error "Try 'sstate-cache-management.sh -h' for more information."
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# sstate cache directory, use environment variable SSTATE_CACHE_DIR
|
||||
# if it was not specified, otherwise, error.
|
||||
[ -n "$cache_dir" ] || cache_dir=$SSTATE_CACHE_DIR
|
||||
[ -d "$cache_dir" ] || echo_error "Invalid cache directory \"$cache_dir\""
|
||||
|
||||
cache_dir=`readlink -f $cache_dir`
|
||||
|
||||
topdir=$(dirname $(dirname $(readlink -f $0)))
|
||||
tunedir=$topdir/meta/conf/machine/include
|
||||
[ -d $tunedir ] || echo_error "Can't find the tune directory"
|
||||
|
||||
# Use the "_" to substitute "-", e.g., x86-64 to x86_64
|
||||
all_archs=`grep -r DEFAULTTUNE $tunedir | \
|
||||
sed -e 's/.*\"\(.*\)\"/\1/' -e 's/-/_/g' | sort -u`
|
||||
# Add the qemu archs
|
||||
all_archs="$all_archs qemuarm qemux86 qemumips qemuppc"
|
||||
|
||||
all_suffixes="deploy-rpm deploy-ipk deploy-deb deploy package populate-lic populate-sysroot"
|
||||
|
||||
cd $cache_dir
|
||||
|
||||
echo "Figuring out the archs in the sstate cache dir ..."
|
||||
for arch in $all_archs; do
|
||||
ls | grep -q -w $arch
|
||||
[ $? -eq 0 ] && ava_archs="$ava_archs $arch"
|
||||
done
|
||||
echo "The following archs have been found in the sstate cache dir:"
|
||||
echo $ava_archs
|
||||
|
||||
if [ "$rm_duplicated" == "yes" -a -n "$ava_archs" ]; then
|
||||
remove_duplicated "$all_suffixes" "$ava_archs"
|
||||
fi
|
Loading…
Reference in New Issue