вторник, 2 апреля 2013 г.

Portage: пара удобных скриптов

Просто пара удобных скриптов

Багзилла
Т.к. периодически натыкаюсь на баги, то сделал консольный ro "клиент" для багзиллы генты, ибо лезть в браузер, идти на бго и потом вбив запрос получить ответ просто лень :3
Скрипт прост:
bgo
#!/bin/bash

BGO="https://bugs.gentoo.org"

green="\033[01;32m"
red="\033[01;31m"
restore="\033[00m"
contrast="\033[1m"
underline="\033[4m"

if ! grep -q "bug=" <<< "${1}";then
 URL="https://bugs.gentoo.org/buglist.cgi?quicksearch=${1}"
 CONTENT="$(curl -s ${URL} 2>/dev/null)"
 BUGS="$(echo "${CONTENT}" | grep "a href=\"show_bug.cgi?id=.*[a-z].*\<" | cut -d \= -f2,3 | sed -e 's|>.*||' -e 's|\"||g')"
 for bug_full in ${BUGS};do
  url="${BGO}/${bug_full}"
  id="${bug_full#*=}"
  desc="$(grep "${bug_full}.*[a-z].*\<" <<< "${CONTENT}")"
  desc="${desc#*\>}"
  desc="${desc%%\<*}"
  status="$(echo "${CONTENT}" | grep -A1 ${id} | awk '/bz_[[:upper:]]/ {print $3}' | sed 's|bz_||')"
  echo -e "${status}\t${green}${id}${restore}: ${desc}" | sed -e 's|"|\"|g;s|>|\>|g;s|<|\<|g'
 done
else
 id="${1#bug=}"
 URL="https://bugs.gentoo.org/show_bug.cgi?id=${id}"
 CONTENT="$(curl -s ${URL} 2>/dev/null)"
 status="$(echo "${CONTENT}" | awk '/bz_status/ {print $3}' | sed 's|bz_status_||')"
 desc="$(grep "Bug ${id} &ndash" <<< "${CONTENT}")"
 desc="${desc#*\;}"
 desc="${desc%\<*}"
 echo -e "${status}\t${green}${id}${restore}: ${desc}" | sed -e 's|"|\"|g;s|>|\>|g;s|<|\<|g'
 echo -e "Attachments:"
 while read line;do
  name="${line#*title=\"}"
  name="${name%\"*}"
  href="${BGO}/attachment.cgi?id=${line%&amp*}"
  [[ -n "${name}" ]] && echo -e "${underline}${href}${restore} ${name}"
 done <<< "$(echo "${CONTENT}" | grep "href=\"attachment.cgi?id=.*title" | sed 's|.*id=||')"
fi
В виде параметров принимает:
  • запрос для поиска. обычно это пакет, иногда с версией
  • bug=X, где X номер бага
в первом случае получим что-то типа этого:
[ megabaks@desktop ] ~ $ bgo nacl-toolchain-newlib
UNCONFIRMED 464168: dev-lang/nacl-toolchain-newlib-0_p10915 fails to build        
CONFIRMED 438732: dev-lang/nacl-toolchain-newlib-0_p9093 doesn't work due to missing crt1.o        
[ megabaks@desktop ] ~ $
во втором получим аттачи нужного бага:
[ megabaks@desktop ] ~ $ bgo bug=464168
UNCONFIRMED 464168:  dev-lang/nacl-toolchain-newlib-0_p10915 fails to build
Attachments:
https://bugs.gentoo.org/attachment.cgi?id=344046 dev-lang/nacl-toolchain-newlib-0_p10915 build log
[ megabaks@desktop ] ~ $
Маскировки
Так же при обновлениях/установках попадаются замаскированные пакеты. Парсить ручками /usr/portage/profiles/package.mask тоже лень, потому скриптик делает это за меня и говорит какого же его замаскировали.
why_masked:
#!/bin/bash

FILE="/usr/portage/profiles/package.mask"
opt="$(sed 's|/|\\/|' <<< "${1}")"
grep -20 "^[^#].*${opt}" "${FILE}" | sed -ne "/^#.*${opt}/d" -e '/./{H;$!d;}' -ne "x;/${opt}/p;" | sed '/^$/d'
В виде параметров так же принимает пакет, например:
[ megabaks@desktop ] ~ $ why-masked chromium
# Pawel Hajdan jr  (26 Feb 2013)
# Dev channel releases are only for people who are developers or want more
# experimental features and accept a more unstable release.
>=www-client/chromium-27
[ megabaks@desktop ] ~ $
быстро, просто, удобно.
аналогичен скрипт для замаскированных юзов.
Zugaina
Есть такой ресурс zugaina для поиска ебилдов по оверлеям.
Но лезть в браузер не всегда хочется, да и парсить выхлоп его мне не нравится.
Потому запилил такой вот скриптик (ссылка из-за убого блогспота) выхлоп выглядит примерно так (IRL так)
[ megabaks@desktop ] ~ $ sh scripts/zugaina/zugaina deadbeef

media-sound/deadbeef: foobar2000-like music player.
media-sound/deadbeef-vk: DeadBeef plugin for listening musing from vkontakte.com
media-sound/deadbeef-infobar: Infobar plugin for DeadBeeF audio player. Shows lyrics and artist biography for the current track.
media-sound/deadbeef-fb: DeaDBeeF filebrowser plugin
media-sound/deadbeef-mpris-plugin: MPRIS-plugin for deadbeef
media-sound/deadbeef-archreader: Dedbeef plugin for play files directly from RAR, 7z and Gzip archive files

PACKAGE                                  REPOSITORY
-------                                  ----------
media-sound/deadbeef-9999-r1             stuff
media-sound/deadbeef-9999                damex-overlay gentoo-zh
media-sound/deadbeef-0.5.6-r1            stuff
media-sound/deadbeef-0.5.6               calculate miramir sabayon
media-sound/deadbeef-0.5.5-r1            stuff
media-sound/deadbeef-0.5.5               foo-overlay funtoo miramir sabayon
media-sound/deadbeef-0.5.4-r1            stuff
media-sound/deadbeef-0.5.2               foo-overlay funtoo
media-sound/deadbeef-0.5.1-r3            gentoo-zh
media-sound/deadbeef-0.5.1-r1            foo-overlay funtoo
media-sound/deadbeef-0.4.4               sebasmagri
media-sound/deadbeef-0.4.3_rc1-r1        betagarden
media-sound/deadbeef-vk-9999             stuff
media-sound/deadbeef-vk-0.1.11           stuff
media-sound/deadbeef-infobar-9999        stuff
media-sound/deadbeef-infobar-1.3         stuff
media-sound/deadbeef-infobar-1.2         stuff
media-sound/deadbeef-fb-20121012         stuff
media-sound/deadbeef-fb-20120827         stuff
media-sound/deadbeef-mpris-plugin-9999   stuff
media-sound/deadbeef-mpris-plugin-2.1.2  stuff
media-sound/deadbeef-archreader-9999     stuff
[ megabaks@desktop ] ~ $ sh scripts/zugaina/zugaina -e media-sound/deadbeef

media-sound/deadbeef: foobar2k-like music player

PACKAGE                            REPOSITORY
-------                            ----------
media-sound/deadbeef-9999-r1       stuff
media-sound/deadbeef-9999          damex-overlay gentoo-zh
media-sound/deadbeef-0.5.6-r1      stuff
media-sound/deadbeef-0.5.6         calculate miramir sabayon
media-sound/deadbeef-0.5.5-r1      stuff
media-sound/deadbeef-0.5.5         foo-overlay funtoo miramir sabayon
media-sound/deadbeef-0.5.4-r1      stuff
media-sound/deadbeef-0.5.2         foo-overlay funtoo
media-sound/deadbeef-0.5.1-r3      gentoo-zh
media-sound/deadbeef-0.5.1-r1      foo-overlay funtoo
media-sound/deadbeef-0.4.4         sebasmagri
media-sound/deadbeef-0.4.3_rc1-r1  betagarden
[ megabaks@desktop ] ~ $