[jboss-svn-commits] JBL Code SVN: r19762 - in labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks: src/main/java/org/jboss/soa/esb/actions and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Apr 29 10:06:02 EDT 2008
Author: beve
Date: 2008-04-29 10:06:02 -0400 (Tue, 29 Apr 2008)
New Revision: 19762
Added:
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-edisax-0.3.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-edisax-model-0.3.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/nekohtml-0.9.5.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/opencsv-1.8.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/smooks/
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/smooks/SmooksAction.java
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/smooks/
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/smooks/SmooksActionUnitTest.java
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/smooks/smooks-config.xml
Removed:
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-edisax-0.2.1.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-edisax-model-0.2.1.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/opencsv-1.6.jar
Modified:
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-commons-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-magger-0.1.3.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-core-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-css-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-csv-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-edi-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-javabean-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-misc-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-routing-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-scripting-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-servlet-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-templating-1.0.jar
labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-tinak-0.8.1.jar
Log:
Work for JBESB-1680 "Make sure the official Smooks v1.0 jars are in the product before we"
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-commons-1.0.jar
===================================================================
(Binary files differ)
Deleted: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-edisax-0.2.1.jar
===================================================================
(Binary files differ)
Added: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-edisax-0.3.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-edisax-0.3.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Deleted: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-edisax-model-0.2.1.jar
===================================================================
(Binary files differ)
Added: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-edisax-model-0.3.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-edisax-model-0.3.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-magger-0.1.3.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-core-1.0.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-css-1.0.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-csv-1.0.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-edi-1.0.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-javabean-1.0.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-misc-1.0.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-routing-1.0.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-scripting-1.0.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-servlet-1.0.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-smooks-templating-1.0.jar
===================================================================
(Binary files differ)
Modified: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/milyn-tinak-0.8.1.jar
===================================================================
(Binary files differ)
Added: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/nekohtml-0.9.5.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/nekohtml-0.9.5.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Deleted: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/opencsv-1.6.jar
===================================================================
(Binary files differ)
Added: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/opencsv-1.8.jar
===================================================================
(Binary files differ)
Property changes on: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/lib/ext/opencsv-1.8.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/smooks/SmooksAction.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/smooks/SmooksAction.java (rev 0)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/main/java/org/jboss/soa/esb/actions/smooks/SmooksAction.java 2008-04-29 14:06:02 UTC (rev 19762)
@@ -0,0 +1,205 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ *
+ * (C) 2005-2006, JBoss Inc.
+ */
+package org.jboss.soa.esb.actions.smooks;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.actions.AbstractActionPipelineProcessor;
+import org.jboss.soa.esb.actions.ActionLifecycleException;
+import org.jboss.soa.esb.actions.ActionProcessingException;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.listeners.message.MessageDeliverException;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.milyn.Smooks;
+import org.milyn.container.ExecutionContext;
+import org.milyn.container.plugin.PayloadProcessor;
+import org.milyn.container.plugin.ResultType;
+
+/**
+ * Smooks pipeline processor action.
+ * <p/>
+ * Usage:
+ * <pre>
+ * <action name="transform" class="org.jboss.soa.esb.actions.smooks.SmooksAction">
+ * <property name="smooksConfig" value="smooks-config.xml" />
+ * </action>
+ *
+ * Optional properties:
+ * <property name="get-payload-location" value="input" />
+ * <property name="set-payload-location" value="ouput" />
+ * <property name="excludeNonSerializables" value="false" />
+ * </pre>
+ *
+ * Description of configuration properties:
+ * <ul>
+ * <li><i>smooksConfig</i> - the Smooks configuration file. Can be a path on the file system or on the classpath.
+ * <li><i>get-payload-location</i> - the body location which contains the object to be transformed.
+ * <li><i>set-payload-location</i> - the body location where the transformed object will be placed.
+ * <li><i>excludeNonSerializables</i> - if true, non serializable attributes from the Smooks ExecutionContext will no be included. Default is true.
+ * </ul>
+ * After Smooks has performed the filtering the process method will make the attributes that have been set in the
+ * the ExecutionContext available for other actions in the ESB. <br>
+ * These attributes (Map) can be accessed by using the {@link #EXECUTION_CONTEXT_ATTR_MAP_KEY} key like this:
+ * <pre>
+ * message.getBody().get( EXECUTION_CONTEXT_ATTR_MAP_KEY );
+ * </pre>
+ *
+ *
+ * @author <a href="mailto:tom.fennelly at jboss.com">tom.fennelly at jboss.com</a>
+ * @author <a href="mailto:daniel.bevenius at gmail.com">daniel.bevenius at gmail.com</a>
+ */
+public class SmooksAction extends AbstractActionPipelineProcessor
+{
+ public static final String EXECUTION_CONTEXT_ATTR_MAP_KEY = "SmooksExecutionContext";
+
+ private Smooks smooks;
+
+ private PayloadProcessor payloadProcessor;
+
+ private MessagePayloadProxy payloadProxy;
+
+ private boolean excludeNonSerializables;
+
+ // public
+
+ public SmooksAction( final ConfigTree configTree ) throws ConfigurationException
+ {
+ final String smooksConfig = configTree.getRequiredAttribute("smooksConfig");
+ try
+ {
+ smooks = new Smooks(smooksConfig);
+ payloadProcessor = new PayloadProcessor( smooks, ResultType.STRING );
+ }
+ catch (Exception e)
+ {
+ throw new ConfigurationException("Failed to create Smooks instance for config '" + smooksConfig + "'.", e);
+ }
+
+ payloadProxy = new MessagePayloadProxy( configTree );
+ excludeNonSerializables = Boolean.valueOf( configTree.getAttribute( "excludeNonSerializables", "true" ) );
+ }
+
+ /**
+ * Executes the actual Smooks tranformation.
+ *
+ * @param message The ESB Message object
+ *
+ * @return The ESB Message object with the output of the transformation.
+ *
+ */
+ public Message process( final Message message) throws ActionProcessingException
+ {
+ // Create Smooks ExecutionContext.
+ final ExecutionContext executionContext = createExecutionContext( smooks );
+
+ // Create the Smooks PayloadProcessor which will execute the transformation.
+ final Object newPayload = payloadProcessor.process( extractPayload( message), executionContext );
+
+ // Set the ExecutionContext's attributes on the message instance so other actions can access them.
+ message.getBody().add( EXECUTION_CONTEXT_ATTR_MAP_KEY, getSerializableObjectsMap( executionContext.getAttributes() ) );
+
+ return packagePayload( newPayload, message );
+ }
+
+ @Override
+ public void destroy() throws ActionLifecycleException
+ {
+ smooks.close();
+ super.destroy();
+ }
+
+ // protected
+
+ /*
+ * Hook for subclasses to control how the execution context is created.
+ * Might be useful for Actions that use profiles for example.
+ */
+ protected ExecutionContext createExecutionContext( final Smooks smooks )
+ {
+ return smooks.createExecutionContext();
+ }
+
+ /*
+ * Hook for subclasses to extract the message payload in
+ * any way they see fit.
+ */
+ protected Object extractPayload(final Message message ) throws ActionProcessingException
+ {
+ try
+ {
+ return payloadProxy.getPayload( message );
+ }
+ catch (MessageDeliverException e)
+ {
+ throw new ActionProcessingException("MessgeDeliveryException while trying to retrieve the message payload:", e);
+ }
+ }
+
+ /*
+ * Hook for subclasses so they can control what and where the payload
+ * is added to the ESB Message object.
+ */
+ protected Message packagePayload( final Object payload, Message message ) throws ActionProcessingException
+ {
+ try
+ {
+ payloadProxy.setPayload( message, payload );
+ return message;
+ }
+ catch (MessageDeliverException e)
+ {
+ throw new ActionProcessingException("MessgeDeliveryException while trying to retrieve the message payload:", e);
+
+ }
+ }
+
+ /**
+ * Will return a Map containing only the Serializable objects
+ * that exist in the passed-in Map if {@link #excludeNonSerializables} is true.
+ *
+ * @param smooksAttribuesMap - Map containing attributes from the Smooks ExecutionContext
+ * @return Map - Map containing only the Serializable objects from the passed-in map.
+ */
+ @SuppressWarnings( "unchecked" )
+ protected Map getSerializableObjectsMap( final Map smooksAttribuesMap )
+ {
+ if ( !excludeNonSerializables )
+ return smooksAttribuesMap;
+
+ Map serObjsOnlyMap = new HashMap();
+
+ Set<Map.Entry<String,String>> s = smooksAttribuesMap.entrySet();
+ for (Map.Entry me : s)
+ {
+ Object value = me.getValue();
+ if( value instanceof Serializable )
+ {
+ serObjsOnlyMap.put( me.getKey(), value );
+ }
+ }
+ return serObjsOnlyMap;
+ }
+
+}
Added: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/smooks/SmooksActionUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/smooks/SmooksActionUnitTest.java (rev 0)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/smooks/SmooksActionUnitTest.java 2008-04-29 14:06:02 UTC (rev 19762)
@@ -0,0 +1,160 @@
+/*
+ * JBoss, Home of Professional Open Source Copyright 2006, JBoss Inc., and
+ * individual contributors as indicated by the @authors tag. See the
+ * copyright.txt in the distribution for a full listing of individual
+ * contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2.1 of the License, or (at your option)
+ * any later version.
+ *
+ * This software is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this software; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
+ * site: http://www.fsf.org.
+ */
+package org.jboss.soa.esb.actions.smooks;
+
+import static org.junit.Assert.*;
+
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.jboss.soa.esb.ConfigurationException;
+import org.jboss.soa.esb.actions.ActionProcessingException;
+import org.jboss.soa.esb.helpers.ConfigTree;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.MessagePayloadProxy;
+import org.jboss.soa.esb.message.format.MessageFactory;
+import org.junit.Before;
+import org.junit.Test;
+
+import junit.framework.JUnit4TestAdapter;
+
+/**
+ * Unit test for {@link SmooksAction}
+ *
+ * @author <a href="mailto:daniel.bevenius at gmail.com">Daniel Bevenius</a>
+ *
+ */
+public class SmooksActionUnitTest
+{
+ private String expectedString = "<test></test>";
+ private ConfigTree config;
+
+ @Test
+ public void process() throws ConfigurationException, ActionProcessingException
+ {
+ SmooksAction action = new SmooksAction( config );
+ Message message = MessageFactory.getInstance().getMessage();
+ message.getBody().add( expectedString );
+
+ Message process = action.process( message );
+
+ String actualString = (String)process.getBody().get();
+ assertEquals( expectedString, actualString );
+ }
+
+ @Test
+ public void processWithPayloadLocation() throws ConfigurationException, ActionProcessingException
+ {
+ config.setAttribute( MessagePayloadProxy.GET_PAYLOAD_LOCATION, "input" );
+ SmooksAction action = new SmooksAction( config );
+ Message message = MessageFactory.getInstance().getMessage();
+ message.getBody().add( "input", expectedString );
+
+ Message process = action.process( message );
+
+ String actualString = (String)process.getBody().get();
+ assertEquals( expectedString, actualString );
+ }
+
+ @Test
+ public void processWithOutLocation() throws ConfigurationException, ActionProcessingException
+ {
+ config.setAttribute( MessagePayloadProxy.SET_PAYLOAD_LOCATION, "output" );
+ SmooksAction action = new SmooksAction( config );
+ Message message = MessageFactory.getInstance().getMessage();
+ message.getBody().add( expectedString );
+
+ Message process = action.process( message );
+
+ String actualString = (String)process.getBody().get( "output" );
+ assertEquals( expectedString, actualString );
+ }
+
+ @Test
+ public void getExecutionContextAttributes() throws ConfigurationException, ActionProcessingException
+ {
+ SmooksAction action = new SmooksAction( config );
+ Message message = MessageFactory.getInstance().getMessage();
+ message.getBody().add( expectedString );
+
+ Message process = action.process( message );
+
+ Object object = process.getBody().get( SmooksAction.EXECUTION_CONTEXT_ATTR_MAP_KEY );
+ assertTrue( object instanceof Map );
+ }
+
+ @Test
+ @SuppressWarnings("unchecked")
+ public void getExecutionContextAttributesNonSerializable() throws ConfigurationException, ActionProcessingException
+ {
+ Map map = new Hashtable();
+ map.put( "test1", "testing" );
+ map.put( "test2", new NonSerializableClass() );
+ SmooksAction action = new SmooksAction( config );
+
+ Map serializableObjects = action.getSerializableObjectsMap( map );
+
+ assertTrue( serializableObjects.containsKey( "test1" ));
+ assertTrue( !serializableObjects.containsKey( "test2" ));
+ }
+
+ @Test
+ @SuppressWarnings("unchecked")
+ public void getExecutionContextAttributesWithSerializable() throws ConfigurationException, ActionProcessingException
+ {
+ Map map = new Hashtable();
+ map.put( "test1", "testing" );
+ map.put( "test2", new NonSerializableClass() );
+ config.setAttribute( "excludeNonSerializables", "false" );
+ SmooksAction action = new SmooksAction( config );
+
+ Map serializableObjects = action.getSerializableObjectsMap( map );
+
+ assertTrue( serializableObjects.containsKey( "test1" ));
+ assertTrue( serializableObjects.containsKey( "test2" ));
+ }
+
+ @Before
+ public void setup()
+ {
+ config = createConfigTree();
+
+ }
+
+ public static junit.framework.Test suite()
+ {
+ return new JUnit4TestAdapter( SmooksActionUnitTest.class );
+ }
+
+ private ConfigTree createConfigTree()
+ {
+ ConfigTree config = new ConfigTree( "SmooksActionTest" );
+ config.setAttribute( "smooksConfig", "/org/jboss/soa/esb/actions/smooks/smooks-config.xml" );
+ return config;
+ }
+
+ private static class NonSerializableClass
+ {
+
+ }
+
+}
Added: labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/smooks/smooks-config.xml
===================================================================
--- labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/smooks/smooks-config.xml (rev 0)
+++ labs/jbossesb/branches/JBESB_4_2_1_GA_FP1/product/services/smooks/src/test/java/org/jboss/soa/esb/actions/smooks/smooks-config.xml 2008-04-29 14:06:02 UTC (rev 19762)
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.0.xsd">
+
+ <resource-config selector="global-parameters">
+ <param name="stream.filter.type">DOM</param>
+ </resource-config>
+
+</smooks-resource-list>
More information about the jboss-svn-commits
mailing list