aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Vigier <boklm@mageia.org>2011-09-24 13:35:06 +0000
committerNicolas Vigier <boklm@mageia.org>2011-09-24 13:35:06 +0000
commit97df7e04d27020620c583b8bb65f8b155427e81e (patch)
treede91fd047ab97fcaad1131991727ecaa127736fb
downloadrepoctl-97df7e04d27020620c583b8bb65f8b155427e81e.tar
repoctl-97df7e04d27020620c583b8bb65f8b155427e81e.tar.gz
repoctl-97df7e04d27020620c583b8bb65f8b155427e81e.tar.bz2
repoctl-97df7e04d27020620c583b8bb65f8b155427e81e.tar.xz
repoctl-97df7e04d27020620c583b8bb65f8b155427e81e.zip
add functions to move/remove packages from repositories
-rw-r--r--functions190
-rw-r--r--repoctl.conf17
2 files changed, 207 insertions, 0 deletions
diff --git a/functions b/functions
new file mode 100644
index 0000000..5df904e
--- /dev/null
+++ b/functions
@@ -0,0 +1,190 @@
+#!/bin/sh
+
+. /etc/repoctl.conf
+
+function isingroup()
+{
+ grp="$1"
+ for group in `groups`
+ do if [ "$grp" = "$group" ]
+ then
+ return 0
+ fi
+ done
+ return 1
+}
+
+function inlist()
+{
+ k="$1"
+ list="$2"
+ for e in $list
+ do
+ if [ a"$k" = a"$e" ]
+ then
+ return 0
+ fi
+ done
+ return 1
+}
+
+function update_hdlist()
+{
+ repository="$1"
+ fdeps="$repository/../../media_info/file-deps"
+ test -f "$fdeps" && ofdeps="--file-deps $fdeps"
+ /usr/bin/genhdlist2 -v --versioned --allow-empty-media $ofdeps "$repository"
+}
+
+function update_hdlists()
+{
+ local distrorelease="$1"
+ local section="$2"
+ local sectionrepo="$3"
+
+ for arch in $arches
+ do
+ update_hdlist "$distribdir/$distrorelease/$arch/media/$section/$sectionrepo"
+ update_hdlist "$distribdir/$distrorelease/$arch/media/debug/$section/$sectionrepo"
+ done
+ update_hdlist "$distribdir/$distrorelease/SRPMS/$section/$sectionrepo"
+ update_common_MD5SUM $distrorelease
+}
+
+function update_common_MD5SUM()
+{
+ distrorelease="$1"
+ for arch in $arches
+ do
+ pushd "$distribdir/$distrorelease/$arch/media/media_info"
+ /usr/bin/md5sum hdlist_* synthesis.* > MD5SUM
+ popd
+ done
+}
+
+function mirror_repository()
+{
+ distrorelease="$1"
+ /usr/bin/rsync $mirror_rsync_options "$distribdir/$distrorelease/" "$finaldistribdir/$distrorelease/"
+}
+
+function check_distro_section()
+{
+ local distrorelease="$1"
+ local section="$2"
+ local sectionrepo="$3"
+
+ if ! inlist "$distrorelease" "$distroreleases"
+ then
+ echo "Incorrect distrorelease $distrorelease" >&2
+ exit 1
+ fi
+
+ if ! inlist "$section" "$distrosections"
+ then
+ echo "Incorrect section $section" >&2
+ exit 1
+ fi
+
+ if ! inlist "$sectionrepo" "$sectionsrepos"
+ then
+ echo "Incorrect repository $sectionsrepos" >&2
+ exit 1
+ fi
+}
+
+function move_pkg_files()
+{
+ srcdir="$1"
+ destdir="$2"
+ srcpkg="$3"
+ output="$4"
+
+ for file in "$srcdir/"*.rpm
+ do
+ fname=$(rpm -qp --qf '%{SOURCERPM}' "$file")
+ if [ a"$fname" = a"$srcpkg" ]
+ then
+ $dryrun mv -v -f "$file" "$destdir" >> "$output"
+ fi
+ done
+}
+
+function del_pkg_files()
+{
+ pkgdir="$1"
+ srcpkg="$3"
+ output="$4"
+
+ for file in "$pkgdir/"*.rpm
+ do
+ fname=$(rpm -qp --qf '%{SOURCERPM}' "$file")
+ if [ a"$fname" = a"$srcpkg" ]
+ then
+ $dryrun rm -v -f "$file" >> "$output"
+ fi
+ done
+}
+
+function find_src_pkg()
+{
+ local distrorelease="$1"
+ local section="$2"
+ local sectionrepo="$3"
+ local pkgname="$4"
+
+ for file in "$distribdir/$distrorelease/SRPMS/$section/$sectionrepo/"*.rpm
+ do
+ fname=$(rpm -qp --qf '%{NAME}' "$file")
+ if [ a"$fname" = a"$srcname" ]
+ then
+ basename "$file"
+ return 0
+ fi
+ done
+}
+
+function move_pkg()
+{
+ local distrorelease="$1"
+ local src_section="$2"
+ local src_sectionrepo="$3"
+ local dst_section="$4"
+ local dst_sectionrepo="$5"
+ local srcname="$6"
+ local output="$7"
+
+ check_distro_section "$distrorelease" "$src_section" "$src_sectionrepo"
+ check_distro_section "$distrorelease" "$dst_section" "$dst_sectionrepo"
+
+ srcpkg=$(find_src_pkg "$distrorelease" "$src_section" "$src_sectionrepo" "$srcname")
+
+ if [ -z $srcpkg ]
+ then
+ echo "The package $srcname could not be found in $distrorelease/$src_section/$src_sectionrepo repository." >&2
+ exit 2
+ fi
+
+ for arch in $arches
+ do
+ move_pkg_files "$distribdir/$distrorelease/$arch/media/$src_section/$src_sectionrepo" "$distribdir/$distrorelease/$arch/media/$dst_section/$dst_sectionrepo/" "$srcpkg" "$output"
+ move_pkg_files "$distribdir/$distrorelease/$arch/media/debug/$src_section/$src_sectionrepo" "$distribdir/$distrorelease/$arch/media/debug/$dst_section/$dst_sectionrepo/" "$srcpkg" "$output"
+ done
+ $dryrun mv -v -f "$distribdir/$distrorelease/SRPMS/$src_section/$src_sectionrepo/$srcpkg" "$distribdir/$distrorelease/SRPMS/$dst_section/$dst_sectionrepo/" >> "$output"
+}
+
+function del_pkg()
+{
+ local distrorelease="$1"
+ local section="$2"
+ local sectionrepo="$3"
+ local srcname="$4"
+ local output="$5"
+
+ check_distro_section "$distrorelease" "$section" "$sectionrepo"
+
+ srcpkg=$(find_src_pkg "$distrorelease" "$section" "$sectionrepo" "$srcname")
+
+ #TODO
+}
+
diff --git a/repoctl.conf b/repoctl.conf
new file mode 100644
index 0000000..d88a811
--- /dev/null
+++ b/repoctl.conf
@@ -0,0 +1,17 @@
+dryrun=echo
+moveupdate_allowed_group=mga-qa
+moveupdate_mailto=sysadmin-reports@ml.mageia.org
+if [ -z $SUDO_USER ]
+then
+ requestuser="$USER"
+else
+ requestuser="$SUDO_USER"
+fi
+moveupdate_mailfrom="$requestuser <root@mageia.org>"
+distribdir=/distrib/bootstrap/distrib
+finaldistribdir=/distrib/mirror/distrib
+distroreleases='1'
+distrosections='core nonfree tainted'
+sectionsrepos="release updates updates_testing backports backports_testing"
+arches='i586 x86_64'
+mirror_rsync_options="--dry-run --delete -alH"