projects/guix·blob python-team · refs

172 lines · 5.7 KiB

1From da9e282d834f0e2128501a8154128dc95b4c599d Mon Sep 17 00:00:00 2001
2From: Julien Lepiller <[email protected]>
3Date: Sat, 9 Sep 2017 20:34:38 +0200
4Subject: [PATCH] Add a script to generate component.xml files.
5
6plexus-component-metadata is normally used for this task, but it
7depends on maven-core, which depends on maven-model-builder, which needs
8plexus-component-metadata. This script is meant to break this dependency
9cycle.
10---
11 components.sh | 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
12 1 file changed, 132 insertions(+)
13 create mode 100755 components.sh
14
15diff --git a/components.sh b/components.sh
16new file mode 100755
17index 0000000..c6748bd
18--- /dev/null
19+++ b/components.sh
20@@ -0,0 +1,149 @@
21+#!/bin/sh
22+## This script generates a rough plexus/components.xml file. It is meant to
23+## replace plexus-component-metadata as it eventually has a recursive dependency
24+## on itself.
25+##
26+## This script must be run in the source directory (usually src/main/java).
27+
28+# Finds the complete name from a class name.
29+function find_role() {
30+ role=$1
31+ # Find role
32+ case $role in
33+ "SettingsWriter" | "SettingsReader")
34+ role=org.apache.maven.settings.io.$role
35+ ;;
36+ "SecDispatcher")
37+ role=org.sonatype.plexus.components.sec.dispatcher.$role
38+ ;;
39+ "SettingsDecrypter")
40+ role=org.apache.maven.settings.crypto.$role
41+ ;;
42+ "SettingsBuilder")
43+ role=org.apache.maven.settings.building.$role
44+ ;;
45+ "SettingsValidator")
46+ role=org.apache.maven.settings.validation.$role
47+ ;;
48+ "LoggerFactory")
49+ role=org.eclipse.aether.spi.log.$role
50+ ;;
51+ "RemoteRepositoryManager" | "VersionResolver" | "VersionRangeResolver" \
52+ | "ArtifactResolver" | "RepositoryEventDispatcher" | "MetadataResolver" \
53+ | "SyncContextFactory" | "MetadataGeneratorFactory" | "MetadatResolver" \
54+ | "ArtifactDescriptorReader")
55+ role=org.eclipse.aether.impl.$role
56+ ;;
57+ "ModelBuilder" | "ModelProcessor")
58+ role=org.apache.maven.model.building.$role
59+ ;;
60+ "ModelValidator")
61+ role=org.apache.maven.model.validation.$role
62+ ;;
63+ "ProfileInjector" | "ProfileSelector")
64+ role=org.apache.maven.model.profile.$role
65+ ;;
66+ "ProfileActivator")
67+ role=org.apache.maven.model.profile.activation.$role
68+ ;;
69+ "SuperPomProvider")
70+ role=org.apache.maven.model.superpom.$role
71+ ;;
72+ "ReportConfigurationExpander" | "PluginConfigurationExpander" \
73+ | "ReportingConverter" | "LifecycleBindingsInjector")
74+ role=org.apache.maven.model.plugin.$role
75+ ;;
76+ "ModelLocator")
77+ role=org.apache.maven.model.locator.$role
78+ ;;
79+ "ModelPathTranslator" | "PathTranslator" | "UrlNormalizer" | "ModelUrlNormalizer")
80+ role=org.apache.maven.model.path.$role
81+ ;;
82+ "DependencyManagementInjector" | "PluginManagementInjector")
83+ role=org.apache.maven.model.management.$role
84+ ;;
85+ "ModelWriter" | "ModelReader")
86+ role=org.apache.maven.model.io.$role
87+ ;;
88+ "DependencyManagementImporter")
89+ role=org.apache.maven.model.composition.$role
90+ ;;
91+ "ModelNormalizer")
92+ role=org.apache.maven.model.normalization.$role
93+ ;;
94+ "ModelInterpolator")
95+ role=org.apache.maven.model.interpolation.$role
96+ ;;
97+ "InheritanceAssembler")
98+ role=org.apache.maven.model.inheritance.$role
99+ ;;
100+ *)
101+ role=$role
102+ ;;
103+ esac
104+ echo $role
105+}
106+
107+function generate_xml() {
108+echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
109+echo "<component-set>"
110+echo "<components>"
111+
112+for file in `find -name '*.java'`; do
113+ annot=`grep "@Component" $file`
114+ if [ "$?" == "0" ]; then
115+ # We have a component!
116+ role=$(echo $annot | sed 's|.*role = \(.*\).class.*|\1|')
117+ role_hint=$(echo $annot | sed 's|.*hint = "\(.*\)" .*|\1|')
118+ if [ "$role_hint" = "$annot" ]; then
119+ role_hint=default
120+ fi
121+ implem=$(echo $file | sed -e 's|^\./||' -e 's|\.java||' -e 's|/|.|g')
122+ role=$(find_role $role)
123+
124+ echo "<component>"
125+ echo " <role>$role</role>"
126+ echo " <role-hint>$role_hint</role-hint>"
127+ echo " <implementation>$implem</implementation>"
128+ echo " <description />"
129+ echo " <isolated-realm>false</isolated-realm>"
130+ echo " <requirements>"
131+ reqn=1
132+ cont=true
133+ while [ "$cont" = "true" ]; do
134+ requirement=$(grep "@Requirement" $file -A1 | head -n ${reqn} | tail -1)
135+ ((reqn++))
136+ property=$(grep "@Requirement" $file -A1 | head -n ${reqn} | tail -1)
137+ if (echo $requirement | grep "@Requirement" >/dev/null); then
138+ ((reqn++))
139+ ((reqn++))
140+ optional=$(echo $requirement | sed 's|.*optional = \(.*\) .*|\1|')
141+ req_role=$(echo $requirement | sed 's|.*role = \(.*\).class .*|\1|')
142+ if (echo $req_role | grep "@Requirement" >/dev/null); then
143+ req_role=$(echo $property | sed 's|.*private \(.*\) .*|\1|')
144+ fi
145+ req_role=$(find_role $req_role)
146+ req_name=$(echo $property | sed 's|[^ ]* [^ ]* \([^ ;]*\).*|\1|')
147+ echo " <requirement>"
148+ echo " <role>$req_role</role>"
149+ echo " <field-name>$req_name</field-name>"
150+ if (echo $optional | grep "@Requirement" >/dev/null); then
151+ :
152+ else
153+ echo " <optional>$optional</optional>"
154+ fi
155+ echo " </requirement>"
156+ else
157+ cont=false
158+ fi
159+ done
160+ echo " </requirements>"
161+ echo "</component>"
162+ fi
163+done
164+
165+echo "</components>"
166+echo "</component-set>"
167+}
168+
169+(cd $1; generate_xml) > $2
170--
1712.14.1
172