From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sun, 4 May 2008 22:03:45 +0400 From: Alexey Tourbin To: devel@lists.altlinux.org Message-ID: <20080504180345.GC24150@solemn.turbinal> Mail-Followup-To: devel@lists.altlinux.org Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="PPYy/fEw/8QCHSq3" Content-Disposition: inline Subject: [devel] sisyphus_check: check-subdirs X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.10b3 Precedence: list Reply-To: ALT Linux Team development discussions List-Id: ALT Linux Team development discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 04 May 2008 18:03:05 -0000 Archived-At: List-Archive: List-Post: --PPYy/fEw/8QCHSq3 Content-Type: multipart/mixed; boundary="gE7i1rD7pdK0Ng3j" Content-Disposition: inline --gE7i1rD7pdK0Ng3j Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: quoted-printable =F1 =D2=C5=C1=CC=C9=DA=CF=D7=C1=CC =CE=CF=D7=D5=C0 =D0=D2=CF=D7=C5=D2=CB=D5= =CE=C1 =D7=CC=C1=C4=C5=CE=C9=C5 =D0=CF=C4=CB=C1=D4=C1=CC=CF=C7=C1=CD=C9. =FC=D4=C1 =D0=D2=CF=D7=C5=D2=CB=C1 =D4=D2=C5=C2=D5=C5=D4, =DE=D4=CF =C5=D3= =CC=C9 =CB=C1=CB=CF=CA-=D4=CF =CB=C1=D4=C1=CC=CF=C7 /A =DA=C1=D0=C1=CB=CF=D7=C1=CE =D7 =D0=C1=CB=C5=D4, =D4=CF =C9 =D7=D3=C5 =D0= =CF=C4=CB=C1=D4=C1=CC=CF=C7=C9 =D7 =C9=C5=D2=C1=D2=C8=C9=C9 /A/**/* =D4=CF=D6=C5 =C4=CF=CC=D6=CE=D9 =C2=D9=D4=D8 =DA=C1=D0=C1=CB=CF=D7=C1=CE=D9= =D7 =DC=D4=CF=D4 =D0=C1=CB=C5=D4. =F0=D2=C9=CD=C5=D2: %files %dir /A /A/B/C/D =EF=DB=C9=C2=CB=C1 -- =D4=C1=CB=D6=C5 =C4=CF=CC=D6=CE=D9 =C2=D9=D4=D8 =DA= =C1=D0=C1=CB=CF=D7=C1=CE=D9 =D0=CF=C4=CB=C1=D4=C1=CC=CF=C7=C9 /A/B =C9 /A/B/C, =D0=CF=D4=CF=CD=D5 =DE=D4=CF =CF=CE=C9 =D1=D7=CC=D1=C0=D4=D3=D1= =D0=D2=CF=CD=C5=D6=D5=D4=CF=DE=CE=D9=CD=C9 =CB=CF=CD=D0=CF=CE=C5=CE=D4=C1= =CD=C9 =D0=D5=D4=C9 /A/B/C/D. commit a139ba3bb19c1651b2c52bab8b237fe73b4e0b4f Author: Alexey Tourbin Date: Sun May 4 20:46:17 2008 +0400 check-subdirs: new check for unpackaged directories diff --git a/sisyphus_check/sisyphus_check.d/170-check-subdirs b/sisyphus_c= heck/sisyphus_check.d/170-check-subdirs new file mode 100644 index 0000000..522978b --- /dev/null +++ b/sisyphus_check/sisyphus_check.d/170-check-subdirs @@ -0,0 +1,72 @@ +#!/bin/sh -efu +# +# Check that directory packaging is hierarchically consistent. +# +# E.g. consider this %files section: +# %dir /A +# /A/B/C/D +# Now we require that directories "/A/B" and "/A/B/C" are also packaged. +# +# Copyright (C) 2008 Alexey Tourbin +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +find_unpackaged_subdirs() +{ + [ -n "${rpm_filelist?}" ] || return 0 + printf '%s\n' "$rpm_filelist" |awk ' + /^\// { + OWN[$0] =3D 1 + } + function check_path(path) { + # "/A/B/C/D" -> ["","A","B","C","D"] + n =3D split(path, comp, "/") + # find shortest prefix which is owned by the package, + # i.e. either "/A" or "/A/B" (or none - no need to check "/A/B/C"). + prefix =3D "" + for (i =3D 2; i < n-1; i++) { + prefix =3D prefix "/" comp[i] + if (prefix in OWN) + break + } + if (!prefix) + return + # check if every subdir under the prefix is also owned + subdir =3D prefix + for (j =3D i+1; j < n; j++) { + subdir =3D subdir "/" comp[j] + if (!(subdir in OWN)) + printf "%s\t%s\t%s\n", prefix, subdir, path + } + } + END { + for (path in OWN) + check_path(path) + }' +} + +check_subdirs() +{ + local f=3D"$1"; shift || return + local subdirs=3D"$(find_unpackaged_subdirs)" + [ -n "$subdirs" ] || return 0 + local tab=3D"$(printf '\t')" + subdirs=3D$(printf '%s\n' "$subdirs" |sort -t "$tab" -u -k2,2) + local prefix subdir path + printf '%s\n' "$subdirs" | + while IFS=3D"$tab" read -r prefix subdir path; do + FileError "unpackaged directory: $subdir" "$f" + done + return 1 +} + +run_check() +{ + if ! check_subdirs "$1"; then + Message 'ERROR: you have problems!' + return 1 + fi +} =F7 =D3=C9=DA=C9=C6 =DC=D4=C1 =D0=D2=CF=D7=C5=D2=CB=C1 =D0=CF=CA=C4=A3=D4, = =CE=C1=D7=C5=D2=CE=CF=C5, =D0=CF=D3=CC=C5 =CF=CB=CF=CE=DE=C1=CE=C9=D1 =C6= =D2=C9=DA=C1. =E5=D3=CC=C9 =C5=D3=D4=D8 =D7=CF=DA=D2=C1=D6=C5=CE=C9=D1, =C1 =C9=CD=C5=CE= =CE=CF, =C5=D3=CC=C9 =C5=D3=D4=D8 =D3=CC=D5=DE=C1=C9, =CB=CF=C7=C4=C1 =D5= =D3=CC=CF=D7=C9=C5 "=C9=C5=D2=C1=D2=C8=C9=DE=C5=D3=CB=CF=CA =CB=CF=CE=D3=C9=D3=D4=C5=CE=D4=CE= =CF=D3=D4=C9" =D7=CC=C1=C4=C5=CE=C9=D1 =CB=C1=D4=C1=CC=CF=C7=C1=CD=C9 =D7= =D9=D0=CF=CC=CE=D1=D4=D8=D3=D1 =CE=C5 =C4=CF=CC=D6=CE=CF, =D1 =D0=D2=CF=DB=D5 =DC=D4=C9 =D7=CF=DA=D2=C1=D6= =C5=CE=C9=D1 =CF=DA=D7=D5=DE=C9=D4=D8. =F0=CF=CB=C1 =D6=C5 =D0=CF=D0=C1=CC=C9=D3=D8 =D3=CC=C5=C4=D5=C0=DD=C9=C5 *.= noarch.rpm =D0=C1=CB=C5=D4=D9. --gE7i1rD7pdK0Ng3j Content-Type: application/octet-stream Content-Disposition: attachment; filename="noarch-unpackaged-subdirs.txt.gz" Content-Transfer-Encoding: base64 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 --gE7i1rD7pdK0Ng3j-- --PPYy/fEw/8QCHSq3 Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iEYEARECAAYFAkgd+oAACgkQfBKgtDjnu0bzowCfQ5II/WYy4FiMHlvF78qrQA0L aVQAoJeFJx6qOwwXSY5ihp9YdF2hdOg3 =ZIfo -----END PGP SIGNATURE----- --PPYy/fEw/8QCHSq3--