rubys 02/01/01 10:25:37
Modified: proposal/gump build.xml
proposal/gump/java Project.java
proposal/gump/project gump.xml jakarta-ant.xml
jakarta-velocity.xml
proposal/gump/site/xdocs project.xml
proposal/gump/stylesheet xref.xsl
Log:
Add support for inheriting dependencies.
Revision Changes Path
1.3 +1 -0 jakarta-alexandria/proposal/gump/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-alexandria/proposal/gump/build.xml,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- build.xml 31 Dec 2001 22:00:15 -0000 1.2
+++ build.xml 1 Jan 2002 18:25:36 -0000 1.3
@@ -21,6 +21,7 @@
<jar file="jenny.jar" basedir="classes"/>
<uptodate property="uptodate" targetfile="work/merge.xml">
+ <srcfiles dir="." includes="jenny.jar"/>
<srcfiles dir="." includes="${workspace}"/>
<srcfiles dir="profile" includes="*.xml"/>
<srcfiles dir="project" includes="*.xml"/>
1.20 +65 -0 jakarta-alexandria/proposal/gump/java/Project.java
Index: Project.java
===================================================================
RCS file: /home/cvs/jakarta-alexandria/proposal/gump/java/Project.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- Project.java 10 Dec 2001 15:48:08 -0000 1.19
+++ Project.java 1 Jan 2002 18:25:36 -0000 1.20
@@ -299,6 +299,68 @@
}
/**
+ * Process all inherited dependencies.
+ */
+ private void inheritDependencies() {
+ for (Enumeration e=dependsOn.elements(); e.hasMoreElements(); ) {
+ Element depend = (Element) e.nextElement();
+ String inherit = depend.getAttribute("inherit");
+ Project p = (Project) projects.get(depend.getAttribute("project"));
+ if (p == null) continue;
+
+ // if inherit="all" is specified on a depends element, then all
+ // of the optional and depends elements on the referenced project
+ // are inherited by this project.
+ //
+ // if inherit="hard", the same thing happens except that all
+ // optional dependencies are converted to "hard" dependencies in
+ // the copy.
+ if (inherit.equals("all") || inherit.equals("hard")) {
+ for (Enumeration d=p.dependsOn.keys(); d.hasMoreElements(); ) {
+ String name = (String) d.nextElement();
+ if (dependsOn.get(name) == null) {
+ Element source = (Element) p.dependsOn.get(name);
+ String type = source.getNodeName();
+ Element clone;
+ if (inherit.equals("hard") && type.equals("option")) {
+ clone = document.createElement("depend");
+ Jenny.copyChildren(source, clone);
+ } else {
+ clone = (Element) source.cloneNode(true);
+ }
+ clone.setAttribute("inherited", "true");
+ dependsOn.put(name,clone);
+ element.appendChild(clone);
+ }
+ }
+ } else if (inherit.equals("runtime")) {
+ // look for runtime="true" dependencies in the referenced
+ // project. Convert depends to options if the reference to
+ // the project is an option.
+ String type = depend.getNodeName();
+ for (Enumeration d=p.dependsOn.keys(); d.hasMoreElements(); ) {
+ String name = (String) d.nextElement();
+ if (dependsOn.get(name) == null) {
+ Element source = (Element) p.dependsOn.get(name);
+ if (source.getAttribute("runtime").equals("true")) {
+ Element clone;
+ if (type.equals("option")) {
+ clone = document.createElement("option");
+ Jenny.copyChildren(source, clone);
+ } else {
+ clone = (Element) source.cloneNode(true);
+ }
+ clone.setAttribute("inherited", "true");
+ dependsOn.put(name,clone);
+ element.appendChild(clone);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
* Implement a deterministing sort order. Projects which are most
* referenced get priority. After that, order is determined alphabetically.
*/
@@ -320,6 +382,8 @@
/**
* Sort all projects in an order that respects the dependencies. If such
* an order can not be determined, print out the ones that form a loop.
+ * As we determine the order, process the inherited dependencies. This
+ * way the inheritance will recurse properly.
*/
private static void sort() throws Exception {
TreeSet todo = new TreeSet(new Ranker());
@@ -331,6 +395,7 @@
Project p = (Project) projects.get(i.next());
if (p.isReady(todo)) {
p.moveToLast();
+ p.inheritDependencies();
todo.remove(p.name);
i=todo.iterator();
}
1.3 +1 -4 jakarta-alexandria/proposal/gump/project/gump.xml
Index: gump.xml
===================================================================
RCS file: /home/cvs/jakarta-alexandria/proposal/gump/project/gump.xml,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- gump.xml 31 Dec 2001 01:28:19 -0000 1.2
+++ gump.xml 1 Jan 2002 18:25:36 -0000 1.3
@@ -12,10 +12,7 @@
</ant>
<depend project="jakarta-ant"/>
- <depend project="commons-collections"/>
- <option project="jakarta-velocity"/>
- <depend project="jakarta-avalon-logkit"/>
- <depend project="jdom"/>
+ <option project="jakarta-velocity" inherit="runtime"/>
<depend project="xml-xerces"/>
<depend project="xml-xalan2"/>
<option project="xml-batik"/>
1.26 +2 -11 jakarta-alexandria/proposal/gump/project/jakarta-ant.xml
Index: jakarta-ant.xml
===================================================================
RCS file: /home/cvs/jakarta-alexandria/proposal/gump/project/jakarta-ant.xml,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- jakarta-ant.xml 3 Dec 2001 15:57:03 -0000 1.25
+++ jakarta-ant.xml 1 Jan 2002 18:25:36 -0000 1.26
@@ -26,13 +26,9 @@
<project name="dist-ant">
<ant target="distribution"/>
- <depend project="bootstrap-ant"/>
- <depend project="xml-xerces"/>
- <depend project="xml-xalan2"/>
+ <depend project="jakarta-ant" inherit="all"/>
<option project="xml-xalan1-compat"/>
- <option project="xml-stylebook2"/>
<option project="bsf"/>
- <option project="junit"/>
<option project="jakarta-regexp"/>
<option project="jakarta-oro"/>
<option project="jakarta-log4j"/>
@@ -50,12 +46,7 @@
<mkdir dir="build/testcases"/>
<ant target="run-tests"/>
- <depend project="dist-ant"/>
- <depend project="xml-xerces"/>
- <depend project="xml-xalan2"/>
- <depend project="junit"/>
- <depend project="jakarta-regexp"/>
- <depend project="jakarta-oro"/>
+ <depend project="dist-ant" inherit="hard"/>
<work nested="build/classes"/>
<work nested="build/testcases"/>
1.33 +4 -13 jakarta-alexandria/proposal/gump/project/jakarta-velocity.xml
Index: jakarta-velocity.xml
===================================================================
RCS file: /home/cvs/jakarta-alexandria/proposal/gump/project/jakarta-velocity.xml,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- jakarta-velocity.xml 1 Nov 2001 23:32:31 -0000 1.32
+++ jakarta-velocity.xml 1 Jan 2002 18:25:36 -0000 1.33
@@ -9,19 +9,19 @@
<project name="jakarta-velocity">
<ant basedir="build" target="dist">
- <depend property="log.jar" project="jakarta-avalon-logkit"/>
+ <depend property="log.jar" project="jakarta-avalon-logkit" runtime="true"/>
<depend property="oro.jar" project="jakarta-oro"/>
<property name="version" value="gump"/>
</ant>
<depend project="jakarta-ant"/>
<depend project="xml-xerces"/>
<depend project="jakarta-servletapi"/>
- <depend project="jdom"/>
+ <depend project="jdom" runtime="true"/>
<depend project="werken.xpath"/>
<depend project="bcel"/>
<depend project="junit"/>
<depend project="jakarta-log4j"/>
- <depend project="commons-collections"/>
+ <depend project="commons-collections" runtime="true"/>
<home nested="bin"/>
<jar name="velocity-gump.jar"/>
<javadoc nested="docs/api"/>
@@ -29,17 +29,8 @@
<project name="jakarta-velocity-test">
<ant basedir="build" buildfile="testcases.xml"/>
- <depend project="jakarta-ant"/>
- <depend project="xml-xerces"/>
- <depend project="junit"/>
- <depend project="jakarta-velocity"/>
- <depend project="commons-collections"/>
- <depend project="jdom"/>
- <depend project="werken.xpath"/>
+ <depend project="jakarta-velocity" inherit="hard"/>
<depend project="antlr.runtime"/>
- <depend project="jakarta-avalon-logkit"/>
- <depend project="jakarta-log4j"/>
- <depend project="jakarta-oro"/>
<work nested="test/cpload/test1.jar"/>
<work nested="test/cpload/test2.jar"/>
<work nested="test/multiloader/test1.jar"/>
1.6 +32 -0 jakarta-alexandria/proposal/gump/site/xdocs/project.xml
Index: project.xml
===================================================================
RCS file: /home/cvs/jakarta-alexandria/proposal/gump/site/xdocs/project.xml,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- project.xml 26 Oct 2001 00:36:43 -0000 1.5
+++ project.xml 1 Jan 2002 18:25:37 -0000 1.6
@@ -111,6 +111,22 @@
<td>The name of the project depended on.</td>
<td>Yes</td>
</tr>
+ <tr>
+ <td>inherit</td>
+ <td>Specifies whether dependendencies of this dependency are to be
+ inherited. Default is "none". Other choices are "all" which will
+ copy all dependencies as, "runtime" which will only copy the runtime
+ dependencies, and "hard" which will not only copy all
+ dependencies, but will also convert option elements into depend
+ elements in the process.</td>
+ <td>No</td>
+ </tr>
+ <tr>
+ <td>runtime</td>
+ <td>Specifies whether this dependency is needed at runtime.
+ Choices are "true" and "false" with the default being false.</td>
+ <td>No</td>
+ </tr>
</table>
</subsection>
@@ -134,6 +150,22 @@
<td>project</td>
<td>The name of the project depended on.</td>
<td>Yes</td>
+ </tr>
+ <tr>
+ <td>inherit</td>
+ <td>Specifies whether dependendencies of this dependency are to be
+ inherited. Default is "none". Other choices are "all" which will
+ copy all dependencies as, "runtime" which will only copy the runtime
+ dependencies, and "hard" which will not only copy all
+ dependencies, but will also convert option elements into depend
+ elements in the process.</td>
+ <td>No</td>
+ </tr>
+ <tr>
+ <td>runtime</td>
+ <td>Specifies whether this dependency is needed at runtime.
+ Choices are "true" and "false" with the default being false.</td>
+ <td>No</td>
</tr>
</table>
</subsection>
1.18 +12 -1 jakarta-alexandria/proposal/gump/stylesheet/xref.xsl
Index: xref.xsl
===================================================================
RCS file: /home/cvs/jakarta-alexandria/proposal/gump/stylesheet/xref.xsl,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- xref.xsl 28 Oct 2001 03:37:28 -0000 1.17
+++ xref.xsl 1 Jan 2002 18:25:37 -0000 1.18
@@ -66,6 +66,11 @@
<xsl:sort select="@name"/>
<!-- "decorate open" link based on type of dependency -->
+ <xsl:if test="depend[@project=$project and @inherited] |
+ option[@project=$project and @inherited]">
+ <xsl:text>(</xsl:text>
+ </xsl:if>
+
<xsl:if test="not(depend[@project=$project])">
<xsl:text>[</xsl:text>
</xsl:if>
@@ -88,6 +93,11 @@
<xsl:if test="not(depend[@project=$project])">
<xsl:text>]</xsl:text>
</xsl:if>
+
+ <xsl:if test="depend[@project=$project and @inherited] |
+ option[@project=$project and @inherited]">
+ <xsl:text>)</xsl:text>
+ </xsl:if>
<!-- end "decoration" -->
</xsl:for-each>
</td>
@@ -97,7 +107,8 @@
<br/> Legend:
<blockquote>
- [] : optional dependency
+ () : inherited dependency
+ <br/> [] : optional dependency
<br/> ${} : property reference
</blockquote>
</content>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>