X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=adapter.sh;h=43d1d3989c26324d9552cb9345f890bffd25cb50;hb=1526cc0b0fb3ca4907980634db8cff6d3435a826;hp=ad4a4298703991e8376bede5c119ce897544fd6b;hpb=e3f245a0e477eabbd4df7652df2e09c03cb5e698;p=packages%2Frpm-build-tools.git diff --git a/adapter.sh b/adapter.sh index ad4a429..43d1d39 100644 --- a/adapter.sh +++ b/adapter.sh @@ -1,8 +1,5 @@ #!/bin/sh # -# This is adapter v0.30. Adapter adapts .spec files for PLD Linux. -# -# Copyright (C) 1999-2003 PLD-Team # Authors: # Michał Kuratczyk # Sebastian Zagrodzki @@ -15,9 +12,17 @@ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -self=$(basename "$0") -adapter=$(dirname "$0")/adapter.awk -usage="Usage: $self [FLAGS] SPECFILE +RCSID='$Id$' +REVISION=${RCSID#* * } REVISION=${REVISION%% *} +VERSION="v0.35/$REVISION" +VERSIONSTRING="\ +Adapter adapts .spec files for PLD Linux. +$VERSION (C) 1999-2010 Free Penguins". + +PROGRAM=${0##*/} +dir=$(d=$0; [ -L "$d" ] && d=$(readlink -f "$d"); dirname "$d") +adapter=$dir/adapter.awk +usage="Usage: $PROGRAM [FLAGS] SPECFILE -s|--no-sort|--skip-sort skip BuildRequires, Requires sorting @@ -27,26 +32,39 @@ usage="Usage: $self [FLAGS] SPECFILE skip desc wrapping -a|--skip-defattr skip %defattr corrections - +-o + do not do any diffing, just dump the output " if [ ! -x /usr/bin/getopt ]; then - echo >&1 "You need to install util-linux to use adapter" + echo >&2 "You need to install util-linux to use adapter" exit 1 fi if [ ! -x /usr/bin/patch ]; then - echo >&1 "You need to install patch to use adapter" + echo >&2 "You need to install patch to use adapter" exit 1 fi -t=`getopt -o hsmda --long help,sort,sort-br,no-macros,skip-macros,skip-desc,skip-defattr -n "$self" -- "$@"` || exit $? +[ -n "$PAGER" ] || PAGER="/usr/bin/less -r" + +if [ -n "$CONFIG_DIR" ]; then + USER_CFG="$CONFIG_DIR/.adapterrc" +elif [ -n "$HOME_ETC" ]; then + USER_CFG="$HOME_ETC/.adapterrc" +else + USER_CFG=~/.adapterrc +fi + +[ -f $USER_CFG ] && . $USER_CFG + +t=$(getopt -o hsomdaV --long help,version,sort,sort-br,no-macros,skip-macros,skip-desc,skip-defattr -n "$PROGRAM" -- "$@") || exit $? eval set -- "$t" while true; do case "$1" in -h|--help) - echo 2>&1 "$usage" + echo 2>&1 "$usage" exit 1 ;; -s|--no-sort|--skip-sort) @@ -61,12 +79,19 @@ while true; do -a|--skip-defattr) export SKIP_DEFATTR=1 ;; + -V|--version) + echo "$VERSIONSTRING" + exit 0 + ;; + -o) + outputonly=1 + ;; --) shift break ;; *) - echo 2>&1 "$self: Internal error: [$1] not recognized!" + echo >&2 "$PROGRAM: Internal error: \`$1' not recognized!" exit 1 ;; esac @@ -75,25 +100,42 @@ done diffcol() { - # vim like diff colourization - sed -e ' - s,,^[,g; - s,,^G,g; - s,^\(Index:\|diff\|---\|+++\) .*$,&,; - s,^@@ ,&,g; - s,^-,&,; - s,^+,&,; - s, ,^M,g; - s, , ,g; - s,\([^[:space:]]\)\([[:space:]]\+\)$,\1\2,g; - s,$,, - ' "$@" + # vim like diff colourization +LC_ALL=en_US.UTF-8 gawk ' { + split( $0, S, /\t/ ); + $0 = S[ 1 ]; + for ( i = 2; i in S; i++ ) { + spaces = 7 - ( (length( $0 ) - 1) % 8 ); + $0 = $0 "\xE2\x9E\x94"; + for ( y = 0; y < spaces; y++ ) + $0 = $0 "\xE2\x87\xBE"; + $0 = $0 S[ i ]; + } + gsub( /\033/, "\033[44m^[\033[49m" ); + cmd = ""; + if ( sub( /^ /, "" ) ) + cmd = " "; + sub( /(\xE2\x9E\x94(\xE2\x87\xBE)*| )+$/, "\033[31;41m&\033[39;49m" ); + gsub( /\xE2\x9E\x94(\xE2\x87\xBE)*/, "\033[7m&\033[27m" ); + gsub( /\xE2\x87\xBE/, " " ); + # uncomment if you do not like utf-8 arrow + # gsub( /\xE2\x9E\x94/, ">" ); + $0 = cmd $0; + gsub( /\007/, "\033[44m^G\033[49m" ); + gsub( /\r/, "\033[44m^M\033[49m" ); +} +/^(Index:|diff|---|\+\+\+) / { $0 = "\033[32m" $0 } +/^@@ / { $0 = "\033[33m" $0 } +/^-/ { $0 = "\033[35m" $0 } +/^+/ { $0 = "\033[36m" $0 } +{ $0 = $0 "\033[0m"; print } +' "$@" } diff2hunks() { - # diff2hunks orignally by dig - perl -e ' + # diff2hunks orignally by dig + perl -e ' #! /usr/bin/perl -w use strict; @@ -130,23 +172,89 @@ for my $filename (@ARGV) { ' "$@" } -adapterize() -{ - local tmpdir - tmpdir=$(mktemp -d ${TMPDIR:-/tmp}/adapter-XXXXXX) || exit - if grep -q '\.UTF-8' $SPECFILE; then - awk=gawk - else - awk=awk - fi +# import selected macros for adapter.awk +# you should update the list also in adapter.awk when making changes here +import_rpm_macros() { + macros=" + _topdir + _prefix + _bindir + _sbindir + _libdir + _sysconfdir + _datadir + _includedir + _mandir + _infodir + _examplesdir + _defaultdocdir + _kdedocdir + _gtkdocdir + _desktopdir + _pixmapsdir + _javadir + _pkgconfigdir + _npkgconfigdir + + perl_sitearch + perl_archlib + perl_privlib + perl_vendorlib + perl_vendorarch + perl_sitelib + + py_sitescriptdir + py_sitedir + py_scriptdir + py_ver - local tmp=$tmpdir/$(basename $SPECFILE) || exit - $awk -f $adapter $SPECFILE > $tmp || exit + ruby_archdir + ruby_ridir + ruby_rubylibdir + ruby_sitearchdir + ruby_sitelibdir + ruby_rdocdir - if [ "$(diff --brief $SPECFILE $tmp)" ]; then + php_pear_dir + php_data_dir + tmpdir +" + eval_expr="" + for macro in $macros; do + eval_expr="$eval_expr\nexport $macro='%{$macro}'" + done + + + # get cvsaddress for changelog section + # using rpm macros as too lazy to add ~/.adapterrc parsing support. + eval_expr="$eval_expr + export _cvsmaildomain='%{?_cvsmaildomain}%{!?_cvsmaildomain:@pld-linux.org}' + export _cvsmailfeedback='%{?_cvsmailfeedback}%{!?_cvsmailfeedback:PLD Team }' + " + + export ADAPTER_REVISION=$REVISION + + eval $(rpm --eval "$(echo -e $eval_expr)") +} + +adapterize() { + local workdir + workdir=$(mktemp -d ${TMPDIR:-/tmp}/adapter-XXXXXX) || exit $? + awk=gawk + + local tmp=$workdir/$(basename $SPECFILE) || exit $? + + import_rpm_macros + + LC_ALL=en_US.UTF-8 $awk -f $adapter $SPECFILE > $tmp || exit $? + + if [ "$outputonly" = 1 ]; then + cat $tmp + + elif [ "$(diff --brief $SPECFILE $tmp)" ]; then diff -u $SPECFILE $tmp > $tmp.diff if [ -t 1 ]; then - diffcol $tmp.diff | less -r + diffcol $tmp.diff | $PAGER while : ; do echo -n "Accept? (Yes, No, Confirm each chunk)? " read ans @@ -159,12 +267,12 @@ adapterize() [cC]) # confirm each chunk diff2hunks $tmp.diff for t in $(ls $tmp-*.diff); do - diffcol $t | less -r + diffcol $t | $PAGER echo -n "Accept? (Yes, [N]o, Quit)? " read ans case "$ans" in [yYoO]) # y0 mama - patch < $t + patch -p0 < $t ;; [Q]) # Abort break @@ -186,13 +294,17 @@ adapterize() echo "The SPEC is perfect ;)" fi - rm -rf $tmpdir + rm -rf $workdir } -if [ $# -ne 1 -o ! -f "$1" ]; then +SPECFILE="$1" +[ -f "$SPECFILE" ] || SPECFILE="$(basename $SPECFILE .spec).spec" + +if [ $# -ne 1 -o ! -f "$SPECFILE" ]; then echo "$usage" exit 1 fi -SPECFILE="$1" adapterize + +# vim: ts=4:sw=4