mirror of
https://github.com/deajan/osync
synced 2024-11-17 09:25:42 +00:00
Merge pull request #70 from Shadowigor/arch-pkg-update
Add script to automatically update the PKGBUILD
This commit is contained in:
commit
cc2875f2d7
@ -1,32 +0,0 @@
|
||||
# Maintainer: Shadowigor <shadowigorr at gmail dot com>
|
||||
pkgname="osync"
|
||||
pkgver=v1.00.r219.f70d8cd
|
||||
pkgrel=1
|
||||
pkgdesc="A two way filesync script"
|
||||
arch=("any")
|
||||
url="https://github.com/deajan/osync"
|
||||
license=('custom')
|
||||
depends=('rsync')
|
||||
makedepends=('git')
|
||||
provides=("$pkgname")
|
||||
source=('git+https://github.com/deajan/osync.git#branch=stable')
|
||||
md5sums=('SKIP')
|
||||
|
||||
pkgver()
|
||||
{
|
||||
cd "$srcdir/$pkgname"
|
||||
printf "%s" "$(git describe --long | sed 's/\([^-]*-\)g/r\1/;s/-/./g')"
|
||||
}
|
||||
|
||||
prepare()
|
||||
{
|
||||
cd "$pkgname"
|
||||
find . -type f -exec sed -i "s:/usr/local:/usr:g" {} ";"
|
||||
find . -type f -exec sed -i "s:/lib:/usr/lib:g" {} ";"
|
||||
}
|
||||
|
||||
package()
|
||||
{
|
||||
cd "$pkgname"
|
||||
echo n | FAKEROOT="$pkgdir" bash ./install.sh > /dev/null
|
||||
}
|
262
packaging/ARCH/mksrcinfo
Executable file
262
packaging/ARCH/mksrcinfo
Executable file
@ -0,0 +1,262 @@
|
||||
#!/bin/bash
|
||||
|
||||
shopt -s extglob
|
||||
|
||||
array_build() {
|
||||
local dest=$1 src=$2 i keys values
|
||||
|
||||
# it's an error to try to copy a value which doesn't exist.
|
||||
declare -p "$2" &>/dev/null || return 1
|
||||
|
||||
# Build an array of the indicies of the source array.
|
||||
eval "keys=(\"\${!$2[@]}\")"
|
||||
|
||||
# Clear the destination array
|
||||
eval "$dest=()"
|
||||
|
||||
# Read values indirectly via their index. This approach gives us support
|
||||
# for associative arrays, sparse arrays, and empty strings as elements.
|
||||
for i in "${keys[@]}"; do
|
||||
values+=("printf -v '$dest[$i]' %s \"\${$src[$i]}\";")
|
||||
done
|
||||
|
||||
eval "${values[*]}"
|
||||
}
|
||||
|
||||
funcgrep() {
|
||||
{ declare -f "$1" || declare -f package; } 2>/dev/null | grep -E "$2"
|
||||
}
|
||||
|
||||
extract_global_var() {
|
||||
# $1: variable name
|
||||
# $2: multivalued
|
||||
# $3: name of output var
|
||||
|
||||
local attr=$1 isarray=$2 outputvar=$3
|
||||
|
||||
if (( isarray )); then
|
||||
declare -n ref=$attr
|
||||
# Still need to use array_build here because we can't handle the scoping
|
||||
# semantics that would be included with the use of 'declare -n'.
|
||||
[[ ${ref[@]} ]] && array_build "$outputvar" "$attr"
|
||||
else
|
||||
[[ ${!attr} ]] && printf -v "$outputvar" %s "${!attr}"
|
||||
fi
|
||||
}
|
||||
|
||||
extract_function_var() {
|
||||
# $1: function name
|
||||
# $2: variable name
|
||||
# $3: multivalued
|
||||
# $4: name of output var
|
||||
|
||||
local funcname=$1 attr=$2 isarray=$3 outputvar=$4 attr_regex= decl= r=1
|
||||
|
||||
if (( isarray )); then
|
||||
printf -v attr_regex '^[[:space:]]* %s\+?=\(' "$2"
|
||||
else
|
||||
printf -v attr_regex '^[[:space:]]* %s\+?=[^(]' "$2"
|
||||
fi
|
||||
|
||||
while read -r; do
|
||||
# strip leading whitespace and any usage of declare
|
||||
decl=${REPLY##*([[:space:]])}
|
||||
eval "${decl/#$attr/$outputvar}"
|
||||
|
||||
# entering this loop at all means we found a match, so notify the caller.
|
||||
r=0
|
||||
done < <(funcgrep "$funcname" "$attr_regex")
|
||||
|
||||
return $r
|
||||
}
|
||||
|
||||
pkgbuild_get_attribute() {
|
||||
# $1: package name
|
||||
# $2: attribute name
|
||||
# $3: multivalued
|
||||
# $4: name of output var
|
||||
|
||||
local pkgname=$1 attrname=$2 isarray=$3 outputvar=$4
|
||||
|
||||
printf -v "$outputvar" %s ''
|
||||
|
||||
if [[ $pkgname ]]; then
|
||||
extract_global_var "$attrname" "$isarray" "$outputvar"
|
||||
extract_function_var "package_$pkgname" "$attrname" "$isarray" "$outputvar"
|
||||
else
|
||||
extract_global_var "$attrname" "$isarray" "$outputvar"
|
||||
fi
|
||||
}
|
||||
|
||||
srcinfo_open_section() {
|
||||
printf '%s = %s\n' "$1" "$2"
|
||||
}
|
||||
|
||||
srcinfo_close_section() {
|
||||
echo
|
||||
}
|
||||
|
||||
srcinfo_write_attr() {
|
||||
# $1: attr name
|
||||
# $2: attr values
|
||||
|
||||
local attrname=$1 attrvalues=("${@:2}")
|
||||
|
||||
# normalize whitespace, strip leading and trailing
|
||||
attrvalues=("${attrvalues[@]//+([[:space:]])/ }")
|
||||
attrvalues=("${attrvalues[@]#[[:space:]]}")
|
||||
attrvalues=("${attrvalues[@]%[[:space:]]}")
|
||||
|
||||
printf "\t$attrname = %s\n" "${attrvalues[@]}"
|
||||
}
|
||||
|
||||
pkgbuild_extract_to_srcinfo() {
|
||||
# $1: pkgname
|
||||
# $2: attr name
|
||||
# $3: multivalued
|
||||
|
||||
local pkgname=$1 attrname=$2 isarray=$3 outvalue=
|
||||
|
||||
if pkgbuild_get_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then
|
||||
srcinfo_write_attr "$attrname" "${outvalue[@]}"
|
||||
fi
|
||||
}
|
||||
|
||||
srcinfo_write_section_details() {
|
||||
local attr package_arch a
|
||||
local multivalued_arch_attrs=(source provides conflicts depends replaces
|
||||
optdepends makedepends checkdepends
|
||||
{md5,sha{1,224,256,384,512}}sums)
|
||||
|
||||
for attr in "${singlevalued[@]}"; do
|
||||
pkgbuild_extract_to_srcinfo "$1" "$attr" 0
|
||||
done
|
||||
|
||||
for attr in "${multivalued[@]}"; do
|
||||
pkgbuild_extract_to_srcinfo "$1" "$attr" 1
|
||||
done
|
||||
|
||||
pkgbuild_get_attribute "$1" 'arch' 1 'package_arch'
|
||||
for a in "${package_arch[@]}"; do
|
||||
# 'any' is special. there's no support for, e.g. depends_any.
|
||||
[[ $a = any ]] && continue
|
||||
|
||||
for attr in "${multivalued_arch_attrs[@]}"; do
|
||||
pkgbuild_extract_to_srcinfo "$1" "${attr}_$a" 1
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
srcinfo_write_global() {
|
||||
local singlevalued=(pkgdesc pkgver pkgrel epoch url install changelog)
|
||||
local multivalued=(arch groups license checkdepends makedepends
|
||||
depends optdepends provides conflicts replaces
|
||||
noextract options backup
|
||||
source {md5,sha{1,224,256,384,512}}sums)
|
||||
|
||||
srcinfo_open_section 'pkgbase' "${pkgbase:-$pkgname}"
|
||||
srcinfo_write_section_details ''
|
||||
srcinfo_close_section
|
||||
}
|
||||
|
||||
srcinfo_write_package() {
|
||||
local singlevalued=(pkgdesc url install changelog)
|
||||
local multivalued=(arch groups license checkdepends depends optdepends
|
||||
provides conflicts replaces options backup)
|
||||
|
||||
srcinfo_open_section 'pkgname' "$1"
|
||||
srcinfo_write_section_details "$1"
|
||||
srcinfo_close_section
|
||||
}
|
||||
|
||||
srcinfo_write() {
|
||||
local pkg
|
||||
|
||||
srcinfo_write_global
|
||||
|
||||
for pkg in "${pkgname[@]}"; do
|
||||
srcinfo_write_package "$pkg"
|
||||
done
|
||||
}
|
||||
|
||||
clear_environment() {
|
||||
local environ
|
||||
|
||||
mapfile -t environ < <(compgen -A variable |
|
||||
grep -xvF "$(printf '%s\n' "$@")")
|
||||
|
||||
# expect that some variables marked read only will complain here
|
||||
unset -v "${environ[@]}" 2>/dev/null
|
||||
}
|
||||
|
||||
srcinfo_write_from_pkgbuild() {(
|
||||
clear_environment PATH
|
||||
|
||||
shopt -u extglob
|
||||
. "$1" || exit 1
|
||||
shopt -s extglob
|
||||
srcinfo_write
|
||||
)}
|
||||
|
||||
|
||||
usage() {
|
||||
printf '%s\n' \
|
||||
'mksrcinfo v8' \
|
||||
'' \
|
||||
'mksrcinfo reads the target PKGBUILD and writes an equivalent .SRCINFO.' \
|
||||
'Without passing any arguments, mksrcinfo will read from $PWD/PKGBUILD' \
|
||||
'and write to $PWD/.SRCINFO.' \
|
||||
'' \
|
||||
'Usage: mksrcinfo [/path/to/pkgbuild]' \
|
||||
' -h display this help message and exit' \
|
||||
' -o <file> write output to <file>'
|
||||
}
|
||||
|
||||
error() {
|
||||
printf "==> ERROR: $1\n" "${@:2}" >&2
|
||||
}
|
||||
|
||||
die() {
|
||||
error "$@"
|
||||
exit 1
|
||||
}
|
||||
|
||||
write_srcinfo_header() {
|
||||
local timefmt='%a %b %e %H:%M:%S %Z %Y'
|
||||
|
||||
# fiddle with the environment to ensure we get the a consistent language and
|
||||
# timezone.
|
||||
TZ=UTC LC_TIME=C \
|
||||
printf "# Generated by mksrcinfo %s\n# %($timefmt)T\n" 'v8' -1
|
||||
}
|
||||
|
||||
srcinfo_dest=$PWD/.SRCINFO
|
||||
|
||||
while getopts ':o:h' flag; do
|
||||
case $flag in
|
||||
o)
|
||||
srcinfo_dest=$OPTARG
|
||||
;;
|
||||
:)
|
||||
die "option '-%s' requires an argument" "$OPTARG"
|
||||
;;
|
||||
h)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
\?)
|
||||
die "invalid option -- '-%s' (use -h for help)" "$OPTARG"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift $(( OPTIND - 1 ))
|
||||
|
||||
[[ -f PKGBUILD ]] || die 'PKGBUILD not found in current directory'
|
||||
|
||||
# TODO: replace this with 'makepkg --printsrcinfo' once makepkg>=4.3 is released.
|
||||
{
|
||||
write_srcinfo_header
|
||||
srcinfo_write_from_pkgbuild "${1:-$PWD/PKGBUILD}"
|
||||
} >"$srcinfo_dest"
|
||||
|
||||
# vim: set et ts=2 sw=2:
|
18
packaging/ARCH/update-osync-pkg.sh
Executable file
18
packaging/ARCH/update-osync-pkg.sh
Executable file
@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
git clone git+ssh://aur@aur.archlinux.org/osync.git osync.aur &&
|
||||
cd "osync.aur" &&
|
||||
srcdir="." &&
|
||||
source "PKGBUILD" &&
|
||||
url=$(echo -n ${source[0]} | sed 's/git+//g' | sed 's/#.*//g') &&
|
||||
branch=$(echo -n ${source[0]} | sed 's/.*#branch=//g') &&
|
||||
git clone -b $branch $url &&
|
||||
sed -i "s/pkgver=.*/pkgver=$(pkgver)/g" "PKGBUILD" &&
|
||||
../mksrcinfo &&
|
||||
rm -rf "osync" &&
|
||||
git add . &&
|
||||
git commit -m "Updated version" &&
|
||||
git push origin master &&
|
||||
cd .. &&
|
||||
rm -rf "osync.aur" &&
|
||||
echo "Package updated successfully"
|
Loading…
Reference in New Issue
Block a user