X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=shrc.sh;h=b84d622334bcd468a24006e6319f7f59c3949f96;hb=45baae4;hp=8ccc257885cc49d111f839efd820dda669fd99e7;hpb=592261824e728decf6fdbb094c5bcb5c4b4cec70;p=packages%2Frpm-build-tools.git diff --git a/shrc.sh b/shrc.sh index 8ccc257..b84d622 100755 --- a/shrc.sh +++ b/shrc.sh @@ -1,22 +1,88 @@ # shell aliases and functions for PLD Developer # set $dist, used by functions below +[ -n "$dist" ] || dist=$(lsb_release -sc 2>/dev/null | tr 'A-Z' 'a-z') [ -n "$dist" ] || dist=$(awk '/PLD Linux/ {print tolower($NF)}' /etc/pld-release 2>/dev/null | tr -d '()') -case "$dist" in -ac|th|ti) - ;; -*) - # invalid one ;) - dist= -esac +alias q='rpm -q --qf "%{N}-%|E?{%{E}:}|%{V}-%{R}.%{ARCH}\n"' +alias adif="dif -x '*.m4' -x ltmain.sh -x install-sh -x depcomp -x 'Makefile.in' -x compile -x 'config.*' -x configure -x missing -x mkinstalldirs -x autom4te.cache" +alias pclean="sed -i~ -e '/^\(?\|=\+$\|unchanged:\|diff\|only\|Only\|Tylko\|Binary files\|Files\|Common\|index \|Index:\|RCS file\|retrieving\)/d'" -if [ "$dist" ]; then +# undo spec utf8 +# note: it will do it blindly, so any lang other than -pl is most likely broken +specutfundo() { + local spec="$1" + iconv -futf8 -tlatin2 "$spec" > m + sed -e 's/\.UTF-8//' m > "$spec" + rm -f m +} -alias ipoldek-$dist="poldek -q --sn $dist --cmd" -alias $dist-provides="ipoldek-$dist what-provides" -alias $dist-verify=dist-verify -alias $dist-requires=dist-requires +# merges two patches +# requires: patchutils +pmerge() { + combinediff -p1 $1 $2 > m.patch || return + pclean m.patch + dif $1 m.patch +} + +# downloads sourceforge url from specific mirror +sfget() { + local url="$1" + url="${url%?download}" + url="${url%?use_mirror=*}" + url="${url#http://downloads.}" + url="http://dl.${url#http://prdownloads.}" + # use mirror + local mirror="http://nchc.dl.sourceforge.net" + url="$mirror/sourceforge/${url#http://dl.sourceforge.net/}" + wget -c "$url" +} + +dif() { + if [ -t 1 ]; then + diff -ur -x .svn -x .git -x .bzr -x CVS "$@" | diffcol | less -R + else + diff -ur -x .svn -x .git -x .bzr -x CVS "$@" + fi +} + +diffcol() { +sed -e ' + s,,^[,g; + s,,^G,g; + s,^\(Index:\|diff\|---\|+++\) .*$,&,; + s,^@@ ,&,; + s,^-,&,; + s,^+,&,; + s,\r,^M,g; + s, , ,g; + s,\([^[:space:]]\)\([[:space:]]\+\)$,\1\2,g; + s,$,, +' ${1:+"$@"} +} + +# does diff between FILE~ and FILE +# the diff can be applied with patch -p1 +d() { + local file="$1" dir + shift + if [[ "$file" = /* ]]; then + # full path -- no idea where to strip + dir=. + diff=$file + else + # relative path -- keep one path component from current dir + dir=.. + diff=${PWD##*/}/${file} + fi + + (builtin cd "$dir"; dif $diff{~,} "$@") +} + +# spec name from NVR +rpm2spec() { + sed -re 's,^(.+)-[^-]+-[^-]+$,\1.spec,' +} # move AC-branch tag to current checkout # if AC-branch as branch exists, it is first removed @@ -40,16 +106,24 @@ ac-tag() { git push -f origin $branch } -alias q='rpm -q --qf "%{N}-%|E?{%{E}:}|%{V}-%{R}.%{ARCH}\n"' +###### functions/aliases below require $dist to be set ###### -# undo spec utf8 -# note: it will do it blindly, so any lang other than -pl is most likely broken -specutfundo() { - local spec="$1" - iconv -futf8 -tlatin2 "$spec" > m - sed -e 's/\.UTF-8//' m > "$spec" - rm -f m -} +case "$dist" in +ac|th|ti) + ;; +*) + # invalid one ;) + dist= +esac + +if [ -z "$dist" ]; then + return +fi + +alias ipoldek-$dist="poldek -q --sn $dist --cmd" +alias $dist-provides="ipoldek-$dist what-provides" +alias $dist-verify=dist-verify +alias $dist-requires=dist-requires dist-requires() { local opts deps @@ -191,191 +265,3 @@ get-buildlog() { done } -fi # no $dist set - -alias adif="dif -x '*.m4' -x ltmain.sh -x install-sh -x depcomp -x 'Makefile.in' -x compile -x 'config.*' -x configure -x missing -x mkinstalldirs -x autom4te.cache" -alias pclean="sed -i~ -e '/^\(?\|=\+$\|unchanged:\|diff\|only\|Only\|Tylko\|Files\|Common\|Index:\|RCS file\|retrieving\)/d'" - -# merges two patches -# requires: patchutils -pmerge() { - combinediff -p1 $1 $2 > m.patch || return - pclean m.patch - dif $1 m.patch -} - -# downloads sourceforge url from specific mirror -sfget() { - local url="$1" - url="${url%?download}" - url="${url%?use_mirror=*}" - url="${url#http://downloads.}" - url="http://dl.${url#http://prdownloads.}" - # use mirror - local mirror="http://nchc.dl.sourceforge.net" - url="$mirror/sourceforge/${url#http://dl.sourceforge.net/}" - wget -c "$url" -} - -dif() { - if [ -t 1 ]; then - diff -ur -x .svn -x .git -x .bzr -x CVS "$@" | diffcol | less -R - else - diff -ur -x .svn -x .git -x .bzr -x CVS "$@" - fi -} - -diffcol() { -sed -e ' - s,,^[,g; - s,,^G,g; - s,^\(Index:\|diff\|---\|+++\) .*$,&,; - s,^@@ ,&,; - s,^-,&,; - s,^+,&,; - s,\r,^M,g; - s, , ,g; - s,\([^[:space:]]\)\([[:space:]]\+\)$,\1\2,g; - s,$,, -' ${1:+"$@"} -} - -# does diff between FILE~ and FILE -# the diff can be applied with patch -p1 -d() { - local file="$1" dir - shift - if [[ "$file" = /* ]]; then - # full path -- no idea where to strip - dir=. - diff=$file - else - # relative path -- keep one path component from current dir - dir=.. - diff=${PWD##*/}/${file} - fi - - (builtin cd "$dir"; dif $diff{~,} "$@") -} - -# spec name from NVR -rpm2spec() { - sed -re 's,^(.+)-[^-]+-[^-]+$,\1.spec,' -} - - -# -# A colorized bash prompt -# - shows curret branch -# - shows if branch is up to date/ahead/behind -# - shows if last command exited with error (red) -# -# To use it, set $PROMPT_COMMAND env var: -# PROMPT_COMMAND=__bash_prompt_command -# -__bash_prompt_command() { - local previous_return_value=$? - - local RED="\[\033[0;31m\]" - local YELLOW="\[\033[0;33m\]" - local GREEN="\[\033[0;32m\]" - local BLUE="\[\033[0;34m\]" - local LIGHT_RED="\[\033[1;31m\]" - local LIGHT_GREEN="\[\033[1;32m\]" - local WHITE="\[\033[1;37m\]" - local LIGHT_GRAY="\[\033[0;37m\]" - local COLOR_NONE="\[\e[0m\]" - - # if we are in rpm subdir and have exactly one .spec in the dir, include package version - __package_update_rpmversion - local rpmver=$(__package_rpmversion) - - local prompt="${BLUE}[${RED}\w${GREEN}${rpmver:+($rpmver)}$(__bash_parse_git_branch)${BLUE}]${COLOR_NONE} " - if [ $previous_return_value -eq 0 ]; then - PS1="${prompt}➔ " - else - PS1="${prompt}${RED}➔${COLOR_NONE} " - fi -} - -# helper for __bash_prompt_command -# command line (git) coloring -# note we use "\" here to avoid any "git" previous alias/func -__bash_parse_git_branch() { - # not in git dir. return early - \git rev-parse --git-dir &> /dev/null || return - - local git_status branch_pattern remote_pattern diverge_pattern - local state remote branch - - git_status=$(\git -c color.ui=no status 2> /dev/null) - branch_pattern="^On branch ([^${IFS}]*)" - remote_pattern="Your branch is (behind|ahead) " - diverge_pattern="Your branch and (.*) have diverged" - - if [[ ! ${git_status} =~ "working directory clean" ]]; then - state="${RED}⚡" - fi - - # add an else if or two here if you want to get more specific - if [[ ${git_status} =~ ${remote_pattern} ]]; then - if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then - remote="${YELLOW}↑" - else - remote="${YELLOW}↓" - fi - fi - - if [[ ${git_status} =~ ${diverge_pattern} ]]; then - remote="${YELLOW}↕" - fi - - if [[ ${git_status} =~ ${branch_pattern} ]]; then - branch=${BASH_REMATCH[1]} - echo " (${branch})${remote}${state}" - fi -} - -# cache requires bash 4.x -declare -A __package_update_rpmversion_cache -__package_update_rpmversion() { - # extract vars from cache - set -- ${__package_update_rpmversion_cache[$PWD]} - local specfile=$1 version=$2 mtime=$3 - - # invalidate cache - if [ -f "$specfile" ]; then - local stat - stat=$(stat -c %Y $specfile) - if [ $mtime ] && [ $stat -gt $mtime ]; then - unset version - fi - mtime=$stat - else - # reset cache, .spec may be renamed - unset version specfile - fi - - # we have cached version - test -n "$version" && return - - # needs to be one file - specfile=${specfile:-$(\ls *.spec 2>/dev/null)} - if [ ! -f "$specfile" ]; then - unset __package_update_rpmversion_cache[$PWD] - return - fi - - mtime=${mtime:-$(stat -c %Y $specfile)} - - # give only first version (ignore subpackages) - version=$(rpm --define "_specdir $PWD" --specfile $specfile -q --qf '%{VERSION}\n' | head -n1) - __package_update_rpmversion_cache[$PWD]="$specfile ${version:-?} $mtime" -} - -__package_rpmversion() { - # extract vars from cache - set -- ${__package_update_rpmversion_cache[$PWD]} - # print version - echo $2 -}