]> git.pld-linux.org Git - packages/rpm-build-tools.git/blame - adapter.sh
- work also with https
[packages/rpm-build-tools.git] / adapter.sh
CommitLineData
efd28552 1#!/bin/sh
d5f65bb3 2#
d5f65bb3 3# Authors:
d3da6a6e 4# Michał Kuratczyk <kura@pld.org.pl>
d5f65bb3 5# Sebastian Zagrodzki <s.zagrodzki@mimuw.edu.pl>
d3da6a6e 6# Tomasz Kłoczko <kloczek@rudy.mif.pg.gda.pl>
d5f65bb3
ER
7# Artur Frysiak <wiget@pld-linux.org>
8# Michal Kochanowicz <mkochano@pld.org.pl>
d3da6a6e 9# Elan Ruusamäe <glen@pld-linux.org>
d5f65bb3
ER
10#
11# See cvs log adapter{,.awk} for list of contributors
12#
13# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
3c92ff73 14
b8f9e95a
ER
15RCSID='$Id$'
16r=${RCSID#* * }
17rev=${r%% *}
18VERSION="v0.31/$rev"
19VERSIONSTRING="\
20Adapter adapts .spec files for PLD Linux.
21$VERSION (C) 1999-2008 Free Penguins".
22
5dcb40f6 23self=$(basename "$0")
cc0b76cd 24adapter=$(dirname "$0")/adapter.awk
0de62947
ER
25usage="Usage: $self [FLAGS] SPECFILE
26
27-s|--no-sort|--skip-sort
28 skip BuildRequires, Requires sorting
29-m|--no-macros|--skip-macros
30 skip use_macros() substitutions
31-d|--skip-desc
32 skip desc wrapping
33-a|--skip-defattr
34 skip %defattr corrections
35
36"
2ce02c4e 37
cb71b7bb 38if [ ! -x /usr/bin/getopt ]; then
2ce02c4e
ER
39 echo >&1 "You need to install util-linux to use adapter"
40 exit 1
cb71b7bb 41fi
2ce02c4e 42
434dadba
ER
43if [ ! -x /usr/bin/patch ]; then
44 echo >&1 "You need to install patch to use adapter"
45 exit 1
46fi
47
b8f9e95a 48t=$(getopt -o hsmdaV --long help,version,sort,sort-br,no-macros,skip-macros,skip-desc,skip-defattr -n "$self" -- "$@") || exit $?
5dcb40f6
ER
49eval set -- "$t"
50
51while true; do
52 case "$1" in
53 -h|--help)
54 echo 2>&1 "$usage"
55 exit 1
56 ;;
0de62947
ER
57 -s|--no-sort|--skip-sort)
58 export SKIP_SORTBR=1
5dcb40f6 59 ;;
ff9e2987
ER
60 -m|--no-macros|--skip-macros)
61 export SKIP_MACROS=1
62 ;;
63 -d|--skip-desc)
64 export SKIP_DESC=1
65 ;;
66 -a|--skip-defattr)
67 export SKIP_DEFATTR=1
68 ;;
b8f9e95a
ER
69 -V|--version)
70 echo "$VERSIONSTRING"
71 exit 0
72 ;;
5dcb40f6
ER
73 --)
74 shift
8afece54 75 break
5dcb40f6
ER
76 ;;
77 *)
78 echo 2>&1 "$self: Internal error: [$1] not recognized!"
79 exit 1
8afece54 80 ;;
5dcb40f6
ER
81 esac
82 shift
83done
84
d5f65bb3
ER
85diffcol()
86{
87 # vim like diff colourization
88 sed -e '
89 s,\e,\e[44m^[\e[49m,g;
90 s,\a,\e[44m^G\e[49m,g;
91 s,^\(Index:\|diff\|---\|+++\) .*$,\e[32m&,;
92 s,^@@ ,\e[33m&,g;
93 s,^-,\e[35m&,;
94 s,^+,\e[36m&,;
65b4350a 95 s,\r,\e[44m^M\e[49m,g;
d5f65bb3
ER
96 s, , ,g;
97 s,\([^[:space:]]\)\([[:space:]]\+\)$,\1\e[41m\2\e[49m,g;
98 s,$,\e[0m,
99 ' "$@"
100}
101
102diff2hunks()
103{
104 # diff2hunks orignally by dig
105 perl -e '
106#! /usr/bin/perl -w
107
108use strict;
109
110for my $filename (@ARGV) {
8afece54
ER
111 my $counter = 1;
112 my $fh;
113 open $fh, "<", $filename or die "$filename: open for reading: $!";
114 my @lines = <$fh>;
115 my @hunks;
116 my @curheader;
117 for my $i (0 ... $#lines) {
118 next unless $lines[$i] =~ m/^\@\@ /;
119 if ($i >= 2 and $lines[$i - 2] =~ m/^--- / and $lines[$i - 1] =~ m/^\+\+\+ /) {
120 @curheader = @lines[$i - 2 ... $i - 1];
121 }
122 next unless @curheader;
123 my $j = $i + 1;
124 while ($j < @lines and $lines[$j] !~ m/^\@\@ /) {$j++}
125 $j -= 2
126 if $j >= 3 and $j < @lines
127 and $lines[$j - 2] =~ m/^--- /
128 and $lines[$j - 1] =~ m/^\+\+\+ /;
129 $j--;
130 $j-- until $lines[$j] =~ m/^[ @+-]/;
131 my $hunkfilename = $filename;
132 $hunkfilename =~ s/((\.(pat(ch)?|diff?))?)$/"-".sprintf("%03i",$counter++).$1/ei;
133 my $ofh;
134 open $ofh, ">", $hunkfilename or die "$hunkfilename: open for writing: $!";
135 print $ofh @curheader, @lines[$i ... $j];
136 close $ofh;
137 }
d5f65bb3
ER
138}
139' "$@"
140}
141
142adapterize()
143{
8afece54
ER
144 local tmpdir
145 tmpdir=$(mktemp -d ${TMPDIR:-/tmp}/adapter-XXXXXX) || exit
146 if grep -q '\.UTF-8' $SPECFILE; then
147 awk=gawk
148 else
149 awk=awk
150 fi
8afece54 151
2864da1a
ER
152 local tmp=$tmpdir/$(basename $SPECFILE) || exit
153 $awk -f $adapter $SPECFILE > $tmp || exit
154
155 if [ "$(diff --brief $SPECFILE $tmp)" ]; then
156 diff -u $SPECFILE $tmp > $tmp.diff
8afece54 157 if [ -t 1 ]; then
2864da1a 158 diffcol $tmp.diff | less -r
d5f65bb3 159 while : ; do
8afece54
ER
160 echo -n "Accept? (Yes, No, Confirm each chunk)? "
161 read ans
162 case "$ans" in
163 [yYoO]) # y0 mama
2864da1a 164 mv -f $tmp $SPECFILE
8afece54
ER
165 echo "Ok, adapterized."
166 break
167 ;;
168 [cC]) # confirm each chunk
2864da1a
ER
169 diff2hunks $tmp.diff
170 for t in $(ls $tmp-*.diff); do
d5f65bb3 171 diffcol $t | less -r
4f4ec912 172 echo -n "Accept? (Yes, [N]o, Quit)? "
d5f65bb3
ER
173 read ans
174 case "$ans" in
175 [yYoO]) # y0 mama
176 patch < $t
177 ;;
8afece54 178 [Q]) # Abort
4f4ec912
ER
179 break
180 ;;
d5f65bb3 181 esac
8afece54
ER
182 done
183 break
184 ;;
185 [QqnNsS])
186 echo "Ok, exiting."
187 break
188 ;;
189 esac
d5f65bb3 190 done
8afece54 191 else
2864da1a 192 cat $tmp.diff
8afece54
ER
193 fi
194 else
195 echo "The SPEC is perfect ;)"
196 fi
d5f65bb3 197
8afece54 198 rm -rf $tmpdir
d5f65bb3
ER
199}
200
9ec85f5b
AG
201SPECFILE="$1"
202[ -f "$SPECFILE" ] || SPECFILE="$(basename $SPECFILE .spec).spec"
203
204if [ $# -ne 1 -o ! -f "$SPECFILE" ]; then
5dcb40f6
ER
205 echo "$usage"
206 exit 1
3c92ff73 207fi
208
d5f65bb3 209adapterize
This page took 0.114571 seconds and 4 git commands to generate.