stagemanager: Move functionality into the scripts directory

Since scripts is now in PATH thanks to the layer functionality there is
no longer any need to have this recipe full of special cases, the scripts
can just be placed there.

Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
Richard Purdie
2010-07-22 11:41:00 +01:00
parent dc807f54f8
commit 897a8b5abc
5 changed files with 0 additions and 31 deletions

156
scripts/stage-manager Executable file
View File

@@ -0,0 +1,156 @@
#!/usr/bin/env python
# Copyright (C) 2006-2007 Richard Purdie
#
# 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.
import optparse
import os, sys, stat
__version__ = "0.0.1"
def write_cache(cachefile, cachedata):
fd = open(cachefile, 'w')
for f in cachedata:
s = f + '|' + str(cachedata[f]['ts']) + '|' + str(cachedata[f]['size'])
fd.write(s + '\n')
fd.close()
def read_cache(cachefile):
cache = {}
f = open(cachefile, 'r')
lines = f.readlines()
f.close()
for l in lines:
data = l.split('|')
cache[data[0]] = {}
cache[data[0]]['ts'] = int(data[1])
cache[data[0]]['size'] = int(data[2])
cache[data[0]]['seen'] = False
return cache
def mkdirhier(dir):
"""Create a directory like 'mkdir -p', but does not complain if
directory already exists like os.makedirs
"""
try:
os.makedirs(dir)
except OSError, e:
if e.errno != 17: raise e
if __name__ == "__main__":
parser = optparse.OptionParser( version = "Metadata Stage Manager version %s" % ( __version__ ),
usage = """%prog [options]\n\nPerforms mamagement tasks on a metadata staging area.""" )
parser.add_option( "-p", "--parentdir", help = "the path to the metadata parent directory",
action = "store", dest = "parentdir", default = None)
parser.add_option( "-c", "--cachefile", help = "the cache file to use",
action = "store", dest = "cachefile", default = None)
parser.add_option( "-d", "--copydir", help = "copy changed files to this directory",
action = "store", dest = "copydir", default = None)
parser.add_option( "-u", "--update", help = "update the cache file",
action = "store_true", dest = "update", default = False)
(options, args) = parser.parse_args()
if options.parentdir is None:
print("Error, --parentdir option not supplied")
sys.exit(1)
if options.cachefile is None:
print("Error, --cachefile option not supplied")
sys.exit(1)
if not options.parentdir.endswith('/'):
options.parentdir = options.parentdir + '/'
cache = {}
if os.access(options.cachefile, os.F_OK):
cache = read_cache(options.cachefile)
found_difference = False
def updateCache(path, fstamp):
cache[path] = {}
cache[path]['ts'] = fstamp[stat.ST_MTIME]
cache[path]['size'] = fstamp[stat.ST_SIZE]
cache[path]['seen'] = True
found_difference = True
def copyfile(path):
if options.copydir:
copypath = os.path.join(options.copydir, path.replace(options.parentdir, '', 1))
mkdirhier(os.path.split(copypath)[0])
os.system("cp -dp " + path + " " + copypath)
def copydir(path, fstamp):
if options.copydir:
copypath = os.path.join(options.copydir, path.replace(options.parentdir, '', 1))
if os.path.exists(copypath):
os.system("rm -rf " + copypath)
if os.path.islink(path):
os.symlink(os.readlink(path), copypath)
else:
mkdirhier(copypath)
os.utime(copypath, (fstamp[stat.ST_ATIME], fstamp[stat.ST_MTIME]))
for root, dirs, files in os.walk(options.parentdir):
for f in files:
path = os.path.join(root, f)
if not os.access(path, os.R_OK):
continue
fstamp = os.lstat(path)
if path not in cache:
print "new file %s" % path
updateCache(path, fstamp)
copyfile(path)
else:
if cache[path]['ts'] != fstamp[stat.ST_MTIME] or cache[path]['size'] != fstamp[stat.ST_SIZE]:
print "file %s changed" % path
updateCache(path, fstamp)
copyfile(path)
cache[path]['seen'] = True
for d in dirs:
path = os.path.join(root, d)
fstamp = os.lstat(path)
if path not in cache:
print "new dir %s" % path
updateCache(path, fstamp)
copydir(path, fstamp)
else:
if cache[path]['ts'] != fstamp[stat.ST_MTIME]:
print "dir %s changed" % path
updateCache(path, fstamp)
copydir(path, fstamp)
cache[path]['seen'] = True
todel = []
for path in cache:
if not cache[path]['seen']:
print "%s removed" % path
found_difference = True
todel.append(path)
if options.update:
print "Updating"
for path in todel:
del cache[path]
mkdirhier(os.path.split(options.cachefile)[0])
write_cache(options.cachefile, cache)
if found_difference:
sys.exit(5)
sys.exit(0)

1186
scripts/stage-manager-ipkg Executable file

File diff suppressed because it is too large Load Diff

246
scripts/stage-manager-ipkg-build Executable file
View File

@@ -0,0 +1,246 @@
#!/bin/sh
# ipkg-build -- construct a .ipk from a directory
# Carl Worth <cworth@east.isi.edu>
# based on a script by Steve Redler IV, steve@sr-tech.com 5-21-2001
# 2003-04-25 rea@sr.unh.edu
# Updated to work on Familiar Pre0.7rc1, with busybox tar.
# Note it Requires: binutils-ar (since the busybox ar can't create)
# For UID debugging it needs a better "find".
set -e
version=1.0
ipkg_extract_value() {
sed -e "s/^[^:]*:[[:space:]]*//"
}
required_field() {
field=$1
value=`grep "^$field:" < $CONTROL/control | ipkg_extract_value`
if [ -z "$value" ]; then
echo "*** Error: $CONTROL/control is missing field $field" >&2
return 1
fi
echo $value
return 0
}
disallowed_field() {
field=$1
value=`grep "^$field:" < $CONTROL/control | ipkg_extract_value`
if [ -n "$value" ]; then
echo "*** Error: $CONTROL/control contains disallowed field $field" >&2
return 1
fi
echo $value
return 0
}
pkg_appears_sane() {
local pkg_dir=$1
local owd=`pwd`
cd $pkg_dir
PKG_ERROR=0
tilde_files=`find . -name '*~'`
if [ -n "$tilde_files" ]; then
if [ "$noclean" = "1" ]; then
echo "*** Warning: The following files have names ending in '~'.
You probably want to remove them: " >&2
ls -ld $tilde_files
echo >&2
else
echo "*** Removing the following files: $tilde_files"
rm -f "$tilde_files"
fi
fi
large_uid_files=`find . -uid +99 || true`
if [ "$ogargs" = "" ] && [ -n "$large_uid_files" ]; then
echo "*** Warning: The following files have a UID greater than 99.
You probably want to chown these to a system user: " >&2
ls -ld $large_uid_files
echo >&2
fi
if [ ! -f "$CONTROL/control" ]; then
echo "*** Error: Control file $pkg_dir/$CONTROL/control not found." >&2
cd $owd
return 1
fi
pkg=`required_field Package`
[ "$?" -ne 0 ] && PKG_ERROR=1
version=`required_field Version | sed 's/Version://; s/^.://g;'`
[ "$?" -ne 0 ] && PKG_ERROR=1
arch=`required_field Architecture`
[ "$?" -ne 0 ] && PKG_ERROR=1
required_field Maintainer >/dev/null
[ "$?" -ne 0 ] && PKG_ERROR=1
required_field Description >/dev/null
[ "$?" -ne 0 ] && PKG_ERROR=1
section=`required_field Section`
[ "$?" -ne 0 ] && PKG_ERROR=1
if [ -z "$section" ]; then
echo "The Section field should have one of the following values:" >&2
echo "admin, base, comm, editors, extras, games, graphics, kernel, libs, misc, net, text, web, x11" >&2
fi
priority=`required_field Priority`
[ "$?" -ne 0 ] && PKG_ERROR=1
if [ -z "$priority" ]; then
echo "The Priority field should have one of the following values:" >&2
echo "required, important, standard, optional, extra." >&2
echo "If you don't know which priority value you should be using, then use \`optional'" >&2
fi
source=`required_field Source`
[ "$?" -ne 0 ] && PKG_ERROR=1
if [ -z "$source" ]; then
echo "The Source field contain the URL's or filenames of the source code and any patches"
echo "used to build this package. Either gnu-style tarballs or Debian source packages "
echo "are acceptable. Relative filenames may be used if they are distributed in the same"
echo "directory as the .ipk file."
fi
disallowed_filename=`disallowed_field Filename`
[ "$?" -ne 0 ] && PKG_ERROR=1
if echo $pkg | grep '[^a-z0-9.+-]'; then
echo "*** Error: Package name $name contains illegal characters, (other than [a-z0-9.+-])" >&2
PKG_ERROR=1;
fi
local bad_fields=`sed -ne 's/^\([^[:space:]][^:[:space:]]\+[[:space:]]\+\)[^:].*/\1/p' < $CONTROL/control | sed -e 's/\\n//'`
if [ -n "$bad_fields" ]; then
bad_fields=`echo $bad_fields`
echo "*** Error: The following fields in $CONTROL/control are missing a ':'" >&2
echo " $bad_fields" >&2
echo "ipkg-build: This may be due to a missing initial space for a multi-line field value" >&2
PKG_ERROR=1
fi
for script in $CONTROL/preinst $CONTROL/postinst $CONTROL/prerm $CONTROL/postrm; do
if [ -f $script -a ! -x $script ]; then
echo "*** Error: package script $script is not executable" >&2
PKG_ERROR=1
fi
done
if [ -f $CONTROL/conffiles ]; then
for cf in `cat $CONTROL/conffiles`; do
if [ ! -f ./$cf ]; then
echo "*** Error: $CONTROL/conffiles mentions conffile $cf which does not exist" >&2
PKG_ERROR=1
fi
done
fi
cd $owd
return $PKG_ERROR
}
###
# ipkg-build "main"
###
ogargs=""
outer=ar
noclean=0
usage="Usage: $0 [-c] [-C] [-o owner] [-g group] <pkg_directory> [<destination_directory>]"
while getopts "cg:ho:v" opt; do
case $opt in
o ) owner=$OPTARG
ogargs="--owner=$owner"
;;
g ) group=$OPTARG
ogargs="$ogargs --group=$group"
;;
c ) outer=tar
;;
C ) noclean=1
;;
v ) echo $version
exit 0
;;
h ) echo $usage >&2 ;;
\? ) echo $usage >&2
esac
done
shift $(($OPTIND - 1))
# continue on to process additional arguments
case $# in
1)
dest_dir=$PWD
;;
2)
dest_dir=$2
if [ "$dest_dir" = "." -o "$dest_dir" = "./" ] ; then
dest_dir=$PWD
fi
;;
*)
echo $usage >&2
exit 1
;;
esac
pkg_dir=$1
if [ ! -d $pkg_dir ]; then
echo "*** Error: Directory $pkg_dir does not exist" >&2
exit 1
fi
# CONTROL is second so that it takes precedence
CONTROL=
[ -d $pkg_dir/DEBIAN ] && CONTROL=DEBIAN
[ -d $pkg_dir/CONTROL ] && CONTROL=CONTROL
if [ -z "$CONTROL" ]; then
echo "*** Error: Directory $pkg_dir has no CONTROL subdirectory." >&2
exit 1
fi
if ! pkg_appears_sane $pkg_dir; then
echo >&2
echo "ipkg-build: Please fix the above errors and try again." >&2
exit 1
fi
tmp_dir=$dest_dir/IPKG_BUILD.$$
mkdir $tmp_dir
echo $CONTROL > $tmp_dir/tarX
( cd $pkg_dir && tar $ogargs -X $tmp_dir/tarX -czf $tmp_dir/data.tar.gz . )
( cd $pkg_dir/$CONTROL && tar $ogargs -czf $tmp_dir/control.tar.gz . )
rm $tmp_dir/tarX
echo "2.0" > $tmp_dir/debian-binary
pkg_file=$dest_dir/${pkg}_${version}_${arch}.ipk
rm -f $pkg_file
if [ "$outer" = "ar" ] ; then
( cd $tmp_dir && ar -crf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
else
( cd $tmp_dir && tar -zcf $pkg_file ./debian-binary ./data.tar.gz ./control.tar.gz )
fi
rm $tmp_dir/debian-binary $tmp_dir/data.tar.gz $tmp_dir/control.tar.gz
rmdir $tmp_dir
echo "Packaged contents of $pkg_dir into $pkg_file"