#!/bin/bash # by David Watzke @ 2006 # http://www.watzke.cz/bash if [[ -r /sbin/functions.sh ]]; then source /sbin/functions.sh else echo "Could not find /sbin/functions.sh!" echo "You will need sys-apps/baselayout!" exit 1 fi die() { eerror "$@" exit 1 } ehelp() { einfo "echange by David Watzke http://www.watzke.cz/en/bash" einfo "Usage: echange [[number of lines] [category/]package]" [[ $# -eq 0 ]] && exit 0 || exit 1 } check_lineno() { if [[ "$1" =~ ^[[:digit:]]*$ ]]; then if [[ $1 -lt 18446744073709551616 ]]; then line=$1 else die "Digit has to be less than 2^64!" fi else die "Not a digit: '$1'!" fi } check_pkgname() { [[ $(wc -l <<< "$1") -ne 1 ]] && goodname=false a=[[:alnum:]] if $goodname && grep -qE "^$a+(|(\-|$a)*$a)(|/$a+(|(\-|$a)*$a))$" <<< "$1"; then pkg=$1 else die "Not a valid package name: '$1'!" fi } if [[ -r /etc/make.globals ]]; then source /etc/make.conf /etc/make.globals >& /dev/null else eerror "Could not find a /etc/make.globals config file!" die "Are you sure you have Portage installed?" fi if [[ -z "$PORTDIR" ]]; then eerror "You have not '\$PORTDIR' variable set!" die "Could not find Portage tree!" fi if [[ "$PORTDIR" != "${PORTDIR// }" ]]; then eerror "You cannot have spaces in the path to the Portage tree!" die "Please fix this error!" fi if [[ $# -eq 1 ]]; then line=20 check_pkgname $1 elif [[ $# -eq 2 ]]; then check_lineno $1 check_pkgname $2 else ehelp fi if [[ "$pkg" =~ ./. ]]; then array=false log=$PORTDIR/$pkg/ChangeLog else array=true log=($PORTDIR/*/$pkg/ChangeLog) fi if $array; then if [[ ${#log[*]} -eq 1 ]]; then log=${log[0]} else ewarn "Package name '$pkg' is ambiguous!" ewarn "Please specify full name (with category):" for ((i=0; i<${#log[*]}; i++)); do pkgtmp=${log[$i]#$PORTDIR} pkgtmp=${pkgtmp%/*} ewarn "\t${pkgtmp#/}" done exit 1 fi fi if [[ -r $log ]]; then head -n$line $log else die "Package '$pkg' was not found!" fi # TODO: # kontrolovat zda $line neni moc velky cislo # konfigurak