[jboss-cvs] JBossAS SVN: r77478 - in trunk: connector/src/main/org/jboss/resource/connectionmanager and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Aug 26 06:24:26 EDT 2008


Author: alex.loubyansky at jboss.com
Date: 2008-08-26 06:24:26 -0400 (Tue, 26 Aug 2008)
New Revision: 77478

Added:
   trunk/testsuite/src/resources/jca/deployment/xa-interleaving-ds.xml
Modified:
   trunk/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalTxDataSource.java
   trunk/connector/src/main/org/jboss/resource/connectionmanager/TxConnectionManager.java
   trunk/connector/src/main/org/jboss/resource/connectionmanager/TxConnectionManagerMBean.java
   trunk/connector/src/main/org/jboss/resource/deployers/builder/ConnectionManagerBuilder.java
   trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplateInfo.java
   trunk/connector/src/main/org/jboss/resource/metadata/mcf/LocalDataSourceDeploymentMetaData.java
   trunk/connector/src/main/org/jboss/resource/metadata/mcf/ManagedConnectionEmptyContentAdapter.java
   trunk/connector/src/main/org/jboss/resource/metadata/mcf/ManagedConnectionFactoryDeploymentMetaData.java
   trunk/testsuite/src/main/org/jboss/test/jca/test/AbstractPoolingStressTest.java
   trunk/testsuite/src/main/org/jboss/test/jca/test/ManagedDeploymentUnitTestCase.java
   trunk/testsuite/src/resources/jca/deployment/empty-content-ds.xml
   trunk/testsuite/src/resources/jca/deployment/track-connection-by-tx-ds.xml
Log:
JBAS-5203 Deprecate the track-connection-by-tx (enabled-by-default) with a <interleaving/> flag for XA Users; corrected one connection factory marshalling test which fails now (it should have) and added one more for xa cf marshalling test which also fails currently for the same reason

Modified: trunk/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalTxDataSource.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalTxDataSource.java	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/connector/src/main/org/jboss/resource/adapter/jdbc/local/LocalTxDataSource.java	2008-08-26 10:24:26 UTC (rev 77478)
@@ -91,7 +91,7 @@
       
       connectionManager = new TxConnectionManager(cachedConnectionManager, pool, transactionManager);
       connectionManager.setLocalTransactions(true);
-      connectionManager.setTrackConnectionByTx(true);
+      connectionManager.setInterleaving(false);
       pool.setConnectionListenerFactory(connectionManager);
       datasource = connectionManager.getPoolingStrategy().getManagedConnectionFactory().createConnectionFactory(new ConnectionManagerDelegate());
       bindConnectionFactory();

Modified: trunk/connector/src/main/org/jboss/resource/connectionmanager/TxConnectionManager.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/connectionmanager/TxConnectionManager.java	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/connector/src/main/org/jboss/resource/connectionmanager/TxConnectionManager.java	2008-08-26 10:24:26 UTC (rev 77478)
@@ -137,7 +137,7 @@
 
    private TransactionManager tm;
 
-   private boolean trackConnectionByTx = false;
+   private boolean interleaving;
 
    private boolean localTransactions;
    
@@ -222,16 +222,30 @@
       this.tm = tm;
    }
 
+   @Deprecated
    public boolean isTrackConnectionByTx()
    {
-      return trackConnectionByTx;
+      log.warn("isTrackConnectionByTx() is deprecated in favor of isInterleaving()");
+      return !isInterleaving();
    }
 
+   @Deprecated
    public void setTrackConnectionByTx(boolean trackConnectionByTx)
    {
-      this.trackConnectionByTx = trackConnectionByTx;
+      log.warn("setTrackConnectionByTx(boolean value) is deprecated in favor of setInterleaving(boolean value)");
+      setInterleaving(!trackConnectionByTx);
    }
 
+   public boolean isInterleaving()
+   {
+      return interleaving;
+   }
+   
+   public void setInterleaving(boolean value)
+   {
+      this.interleaving = value;
+   }
+   
    public boolean isLocalTransactions()
    {
       return localTransactions;
@@ -241,7 +255,7 @@
    {
       this.localTransactions = localTransactions;
       if (localTransactions)
-         setTrackConnectionByTx(true);
+         setInterleaving(false);
    }
 
    public int getXAResourceTransactionTimeout()
@@ -354,7 +368,7 @@
          Transaction tx = tm.getTransaction();
          if (tx != null && TxUtils.isActive(tx) == false)
             throw new ResourceException("Transaction is not active: tx=" + tx);
-         if (trackConnectionByTx)
+         if (!interleaving)
             trackByTransaction = tx;
       }
       catch (Throwable t)
@@ -363,7 +377,7 @@
       }
 
       if (trace)
-         log.trace("getManagedConnection trackByTx=" + trackConnectionByTx + " tx=" + trackByTransaction);
+         log.trace("getManagedConnection interleaving=" + interleaving + " tx=" + trackByTransaction);
       return super.getManagedConnection(trackByTransaction, subject, cri);
    }
 

Modified: trunk/connector/src/main/org/jboss/resource/connectionmanager/TxConnectionManagerMBean.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/connectionmanager/TxConnectionManagerMBean.java	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/connector/src/main/org/jboss/resource/connectionmanager/TxConnectionManagerMBean.java	2008-08-26 10:24:26 UTC (rev 77478)
@@ -67,19 +67,36 @@
 
    /**
     * mbean get-set pair for field trackConnectionByTx Get the value of trackConnectionByTx
+    * Deprecated in favor of isInterleaving()
     * 
     * @return value of trackConnectionByTx
     */
+   @Deprecated
    boolean isTrackConnectionByTx();
 
    /**
     * Set the value of trackConnectionByTx
+    * Deprecated in favor of setInterleaving(boolean value)
     * 
     * @param trackConnectionByTx Value to assign to trackConnectionByTx
     */
+   @Deprecated
    void setTrackConnectionByTx(boolean trackConnectionByTx);
 
    /**
+    * Whether interleaving transactions are allowed in case of XA
+    * @return the value of interleaving
+    */
+   boolean isInterleaving();
+
+   /**
+    * Whether interleaving transaction are allowed in case of XA
+    * 
+    * @param value  the value of interleaving
+    */
+   void setInterleaving(boolean value);
+   
+   /**
     * mbean get-set pair for field localTransactions Get the value of localTransactions
     * 
     * @return value of localTransactions

Modified: trunk/connector/src/main/org/jboss/resource/deployers/builder/ConnectionManagerBuilder.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/deployers/builder/ConnectionManagerBuilder.java	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/connector/src/main/org/jboss/resource/deployers/builder/ConnectionManagerBuilder.java	2008-08-26 10:24:26 UTC (rev 77478)
@@ -163,7 +163,10 @@
          attribute = buildSimpleAttribute("LocalTransactions", String.valueOf(md.getLocalTransactions()));
          attributes.add(attribute);
          
-         attribute = buildSimpleAttribute("TrackConnectionByTx", String.valueOf(md.getTrackConnectionByTransaction()));
+         //attribute = buildSimpleAttribute("TrackConnectionByTx", String.valueOf(md.getTrackConnectionByTransaction()));
+         //attributes.add(attribute);
+
+         attribute = buildSimpleAttribute("Interleaving", String.valueOf(md.isInterleaving()));
          attributes.add(attribute);
 
          if(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.XA))

Modified: trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplateInfo.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplateInfo.java	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/connector/src/main/org/jboss/resource/deployers/management/DsDataSourceTemplateInfo.java	2008-08-26 10:24:26 UTC (rev 77478)
@@ -225,7 +225,8 @@
       addManagedProperty("no-tx-separate-pools", "", true, SimpleMetaType.BOOLEAN, mo);
       addManagedProperty("statistics-formatter", "", true, SimpleMetaType.STRING, mo);
       addManagedProperty("isSameRM-override-value", "", true, SimpleMetaType.BOOLEAN, mo);
-      addManagedProperty("track-connection-by-tx", "", true, SimpleMetaType.BOOLEAN, mo);
+      addManagedProperty("track-connection-by-tx", "", false, SimpleMetaType.BOOLEAN, mo);
+      addManagedProperty("interleaving", "", false, SimpleMetaType.BOOLEAN, mo);
       MetaType type = new MapCompositeMetaType(SimpleMetaType.STRING);
       addManagedProperty("config-property", "The connection factory config properties", false, type, mo);
       addManagedProperty("security-domain", "The security-domain used to validate connections", false, SimpleMetaType.STRING, mo);

Modified: trunk/connector/src/main/org/jboss/resource/metadata/mcf/LocalDataSourceDeploymentMetaData.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/metadata/mcf/LocalDataSourceDeploymentMetaData.java	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/connector/src/main/org/jboss/resource/metadata/mcf/LocalDataSourceDeploymentMetaData.java	2008-08-26 10:24:26 UTC (rev 77478)
@@ -47,7 +47,6 @@
 
    public LocalDataSourceDeploymentMetaData()
    {
-      setTrackConnectionByTransaction(true);
       setLocalTransactions(true);
       setTransactionSupportMetaData(ManagedConnectionFactoryTransactionSupportMetaData.LOCAL);
    }

Modified: trunk/connector/src/main/org/jboss/resource/metadata/mcf/ManagedConnectionEmptyContentAdapter.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/metadata/mcf/ManagedConnectionEmptyContentAdapter.java	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/connector/src/main/org/jboss/resource/metadata/mcf/ManagedConnectionEmptyContentAdapter.java	2008-08-26 10:24:26 UTC (rev 77478)
@@ -23,6 +23,7 @@
 
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 
+import org.jboss.logging.Logger;
 import org.w3c.dom.Element;
 
 /**
@@ -33,6 +34,7 @@
  */
 public class ManagedConnectionEmptyContentAdapter extends XmlAdapter<Object, Boolean>
 {
+   private static Logger log = Logger.getLogger(ManagedConnectionEmptyContentAdapter.class);
    
    @Override
    public Boolean unmarshal(Object obj) throws Exception
@@ -40,14 +42,19 @@
       Element e = (Element)obj;
       Boolean results = Boolean.FALSE;
       
-      
-      if (e.getNodeName().equals("track-connection-by-tx") || e.getNodeName().equals("no-tx-separate-pools")
-            || e.getNodeName().equals("local-transaction") || e.getNodeName().equals("use-strict-min") || e.getNodeName().equals("xa-transaction"))
+      String node = e.getNodeName();
+      if (node.equals("interleaving") || node.equals("no-tx-separate-pools")
+            || node.equals("local-transaction") || node.equals("use-strict-min") || node.equals("xa-transaction"))
       {
          results = Boolean.TRUE;
-
       }               
       
+      if(node.equals("track-connection-by-tx"))
+      {
+         log.warn("<track-connection-by-tx/> is deprecated and is now assumed to be present by default (JBAS-5203)");
+         results = Boolean.TRUE;
+      }
+      
       return results;
    }
 

Modified: trunk/connector/src/main/org/jboss/resource/metadata/mcf/ManagedConnectionFactoryDeploymentMetaData.java
===================================================================
--- trunk/connector/src/main/org/jboss/resource/metadata/mcf/ManagedConnectionFactoryDeploymentMetaData.java	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/connector/src/main/org/jboss/resource/metadata/mcf/ManagedConnectionFactoryDeploymentMetaData.java	2008-08-26 10:24:26 UTC (rev 77478)
@@ -119,11 +119,17 @@
    
    @XmlElement(name="isSameRM-override-value")
    private Boolean isSameRMOverrideValue = Boolean.FALSE;
-   
+
+   // is always true now and left here for the xml binding
+   @Deprecated
    @XmlJavaTypeAdapter(ManagedConnectionEmptyContentAdapter.class)
    @XmlElement(name="track-connection-by-tx")
-   private Boolean trackConnectionByTransaction = Boolean.FALSE;
-      
+   private Boolean trackConnectionByTransaction;
+
+   @XmlJavaTypeAdapter(ManagedConnectionEmptyContentAdapter.class)
+   @XmlElement(name="interleaving")
+   private Boolean interleaving;
+
    /** The transactionSupportMetaData */
    @XmlTransient
    private ManagedConnectionFactoryTransactionSupportMetaData transactionSupportMetaData = ManagedConnectionFactoryTransactionSupportMetaData.NONE;
@@ -154,6 +160,10 @@
    @XmlElement(name="local-transaction")
    private Boolean localTransactions = Boolean.FALSE;
 
+   public ManagedConnectionFactoryDeploymentMetaData()
+   {
+      this.interleaving = Boolean.FALSE;
+   }
    
    /**
     * Get the connectionDefinition.
@@ -506,17 +516,32 @@
       this.isSameRMOverrideValue = isSameRMOverrideValue;
    }
 
+   @Deprecated
    @ManagementProperty(name="track-connection-by-tx", includeInTemplate=true)
    public Boolean getTrackConnectionByTransaction()
    {
-      return getLocalTransactions() || trackConnectionByTransaction;
+      return !isInterleaving();
    }
 
+   @Deprecated
    public void setTrackConnectionByTransaction(Boolean trackConnectionByTransaction)
    {
-      this.trackConnectionByTransaction = trackConnectionByTransaction;
+      if(getLocalTransactions() && !trackConnectionByTransaction)
+         throw new IllegalStateException("In case of local transactions track-connection-by-tx must always be true");      
+      setInterleaving(!trackConnectionByTransaction);
    }
 
+   @ManagementProperty(name="interleaving", includeInTemplate=true)
+   public Boolean isInterleaving()
+   {
+      return !getLocalTransactions() && interleaving;
+   }
+
+   public void setInterleaving(Boolean interleaving)
+   {
+      this.interleaving = interleaving;
+   }
+
    @ManagementProperty(name="local-transaction", use={ViewUse.RUNTIME})
    public Boolean getLocalTransactions()
    {

Modified: trunk/testsuite/src/main/org/jboss/test/jca/test/AbstractPoolingStressTest.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/jca/test/AbstractPoolingStressTest.java	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/testsuite/src/main/org/jboss/test/jca/test/AbstractPoolingStressTest.java	2008-08-26 10:24:26 UTC (rev 77478)
@@ -76,12 +76,12 @@
       cm = new TxConnectionManager(ccm, poolingStrategy, tm);
       if (isSticky())
       {
-         cm.setTrackConnectionByTx(true);
+         cm.setInterleaving(false);
          mcf.setFailJoin(true);
       }
       else
       {
-         cm.setTrackConnectionByTx(false);
+         cm.setInterleaving(true);
          mcf.setFailJoin(false);
       }
       mcf.setSleepInStart(200);

Modified: trunk/testsuite/src/main/org/jboss/test/jca/test/ManagedDeploymentUnitTestCase.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/jca/test/ManagedDeploymentUnitTestCase.java	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/testsuite/src/main/org/jboss/test/jca/test/ManagedDeploymentUnitTestCase.java	2008-08-26 10:24:26 UTC (rev 77478)
@@ -47,20 +47,23 @@
          if(md instanceof NoTxDataSourceDeploymentMetaData)
          {
             assertFalse(md.getLocalTransactions());
-            assertFalse(md.getTrackConnectionByTransaction());
+            assertTrue(md.getTrackConnectionByTransaction());
+            assertFalse(md.isInterleaving());
             assertTrue(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.NONE));
 
          }else if(md instanceof LocalDataSourceDeploymentMetaData)
          {
             assertTrue(md.getLocalTransactions());
             assertTrue(md.getTrackConnectionByTransaction());
+            assertFalse(md.isInterleaving());
             assertFalse(md.getNoTxSeparatePools());
             assertTrue(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.LOCAL));
 
          }else if(md instanceof XADataSourceDeploymentMetaData)
          {
             assertFalse(md.getLocalTransactions());
-            assertFalse(md.getTrackConnectionByTransaction());
+            assertTrue(md.getTrackConnectionByTransaction());
+            assertFalse(md.isInterleaving());
             assertTrue(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.XA));
 
          }
@@ -85,11 +88,10 @@
          {
             assertFalse(md.getLocalTransactions());
             assertFalse(md.getTrackConnectionByTransaction());
+            assertFalse(md.isInterleaving());
             assertTrue(md.getTransactionSupportMetaData().equals(ManagedConnectionFactoryTransactionSupportMetaData.NONE));
-
          }
       }
-
    }
 
 
@@ -112,7 +114,8 @@
    {
       ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/empty-content-ds.xml");
       ManagedConnectionFactoryDeploymentMetaData md = group.getDeployments().get(0);
-      assertTrue(md.getTrackConnectionByTransaction());
+      assertTrue(md.getTrackConnectionByTransaction()); // this is always true for local tx
+      assertFalse(md.isInterleaving());
       assertTrue(md.getNoTxSeparatePools());
       assertTrue(md.getUseStrictMin());
    }
@@ -120,15 +123,27 @@
    public void testEmptyContentMarshal() throws Exception
    {
       ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/empty-content-ds.xml");
-      ManagedConnectionFactoryDeploymentMetaData md = group.getDeployments().get(0);
       String result = ManagedDeploymentSupportHelper.marshalResourceAsString(group);
       group = ManagedDeploymentSupportHelper.unmarshalSource(result);
-      assertTrue(md.getTrackConnectionByTransaction());
+      ManagedConnectionFactoryDeploymentMetaData md = group.getDeployments().get(0);
+      assertTrue(md.getTrackConnectionByTransaction()); // this is always true for local tx
+      assertFalse(md.isInterleaving());
       assertTrue(md.getNoTxSeparatePools());
       assertTrue(md.getUseStrictMin());
 
    }
 
+   public void testXAWithInterleavingMarshal() throws Exception
+   {
+      ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/xa-interleaving-ds.xml");
+      String result = ManagedDeploymentSupportHelper.marshalResourceAsString(group);
+      group = ManagedDeploymentSupportHelper.unmarshalSource(result);
+      ManagedConnectionFactoryDeploymentMetaData md = group.getDeployments().get(0);
+      assertFalse(md.getTrackConnectionByTransaction());
+      assertTrue(md.isInterleaving());
+
+   }
+
    public void testBasicUnmarshal() throws Exception
    {
       ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/remote-jdbc/remote-ds.xml");
@@ -171,7 +186,7 @@
    {
       ManagedConnectionFactoryDeploymentGroup group = ManagedDeploymentSupportHelper.unmarshalResource("jca/deployment/track-connection-by-tx-ds.xml");
       List<ManagedConnectionFactoryDeploymentMetaData> deployments = group.getDeployments();
-      assertEquals(3, deployments.size());
+      assertEquals(4, deployments.size());
 
       for (ManagedConnectionFactoryDeploymentMetaData md : deployments)
       {
@@ -179,16 +194,25 @@
          if(md.getJndiName().equals("XAWithTrackConnectionByTx"))
          {
             assertTrue(md.getTrackConnectionByTransaction());
+            assertFalse(md.isInterleaving());
             assertFalse(md.getLocalTransactions());
          }
+         else if(md.getJndiName().equals("DefaultXA"))
+         {
+            assertTrue(md.getTrackConnectionByTransaction());
+            assertFalse(md.isInterleaving());
+            assertFalse(md.getLocalTransactions());
+         }
          else if(md.getJndiName().equals("XAWithInterleaving"))
          {
             assertFalse(md.getTrackConnectionByTransaction());
+            assertTrue(md.isInterleaving());
             assertFalse(md.getLocalTransactions());
          }
          else if(md.getJndiName().equals("Local"))
          {
             assertTrue(md.getTrackConnectionByTransaction());
+            assertFalse(md.isInterleaving());
             assertTrue(md.getLocalTransactions());
          }
          else
@@ -207,6 +231,7 @@
       suite.addTest(new ManagedDeploymentUnitTestCase("testDefaultValuesUnmarshal"));
       suite.addTest(new ManagedDeploymentUnitTestCase("testConnectionPoolUnmarshal"));
       suite.addTest(new ManagedDeploymentUnitTestCase("testTrackConnectionByTxUnmarshal"));
+      suite.addTest(new ManagedDeploymentUnitTestCase("testXAWithInterleavingMarshal"));
 
       return suite;
    }

Modified: trunk/testsuite/src/resources/jca/deployment/empty-content-ds.xml
===================================================================
--- trunk/testsuite/src/resources/jca/deployment/empty-content-ds.xml	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/testsuite/src/resources/jca/deployment/empty-content-ds.xml	2008-08-26 10:24:26 UTC (rev 77478)
@@ -8,7 +8,6 @@
       <metadata>
          <type-mapping>Hypersonic SQL</type-mapping>
       </metadata>
-   	  <track-connection-by-tx/>
    	  <no-tx-separate-pools/>
    	  <use-strict-min/>   		
    </local-tx-datasource>

Modified: trunk/testsuite/src/resources/jca/deployment/track-connection-by-tx-ds.xml
===================================================================
--- trunk/testsuite/src/resources/jca/deployment/track-connection-by-tx-ds.xml	2008-08-26 09:03:11 UTC (rev 77477)
+++ trunk/testsuite/src/resources/jca/deployment/track-connection-by-tx-ds.xml	2008-08-26 10:24:26 UTC (rev 77478)
@@ -5,8 +5,13 @@
       <track-connection-by-tx/>
    </tx-connection-factory>	
    <tx-connection-factory>
+      <jndi-name>DefaultXA</jndi-name>		
+      <xa-transaction/>
+   </tx-connection-factory>
+   <tx-connection-factory>
       <jndi-name>XAWithInterleaving</jndi-name>		
       <xa-transaction/>
+      <interleaving/>
    </tx-connection-factory>
    <tx-connection-factory>
       <jndi-name>Local</jndi-name>		

Added: trunk/testsuite/src/resources/jca/deployment/xa-interleaving-ds.xml
===================================================================
--- trunk/testsuite/src/resources/jca/deployment/xa-interleaving-ds.xml	                        (rev 0)
+++ trunk/testsuite/src/resources/jca/deployment/xa-interleaving-ds.xml	2008-08-26 10:24:26 UTC (rev 77478)
@@ -0,0 +1,7 @@
+<datasources>   
+   <tx-connection-factory>
+      <jndi-name>XAWithInterleaving</jndi-name>		
+      <xa-transaction/>
+      <interleaving/>
+   </tx-connection-factory>
+</datasources>




More information about the jboss-cvs-commits mailing list