- rpmquery 4.3.1 (what ships with FC2) seems to crash if too large of a
[build.git] / packages.sh
1 #!/bin/bash
2 #
3 # Generates XML manifest of packages for
4 # http://www.planet-lab.org/Software/download.php
5 #
6 # Mark Huang <mlhuang@cs.princeton.edu>
7 # Copyright (C) 2004 The Trustees of Princeton University
8 #
9 # $Id: packages.sh,v 1.3 2004/10/27 19:38:36 mlhuang Exp $
10 #
11
12 xml_escape_pcdata() {
13     # & to &amp;
14     # " to \"
15     # ' to &apos;
16     # < to &lt;
17     # > to &gt;
18     sed \
19         -e 's/\&/\&amp;/g' | sed \
20         -e 's/"/\&quot;/g' \
21         -e "s/'/\&apos;/g" \
22         -e 's/</\&lt;/g' \
23         -e 's/>/\&gt;/g'
24 }
25
26 xml_escape_cdata() {
27     # & to &amp;
28     # \ to \\
29     # " to \"
30     # ' to &apos;
31     # < to &lt;
32     # > to &gt;
33     sed \
34         -e 's/\&/\&amp;/g' \
35         -e 's/\\/\\\\/g' | sed \
36         -e 's/"/\\"/g' \
37         -e "s/'/\&apos;/g" \
38         -e 's/</\&lt;/g' \
39         -e 's/>/\&gt;/g'
40 }
41
42 # XXX rpmquery version 4.3.1 crashes if too large of a queryformat is passed
43 #TAGS=$(rpm --querytags)
44 TAGS="NAME VERSION RELEASE URL BUILDTIME DESCRIPTION"
45
46 cat <<EOF
47 <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
48 <!-- \$Id: packages.sh,v 1.3 2004/10/27 19:38:36 mlhuang Exp $ -->
49 <!-- Generated at $(date) in $(cd ${1-.} && pwd -P) on $HOSTNAME by $USER -->
50 <!DOCTYPE PACKAGES [
51   <!ELEMENT PACKAGES (PACKAGE)*>
52   <!ELEMENT PACKAGE (#PCDATA)>
53   <!ATTLIST PACKAGE
54 EOF
55
56 # List each tag as an attribute
57 QUERYFORMAT=
58 for tag in $TAGS ; do
59
60 cat <<EOF
61   $tag CDATA #REQUIRED
62 EOF
63
64     # Build up QUERYFORMAT for later use
65     QUERYFORMAT="$QUERYFORMAT  $tag=@QUOTE@%{$tag}@QUOTE@\n"
66
67 done
68
69 cat <<EOF
70   >
71 ]>
72 <PACKAGES>
73 EOF
74
75 # For every RPM in the current directory
76 RPMS=$(find ${1-.} -name '*.rpm')
77 for rpm in $RPMS ; do
78
79 cat <<EOF
80   <PACKAGE
81 EOF
82
83     # Print the tags (@QUOTE@ prevents escaping of syntax)
84     rpmquery --queryformat "$QUERYFORMAT" -p $rpm | xml_escape_cdata | sed -e 's/@QUOTE@/"/g'
85
86 # Print the name of the RPM
87 cat <<EOF
88   >
89   $(basename $rpm | xml_escape_pcdata)
90   </PACKAGE>
91 EOF
92
93 done
94
95 cat <<EOF
96 </PACKAGES>
97 EOF