From 4c55d64ee55268ba8a21343b24d9c2cc6a6579d0 Mon Sep 17 00:00:00 2001 From: Dennis Gilmore Date: Sun, 30 Mar 2008 23:49:41 -0500 Subject: add scripts from wiki. they still need work --- src/fedoradev-pkgowners | 241 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 src/fedoradev-pkgowners (limited to 'src/fedoradev-pkgowners') diff --git a/src/fedoradev-pkgowners b/src/fedoradev-pkgowners new file mode 100644 index 0000000..c5d9f45 --- /dev/null +++ b/src/fedoradev-pkgowners @@ -0,0 +1,241 @@ +#!/bin/bash +# +# fedoradev-pkgowners - Output list of packages owners by packages name +# Copyright (c) 2007 Thorsten Leemhuis +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +## globally used +file_fadcsvdata= +file_pkgdbfiledata= +list_of_packages= +print_comaintainers= +print_email= +print_realname= +tmpfile_owners= + +## globally used with defaults +myprog_name=fedoradev-pkgowners +myprog_version=0.0.1 +# look for Fedora (and not epel) by default: +filter_for="Fedora" + +# initialization +this_init() +{ + # we need to get the package names from somewhere + # if there is a better way to check that input is comeing from a + # pipe please let me know + if [[ ! "${list_of_packages}" ]] && [[ ! -p /proc/$$/fd/0 ]]; then + echo "Provide list of package names on command line or via pipe" >&2 + exit 2 + fi + + # we need fasfile for some optional output options + if ( [[ "${print_email}" ]] || [[ "${print_realname}" ]] ) && [[ ! "${file_fadcsvdata}" ]] ; then + echo "Please provide the name of the file with the FAS dumb via --fasfile " >&2 + echo " Download it using your FAS username and password from:" >&2 + echo " https://admin.fedora.redhat.com/accounts/dump-group.cgi?group=cvsextras&format=csv" >&2 + exit 2 + fi + + # check fasfile -- needs to be local, thus check first + if [[ "${file_fadcsvdata}" ]]; then + if [[ ! -s "${file_fadcsvdata}" ]]; then + echo "Could not find fas-datafile ${file_fadcsvdata}" >&2 + exit 2 + fi + + # check if that file contains data as we expect it + if ! grep --max-count=1 -E '^.*,.*@.*,(user|sponsor|administrator),[0-9]*$' "${file_fadcsvdata}" &>/dev/null; then + echo "File ${file_fadcsvdata} does not look like a fas file in cvs format" >&2 + exit 2 + fi + fi + + # pkgdb bugzilla data for owners + if [[ "${file_pkgdbfiledata}" ]]; then + if [[ ! -s "${file_pkgdbfiledata}" ]]; then + echo "Could not find pgkdb-datafile ${file_pkgdbfiledata}" >&2 + exit 2 + fi + else + # download it to tmpfile + + # remove tmpfile_owners on CTRL+C + trap "this_finish" 2 + + # download owners + tmpfile_owners=$(mktemp -t ${myprog_name}.XXXXXXXXX) + wget --quiet --output-document="${tmpfile_owners}" "https://admin.fedoraproject.org/pkgdb/acls/bugzilla?tg_format=plain" + + # did download of owners succeed? + local returncode=$? + if (( ${returncode} > 0 )) || [[ ! -s "${tmpfile_owners}" ]] ; then + echo "Could not download informations about owners from"$'\n'"https://admin.fedoraproject.org/pkgdb/acls/bugzilla?tg_format=plain ; aborting!" >&2 + this_finish + exit 2 + fi + + # + file_pkgdbfiledata="${tmpfile_owners}" + fi + + # check if that file contains data as we expect it + if ! grep --max-count=1 -E '^Fedora*\|.*\|.*\|.*\|\|' "${file_pkgdbfiledata}" &>/dev/null; then + echo "File ${file_pkgdbfiledata} does not look like a pgkdb bugzilla dump" >&2 + this_finish + exit 2 + fi +} + +lookup_package() +{ + local package_info="$(grep "${filter_for}|${1}|" "${file_pkgdbfiledata}")" + local owner="$(echo ${package_info} | cut -d '|' -f 4)" + if [[ ! "${owner}" ]]; then + # grep did not find anything or something else went wrong + echo "Could not find owner for ${1}" >&2 + return 1 + fi + + + # co-maintainers? + if [[ "${print_comaintainers}" ]]; then + local comaintainers="$(echo ${package_info} | cut -d '|' -f 6 | sed 's| |,|g') " + if [[ "${comaintainers}" = " " ]]; then + comaintainers="(none)" + fi + fi + + # more data? + if [[ "${print_email}" ]] || [[ "${print_realname}" ]]; then + local fasline="$(grep -E "^${owner},.*@.*,(user|sponsor|administrator),[0-9]*$" "${file_fadcsvdata}")" + if [[ "${fasline}" ]]; then + [[ "${print_email}" ]] && local email_owner="$(echo ${fasline} | cut -d ',' -f 2) " + [[ "${print_realname}" ]] && local realname_owner="$(echo ${fasline} | cut -d ',' -f 3) " + else + echo "Could not find FAS-data for ${owner}" >&2 + [[ "${print_email}" ]] && local email_owner="(unknown) " + [[ "${print_realname}" ]] && local realname_owner="(unknown) " + fi + + # feature for later: print more info for co-maintainers as well? + fi + + # print + echo "${owner} ${1} ${email_owner}${realname_owner}${comaintainers}" +} + +this_finish() +{ + [[ -e "${tmpfile_owners}" ]] && rm "${tmpfile_owners}" +} + +myprog_help() +{ + echo "Usage: ${myprog_name} [options] [list of pkgnames]" + echo " echo pkgname | ${myprog_name} [options]" + echo $'\n'"Outputs list of Fedora packages owners for packages from [list] or stdin" + echo $'\n'"Available options:" + echo " --comaintainers -- print comaintainers as well" + echo " --email -- print email (needs --fasfile)" + echo " --epel -- look epel owner(s) up" + echo " --fasfile -- get email or real name from fas-file ; download uri:" + echo " https://admin.fedora.redhat.com/accounts/dump-group.cgi?group=cvsextras&format=csv" + echo " --pkgdbfile -- get pkgowners from local file instead of downloading it from:" + echo " https://admin.fedoraproject.org/pkgdb/acls/bugzilla?tg_format=plain" + echo " --realname -- print realname (needs --fasfile )" + echo + echo " --help -- this text" + echo " --version -- output version" + echo + echo " Hint: use '${myprog_name} | sort | column -t' for properly formated output." +} + +# parse cmdline options +while [ "${1}" ] ; do + case "${1}" in + --comaintainers) + print_comaintainers="true" + shift + ;; + --email) + print_email="true" + shift + ;; + --epel) + filter_for="Fedora EPEL" + shift + ;; + --fasfile) + shift + file_fadcsvdata="${1}" + shift + ;; + --realname) + print_realname="true" + shift + ;; + --pkgdbfile) + shift + file_pkgdbfiledata="${1}" + shift + ;; + --help) + myprog_help + exit 0 + ;; + --version) + echo "${myprog_name} ${myprog_version}" + exit 0 + ;; + --*) + echo "Error: Unknown option '${1}'." >&2 + myprog_help >&2 + exit 2 + ;; + *) + list_of_packages="${list_of_packages} ${1}" + shift + ;; + esac +done + +# initialization and startup checks +this_init + +# go +if [[ "${list_of_packages}" ]]; then + for package in ${list_of_packages} ; do + lookup_package ${package} + done +elif [[ -p /proc/$$/fd/0 ]]; then + # read list of packages from stdin (seperated by newline or space) + while read list_of_packages ; do + for package in ${list_of_packages} ; do + lookup_package ${package} + done + done +fi + +# cleanup +this_finish -- cgit