You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm-commits@maven.apache.org by st...@apache.org on 2009/08/20 10:41:15 UTC

svn commit: r806087 - in /maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src: main/java/org/apache/maven/scm/provider/bazaar/ main/java/org/apache/maven/scm/provider/bazaar/command/ main/java/org/apache/maven/scm/provider/bazaar/command/...

Author: struberg
Date: Thu Aug 20 08:41:15 2009
New Revision: 806087

URL: http://svn.apache.org/viewvc?rev=806087&view=rev
Log:
[SCM-492] tagging support added
Submitted by: Johan Walles 
o applied with slight code reformatting - txs

Added:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java   (with props)
Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkout/BazaarCheckOutCommand.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java?rev=806087&r1=806086&r2=806087&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java Thu Aug 20 08:41:15 2009
@@ -43,12 +43,12 @@
 
     private static final float PYTHON_REQ = 2.4f;
 
-    //Bazaar spesific
+    //Bazaar specific
     private static final String BAZAAR_VERSION_TAG = "bzr (bazaar-ng) ";
 
     private static final String BAZAAR_INSTALL_URL = "'http://bazaar-vcs.org/Installation'";
 
-    //Python spesific
+    //Python specific
     private static final String PYTHON_EXEC = "python";
 
     private static final String PYTHON_VERSION = "-V";

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java?rev=806087&r1=806086&r2=806087&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java Thu Aug 20 08:41:15 2009
@@ -30,6 +30,7 @@
 import org.apache.maven.scm.command.diff.DiffScmResult;
 import org.apache.maven.scm.command.remove.RemoveScmResult;
 import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.command.tag.TagScmResult;
 import org.apache.maven.scm.command.update.UpdateScmResult;
 import org.apache.maven.scm.provider.AbstractScmProvider;
 import org.apache.maven.scm.provider.ScmProviderRepository;
@@ -41,6 +42,7 @@
 import org.apache.maven.scm.provider.bazaar.command.diff.BazaarDiffCommand;
 import org.apache.maven.scm.provider.bazaar.command.remove.BazaarRemoveCommand;
 import org.apache.maven.scm.provider.bazaar.command.status.BazaarStatusCommand;
+import org.apache.maven.scm.provider.bazaar.command.tag.BazaarTagCommand;
 import org.apache.maven.scm.provider.bazaar.command.update.BazaarUpdateCommand;
 import org.apache.maven.scm.provider.bazaar.repository.BazaarScmProviderRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
@@ -205,6 +207,17 @@
     }
 
     /** {@inheritDoc} */
+    public TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        BazaarTagCommand command = new BazaarTagCommand();
+
+        command.setLogger( getLogger() );
+
+        return (TagScmResult) command.execute( repository, fileSet, parameters );
+    }
+
+    /** {@inheritDoc} */
     public UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
         throws ScmException
     {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java?rev=806087&r1=806086&r2=806087&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarConstants.java Thu Aug 20 08:41:15 2009
@@ -92,6 +92,16 @@
     public static final String REVNO_CMD = "revno";
 
     /**
+     * Create a tag
+     */
+    public static final String TAG_CMD = "tag";
+
+    /**
+     * List directory contents, bazaar style.
+     */
+    public static final String LS_CMD = "ls";
+    
+    /**
      * Show inventory of the current working copy or a revision
      */
     public static final String INVENTORY_CMD = "inventory";
@@ -104,7 +114,12 @@
 
     public static final String VERBOSE_OPTION = "--verbose";
 
+    /**
+     * Option to enable recursing into subdirectories.
+     */
+    public static final String RECURSIVE_OPTION = "--recursive";
+    
     public static final String VERSION = "version";
 
     public static final String CHECK = "check";
-}
+}
\ No newline at end of file

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkout/BazaarCheckOutCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkout/BazaarCheckOutCommand.java?rev=806087&r1=806086&r2=806087&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkout/BazaarCheckOutCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/checkout/BazaarCheckOutCommand.java Thu Aug 20 08:41:15 2009
@@ -23,7 +23,6 @@
 import org.apache.maven.scm.ScmFileSet;
 import org.apache.maven.scm.ScmResult;
 import org.apache.maven.scm.ScmVersion;
-import org.apache.maven.scm.command.Command;
 import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
@@ -36,6 +35,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 
 /**
  * @author <a href="mailto:torbjorn@smorgrav.org">Torbj�rn Eikli Sm�rgrav</a>
@@ -43,19 +43,12 @@
  */
 public class BazaarCheckOutCommand
     extends AbstractCheckOutCommand
-    implements Command
 {
     /** {@inheritDoc} */
     protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet fileSet,
                                                         ScmVersion version, boolean recursive )
         throws ScmException
     {
-
-        if ( version != null && StringUtils.isNotEmpty( version.getName() ) )
-        {
-            throw new ScmException( "This provider can't handle tags." );
-        }
-
         BazaarScmProviderRepository repository = (BazaarScmProviderRepository) repo;
         String url = repository.getURI();
 
@@ -74,9 +67,17 @@
         }
 
         // Do the actual checkout
-        String[] checkoutCmd = new String[]{BazaarConstants.BRANCH_CMD, url, checkoutDir.getAbsolutePath()};
+        ArrayList checkoutCmd = new ArrayList();
+        checkoutCmd.add( BazaarConstants.BRANCH_CMD );
+        checkoutCmd.add( url );
+        checkoutCmd.add( checkoutDir.getAbsolutePath() );
+        if ( version != null && StringUtils.isNotEmpty( version.getName() ) ) {
+             checkoutCmd.add( BazaarConstants.REVISION_OPTION );
+             checkoutCmd.add( "tag:" + version.getName() );
+        }
         BazaarConsumer checkoutConsumer = new BazaarConsumer( getLogger() );
-        BazaarUtils.execute( checkoutConsumer, getLogger(), checkoutDir.getParentFile(), checkoutCmd );
+        BazaarUtils.execute( checkoutConsumer, getLogger(), checkoutDir.getParentFile(),
+                             (String[]) checkoutCmd.toArray( new String[0] ) );
 
         // Do inventory to find list of checkedout files
         String[] inventoryCmd = new String[]{BazaarConstants.INVENTORY_CMD};

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java?rev=806087&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java Thu Aug 20 08:41:15 2009
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.maven.scm.provider.bazaar.command.tag;
+
+import java.io.File;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.bazaar.command.BazaarConsumer;
+
+/**
+ * Parse output from "bzr ls".
+ * @author <a href="mailto:johan.walles@gmail.com">Johan Walles</a>
+ * @version $Id$
+ */
+class BazaarLsConsumer extends BazaarConsumer {
+    /**
+     * The root directory of this bazaar repository.
+     */
+    private File repositoryRoot;
+    
+    /**
+     * A list of the files found by ls.
+     */
+    private List files;
+    
+    /**
+     * Create a new "bzr ls" consumer.
+     * @param repositoryRoot The root directory of this bazaar repository.
+     * @param wantedStatus The status we'll report for the files listed.
+     */
+    public BazaarLsConsumer(ScmLogger logger,
+            File repositoryRoot,
+            ScmFileStatus wantedStatus) 
+    {
+        super( logger );
+        files = new LinkedList();
+    }
+    
+    public void doConsume( ScmFileStatus status, String trimmedLine ) {
+        if ( trimmedLine.endsWith( File.separator ) ) {
+            // Don't report directories
+            return;
+        }
+        
+        String path = new File( repositoryRoot, trimmedLine ).toString();
+        files.add( new ScmFile( path, ScmFileStatus.TAGGED ) );
+    }
+    
+    /**
+     * Answer what files were listed by bzr ls.
+     * @return A list of files listed by bzr ls.
+     */
+    public List getListedFiles() {
+        return files;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarLsConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java?rev=806087&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java Thu Aug 20 08:41:15 2009
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.maven.scm.provider.bazaar.command.tag;
+
+import java.io.File;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.ScmTagParameters;
+import org.apache.maven.scm.command.tag.AbstractTagCommand;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.bazaar.BazaarUtils;
+import org.apache.maven.scm.provider.bazaar.command.BazaarConstants;
+import org.apache.maven.scm.provider.bazaar.command.BazaarConsumer;
+import org.apache.maven.scm.provider.bazaar.repository.BazaarScmProviderRepository;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * @author <a href="mailto:johan.walles@gmail.com">Johan Walles</a>
+ * @version $Id$
+ */
+public class BazaarTagCommand extends AbstractTagCommand {
+    protected ScmResult executeTagCommand( ScmProviderRepository repository,
+            ScmFileSet fileSet, String tagName,
+            ScmTagParameters scmTagParameters ) throws ScmException
+    {
+        if ( tagName == null || StringUtils.isEmpty( tagName.trim() ) ) {
+            throw new ScmException( "tag name must be specified" );
+        }
+        
+        if ( !fileSet.getFileList().isEmpty() ) {
+            throw new ScmException( "tagging specific files is not allowed" );
+        }
+        
+        // Perform the tagging operation
+        File bazaarRoot = fileSet.getBasedir();
+        BazaarConsumer consumer = new BazaarConsumer( getLogger() );
+        String[] tagCmd = new String[] { BazaarConstants.TAG_CMD, tagName };
+        ScmResult tagResult = BazaarUtils.execute( consumer, getLogger(), bazaarRoot, tagCmd );
+        if ( !tagResult.isSuccess() ) {
+            return new TagScmResult( null, tagResult );
+        }
+
+        // Do "bzr ls -R -r tag:tagName" to get a list of the tagged files
+        BazaarLsConsumer lsConsumer = 
+            new BazaarLsConsumer( getLogger(), bazaarRoot, ScmFileStatus.TAGGED );
+        String[] lsCmd = new String[] {
+                                       BazaarConstants.LS_CMD,
+                                       BazaarConstants.RECURSIVE_OPTION,
+                                       BazaarConstants.REVISION_OPTION,
+                                       "tag:" + tagName
+                                       };
+        ScmResult lsResult = BazaarUtils.execute(lsConsumer, getLogger(), bazaarRoot, lsCmd);
+        if ( !lsResult.isSuccess() ) {
+            return new TagScmResult( null, lsResult );
+        }
+        
+        // Push new tags to parent branch if any
+        BazaarScmProviderRepository bazaarRepository = (BazaarScmProviderRepository) repository;
+        if ( !bazaarRepository.getURI().equals( fileSet.getBasedir().getAbsolutePath() ) )
+        {
+            String[] pushCmd = new String[] { BazaarConstants.PUSH_CMD, bazaarRepository.getURI() };
+            ScmResult pushResult =
+                BazaarUtils.execute( new BazaarConsumer( getLogger() ), getLogger(), fileSet.getBasedir(), pushCmd );
+            if ( !pushResult.isSuccess() ) {
+                return new TagScmResult( null, pushResult );
+            }
+        }
+        
+        return new TagScmResult( lsConsumer.getListedFiles(), tagResult );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java?rev=806087&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java Thu Aug 20 08:41:15 2009
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.maven.scm.provider.bazaar.command.tag;
+
+import org.apache.maven.scm.provider.bazaar.BazaarRepoUtils;
+import org.apache.maven.scm.tck.command.tag.TagCommandTckTest;
+
+/**
+ * Tests for bzr tag command requiring an actual bzr client.
+ * 
+ * @author <a href="mailto:johan.walles@gmail.com">Johan Walles</a>
+ */
+public class BazaarTagCommandTckTest extends TagCommandTckTest {
+    public String getScmUrl() throws Exception {
+        return BazaarRepoUtils.getScmUrl();
+    }
+    
+    public void initRepo() throws Exception {
+        BazaarRepoUtils.initRepo();
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/tag/BazaarTagCommandTckTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision