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 ev...@apache.org on 2006/03/27 22:19:58 UTC

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

Author: evenisse
Date: Mon Mar 27 12:19:55 2006
New Revision: 389253

URL: http://svn.apache.org/viewcvs?rev=389253&view=rev
Log:
o [SCM-175] Fix parsing of changelog entries for merged branches
o [SCM-174] Fix changelog report(take2)
o Better diagnostics and only when something fails (reduced logging when hitting the lucky state :)
Submitted by Torbjørn EIkli Smørgrav

Added:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumerTest.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/resources/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/resources/bazaar/
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/resources/bazaar/changeLogWithMerge.txt   (with props)
Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/Readme.txt
    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/BazaarUtils.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumer.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/diff/BazaarDiffConsumer.java
    maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/BazaarTestUtils.java

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/Readme.txt
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/Readme.txt?rev=389253&r1=389252&r2=389253&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/Readme.txt (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/Readme.txt Mon Mar 27 12:19:55 2006
@@ -1,20 +1,27 @@
 How to build bazaar scm provider?
 
-You must have bazaar installed on your machine. Bazaar is available there (http://bazaar.canonical.com/)
-It require Python and some others modules (http://bazaar.canonical.com/Installation).
+You must have bazaar installed on your machine. Bazaar is available at (http://bazaar-vcs.org/)
+It requires Python and some other modules (http://bazaar-vcs.org/Installation).
 
-For windows users, you'll need, after installation to create a bzr.bat file added in your path with the folowing content:
+For bazaar version 0.8+ consult (http://bazaar-vcs.org/Installation).
+
+For bazaar pre 0.8 on windows:
+
+For windows users, you'll need, after installation to create a bzr.bat file
+added in your path with the following content:
 
 ----------
 python <path_to_bzr_home>\bzr %*
 ----------
 
-Unfortunately, you can't use the Cygwin bzr at this time. While it will start with a batch file called:
+Unfortunately, you can't use the Cygwin bzr at this time.
+While it will start with a batch file called:
 
 ----------
 c:\cygwin\bin\python2.4.exe /usr/bin/bzr %*
 ----------
 
-Any of the arguments that are files cannot be translated to cygwin paths. What is required is support in Commandline
-to recognise a cygwin environment, and for anything that was created with createArgument().setFile(...), it should be
+Any of the arguments that are files cannot be translated to cygwin paths.
+What is required is support in Commandline to recognise a cygwin environment,
+and for anything that was created with createArgument().setFile(...), it should be
 translated with cygpath -w. Commands would be executed with "sh".

Added: 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/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java?rev=389253&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.java Mon Mar 27 12:19:55 2006
@@ -0,0 +1,242 @@
+package org.apache.maven.scm.provider.bazaar;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import java.io.File;
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.DefaultLog;
+import org.apache.maven.scm.provider.bazaar.command.BazaarCommand;
+import org.apache.maven.scm.provider.bazaar.command.BazaarConsumer;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * Check bazaar installation.
+ *
+ * @author <a href="mailto:torbjorn@smorgrav.org">Torbjørn Eikli Smørgrav</a>
+ */
+public class BazaarConfig
+{
+    //Minimum version for the Bazaar SCM
+    private static final float BAZAAR_REQ = 0.7f;
+    private static final float PYTHON_REQ = 2.4f;
+
+    //Bazaar spesific
+    private static final String BAZAAR_VERSION_TAG = "bzr (bazaar-ng) ";
+    private static final String BAZAAR_INSTALL_URL = "'http://bazaar-vcs.org/Installation'";
+
+    //Python spesific
+    private static final String PYTHON_EXEC = "python";
+    private static final String PYTHON_VERSION = "-V";
+    private static final String PYTHON_VERSION_TAG = "Python ";
+
+    //Python modules
+    private static final String PARAMIKO = "\"import paramiko\"";
+    private static final String CCRYPT = "\"import Crypto\"";
+    private static final String CELEMENTREE = "\"import cElementTree\"";
+
+    //Configuration to check with default values (not installed)
+    private VersionConsumer bazaarVersion = new VersionConsumer(null);
+    private VersionConsumer pythonVersion = new VersionConsumer(null);
+    private boolean cElementTree = false;
+    private boolean paramiko = false;
+    private boolean cCrypt = false;
+
+    BazaarConfig( File workingDir )
+    {
+        try
+        {
+            pythonVersion = getPythonVersion( workingDir );
+            paramiko = checkPyModules( workingDir, PARAMIKO ); //does not throw
+            cCrypt = checkPyModules( workingDir, CCRYPT ); //does not throw
+            cElementTree = checkPyModules( workingDir, CELEMENTREE ); //does not throw
+            bazaarVersion = getBazaarVersion( workingDir );
+        }
+        catch ( ScmException e )
+        {
+            //Ignore - Either python and/or bazaar is not installed.
+            //This is already recorded thus we do not generate more info.
+        }
+
+    }
+
+    private boolean checkPyModules( File workingDir, String cmd )
+    {
+        PythonConsumer consumer = new PythonConsumer();
+        int exitCode;
+        try
+        {
+            Commandline cmdLine = buildPythonCmd( workingDir, new String[] { "-c", cmd } );
+            exitCode = BazaarUtils.executeCmd( consumer, cmdLine );
+        }
+        catch ( ScmException e )
+        {
+            //Ignore - error here is likly to manifest itself when checking python anyway.
+            exitCode = -1;
+        }
+
+        return exitCode == 0 && consumer.getConsumedAndClear().equals( "" );
+    }
+
+
+    /**
+     * @return True if one can run basic bazaar commands
+     */
+    private boolean isInstalled()
+    {
+        return pythonVersion.isVersionOk(PYTHON_REQ)
+        && bazaarVersion.isVersionOk(BAZAAR_REQ);
+    }
+
+    /**
+     * @return True if all modules for bazaar are installed.
+     */
+    private boolean isComplete()
+    {
+        return isInstalled() && cElementTree && paramiko && cCrypt;
+    }
+
+    public static VersionConsumer getBazaarVersion( File workingDir )
+        throws ScmException
+    {
+        String[] versionCmd = new String[] { BazaarCommand.VERSION };
+        VersionConsumer consumer = new VersionConsumer( BAZAAR_VERSION_TAG );
+        Commandline cmd = BazaarUtils.buildCmd( workingDir, versionCmd );
+
+        // Execute command
+        BazaarUtils.executeCmd( consumer, cmd );
+
+        // Return result
+        return consumer;
+    }
+
+    public static VersionConsumer getPythonVersion( File workingDir )
+        throws ScmException
+    {
+        String[] versionCmd = new String[] { PYTHON_VERSION };
+        VersionConsumer consumer = new VersionConsumer( PYTHON_VERSION_TAG );
+        Commandline cmd = buildPythonCmd( workingDir, versionCmd );
+
+        // Execute command
+        BazaarUtils.executeCmd( consumer, cmd );
+
+        // Return result
+        return consumer;
+    }
+
+    private static Commandline buildPythonCmd( File workingDir, String[] cmdAndArgs )
+        throws ScmException
+    {
+        Commandline cmd = new Commandline();
+        cmd.setExecutable( PYTHON_EXEC );
+        cmd.setWorkingDirectory( workingDir.getAbsolutePath() );
+        cmd.addArguments( cmdAndArgs );
+
+        if ( !workingDir.exists() )
+        {
+            boolean success = workingDir.mkdirs();
+            if ( !success )
+            {
+                String msg = "Working directory did not exist"
+                    + " and it couldn't be created: " + workingDir;
+                throw new ScmException( msg );
+            }
+        }
+        return cmd;
+    }
+
+    /**
+     * Get version of the bazaar executable <p/> Resolve revision to the last
+     * integer found in the command output.
+     */
+    private static class VersionConsumer
+        extends BazaarConsumer
+    {
+        private final String version_tag;
+        private String versionStr = "NA";
+        private float version = -1;
+
+        VersionConsumer(String version_tag)
+        {
+            super( new DefaultLog() );
+            this.version_tag = version_tag;
+        }
+
+        public void doConsume( ScmFileStatus status, String line )
+        {
+            if ( line.startsWith( version_tag ) )
+            {
+                versionStr = line.substring( version_tag.length() );
+            }
+        }
+
+        String getVersion()
+        {
+            return versionStr;
+        }
+
+        boolean isVersionOk(float min)
+        {
+            return true; //min <= version;
+        }
+    }
+
+    private static class PythonConsumer
+        extends BazaarConsumer
+    {
+
+        private String consumed = "";
+
+        PythonConsumer()
+        {
+            super( new DefaultLog() );
+        }
+
+        public void doConsume( ScmFileStatus status, String line )
+        {
+            consumed = line;
+        }
+
+        String getConsumedAndClear()
+        {
+            String tmp = consumed;
+            consumed = "";
+            return tmp;
+        }
+    }
+
+    private String getInstalledStr() {
+        if (isComplete()) {
+            return "valid and complete.";
+        }
+        return (isInstalled() ? "incomplete. " : "invalid. ") + "Consult " + BAZAAR_INSTALL_URL;
+    }
+
+    public String toString( File workingDir )
+    {
+        boolean bzrOk = bazaarVersion.isVersionOk(BAZAAR_REQ);
+        boolean pyOk = bazaarVersion.isVersionOk(PYTHON_REQ);
+        return "\n  Your Bazaar installation seems to be " + getInstalledStr()
+        + "\n    Python version: " + pythonVersion.getVersion() + (pyOk ? " (OK)" : " (TOO OLD!)")
+        + "\n    Bazaar version: " + bazaarVersion.getVersion() + (bzrOk ? " (OK)" : " (TOO OLD!)")
+        + "\n    Paramiko installed: " + paramiko + " (For remote access eg. sftp) "
+        + "\n    cCrypt installed: " + cCrypt + " (For remote access eg. sftp) "
+        + "\n    cElementTree installed: " + cElementTree + " (Not mandatory) "
+        + "\n";
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarConfig.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/BazaarConfig.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarScmProvider.java?rev=389253&r1=389252&r2=389253&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 Mon Mar 27 12:19:55 2006
@@ -30,6 +30,7 @@
 import org.apache.maven.scm.command.update.UpdateScmResult;
 import org.apache.maven.scm.provider.AbstractScmProvider;
 import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.bazaar.command.BazaarCommand;
 import org.apache.maven.scm.provider.bazaar.command.add.BazaarAddCommand;
 import org.apache.maven.scm.provider.bazaar.command.changelog.BazaarChangeLogCommand;
 import org.apache.maven.scm.provider.bazaar.command.checkin.BazaarCheckInCommand;
@@ -91,13 +92,14 @@
     {
         List errorMessages = new ArrayList();
 
-        String[] checkCmd = new String[]{"check", scmSpecificUrl};
+        String[] checkCmd = new String[]{BazaarCommand.CHECK, scmSpecificUrl};
         ScmResult result;
         try
         {
             File tmpDir = new File( System.getProperty( "java.io.tmpdir" ) );
             result = BazaarUtils.execute( tmpDir, checkCmd );
             errorMessages.add( result.getCommandOutput() );
+            errorMessages.add( result.getProviderMessage() );
         }
         catch ( ScmException e )
         {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarUtils.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarUtils.java?rev=389253&r1=389252&r2=389253&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarUtils.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/BazaarUtils.java Mon Mar 27 12:19:55 2006
@@ -41,7 +41,6 @@
  */
 public class BazaarUtils
 {
-
     /**
      * Map between command and its valid exit codes
      */
@@ -60,36 +59,71 @@
         //Diff is different
         List diffExitCodes = new ArrayList();
         diffExitCodes.add( new Integer( 0 ) ); //No difference
-        diffExitCodes.add( new Integer( 1 ) ); //Difference exists
+        diffExitCodes.add( new Integer( 1 ) ); //Conflicts in merge-like or changes in diff-like
+        diffExitCodes.add( new Integer( 2 ) ); //Unrepresentable diff changes
         exitCodeMap.put( BazaarCommand.DIFF_CMD, diffExitCodes );
     }
 
-    public static ScmResult execute( BazaarConsumer consumer, ScmLogger logger, File workingDir, String[] cmdAndArgs )
+    public static ScmResult execute( BazaarConsumer consumer, ScmLogger logger,
+                                     File workingDir, String[] cmdAndArgs )
         throws ScmException
     {
-    	//Build commandline
-        Commandline cmd = buildCmd(workingDir, cmdAndArgs);
+        try
+        {
+            //Build commandline
+            Commandline cmd = buildCmd( workingDir, cmdAndArgs );
+            logger.info( "EXECUTING: " + cmd );
+
+            //Execute command
+            int exitCode = executeCmd( consumer, cmd );
+
+            //Return result
+            List exitCodes = defaultExitCodes;
+            if (exitCodeMap.containsKey( cmdAndArgs[0] )) {
+                exitCodes = (List) exitCodeMap.get( cmdAndArgs[0] );
+            }
+            boolean success = exitCodes.contains( new Integer( exitCode ) );
+
+            //On failure (and not due to exceptions) - run diagnostics
+            String providerMsg = "Execution of bazaar command succeded";
+            if ( !success )
+            {
+                BazaarConfig config = new BazaarConfig(workingDir);
+                providerMsg = "\nEXECUTION FAILED"
+                    + "\n  Execution of cmd : " + cmdAndArgs[0]
+                    + " failed with exit code: " + exitCode + "."
+                    + "\n  Working directory was: "
+                    + "\n    " + workingDir.getAbsolutePath()
+                    + config.toString(workingDir)
+                    + "\n";
+                logger.error( providerMsg );
+            }
 
-        //Write out info and debug info
-        logger.info( "EXECUTING: " + cmd );
-        //TODO log this as debug information when I understand howto do that
-        logger.info( "Bazaar version: " + getBazaarVersion(workingDir));
-        logger.info( "Working directory: " + workingDir.getAbsolutePath() );
 
-        //Execute command
-        final int exitCode = executeCmd(consumer, cmd);
+            return new ScmResult( cmd.toString(), providerMsg, consumer.getStdErr(), success );
+        }
+        catch ( ScmException se )
+        {
+            String msg = "EXECUTION FAILED"
+                + "\n  Execution failed before invoking the Bazaar command. Last exception:"
+                + "\n    " + se.getMessage();
 
-        //Return result
-        List exitCodes =
-            exitCodeMap.containsKey( cmdAndArgs[0] ) ? (List) exitCodeMap.get( cmdAndArgs[0] ) : defaultExitCodes;
-        boolean success = exitCodes.contains( new Integer( exitCode ) );
+            //Add nested cause if any
+            if ( se.getCause() != null )
+            {
+                msg += "\n  Nested exception:" + "\n    " + se.getCause().getMessage();
+            }
 
-        String providerMsg = "Execution of bazaar command: " + ( success ? "succeded" : "failed" );
-        return new ScmResult( cmd.toString(), providerMsg, consumer.getStdErr(), success );
+            //log and return
+            logger.error( msg );
+            throw se;
+        }
     }
 
-	private static Commandline buildCmd(File workingDir, String[] cmdAndArgs) throws ScmException {
-		Commandline cmd = new Commandline();
+    static Commandline buildCmd( File workingDir, String[] cmdAndArgs )
+        throws ScmException
+    {
+        Commandline cmd = new Commandline();
         cmd.setExecutable( BazaarCommand.EXEC );
         cmd.setWorkingDirectory( workingDir.getAbsolutePath() );
         cmd.addArguments( cmdAndArgs );
@@ -99,15 +133,18 @@
             boolean success = workingDir.mkdirs();
             if ( !success )
             {
-                String msg = "Working directory did not exist and it couldn't be created: " + workingDir;
+                String msg = "Working directory did not exist"
+                    + " and it couldn't be created: " + workingDir;
                 throw new ScmException( msg );
             }
         }
-		return cmd;
-	}
+        return cmd;
+    }
 
-	private static int executeCmd(BazaarConsumer consumer, Commandline cmd) throws ScmException {
-		final int exitCode;
+    static int executeCmd( BazaarConsumer consumer, Commandline cmd )
+        throws ScmException
+    {
+        final int exitCode;
         try
         {
             exitCode = CommandLineUtils.executeCommandLine( cmd, consumer, consumer );
@@ -116,8 +153,8 @@
         {
             throw new ScmException( "Command could not be executed: " + cmd, ex );
         }
-		return exitCode;
-	}
+        return exitCode;
+    }
 
     public static ScmResult execute( File workingDir, String[] cmdAndArgs )
         throws ScmException
@@ -148,7 +185,7 @@
         throws ScmException
     {
 
-        String[] revCmd = new String[]{BazaarCommand.REVNO_CMD};
+        String[] revCmd = new String[] { BazaarCommand.REVNO_CMD };
         BazaarRevNoConsumer consumer = new BazaarRevNoConsumer( logger );
         BazaarUtils.execute( consumer, logger, workingDir, revCmd );
 
@@ -186,49 +223,6 @@
         int getCurrentRevisionNumber()
         {
             return revNo;
-        }
-    }
-
-    public static String getBazaarVersion(File workingDir)
-			throws ScmException {
-
-		String[] versionCmd = new String[] { "version" };
-		BazaarVersionConsumer consumer = new BazaarVersionConsumer();
-		Commandline cmd = buildCmd(workingDir, versionCmd);
-
-		// Execute command
-		executeCmd(consumer, cmd);
-
-		// Return result
-		return consumer.getVersion();
-	}
-
-    /**
-	 * Get version of the bazaar executable <p/> Resolve revision to the last
-	 * integer found in the command output.
-	 */
-    private static class BazaarVersionConsumer
-        extends BazaarConsumer
-    {
-
-    	private static final String VERSION_TAG = "bzr (bazaar-ng) ";
-        private String version = "Unknown";
-
-        BazaarVersionConsumer()
-        {
-            super( new DefaultLog() );
-        }
-
-        public void doConsume( ScmFileStatus status, String line )
-        {
-            if (line.startsWith(VERSION_TAG)) {
-            	version = line.substring(VERSION_TAG.length());
-            }
-        }
-
-        String getVersion()
-        {
-            return version;
         }
     }
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarCommand.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarCommand.java?rev=389253&r1=389252&r2=389253&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/BazaarCommand.java Mon Mar 27 12:19:55 2006
@@ -101,4 +101,8 @@
     public static final String REVISION_OPTION = "--revision";
 
     public static final String VERBOSE_OPTION = "--verbose";
+
+    public static final String VERSION = "version";
+
+    public static final String CHECK = "check";
 }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogCommand.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogCommand.java?rev=389253&r1=389252&r2=389253&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogCommand.java Mon Mar 27 12:19:55 2006
@@ -46,7 +46,7 @@
     {
         String[] cmd = new String[]{LOG_CMD, VERBOSE_OPTION};
         BazaarChangeLogConsumer consumer =
-            new BazaarChangeLogConsumer( getLogger(), datePattern, fileSet.getBasedir() );
+            new BazaarChangeLogConsumer( getLogger(), datePattern );
         ScmResult result = BazaarUtils.execute( consumer, getLogger(), fileSet.getBasedir(), cmd );
 
         List logEntries = consumer.getModifications();
@@ -54,8 +54,6 @@
         startDate = startDate == null ? new Date( 0 ) : startDate; //From 1. Jan 1970
         endDate = endDate == null ? new Date() : endDate; //Upto now
 
-        getLogger().info(startDate.toString());
-        getLogger().info(endDate.toString());
         for ( Iterator it = logEntries.iterator(); it.hasNext(); )
         {
             ChangeSet change = (ChangeSet) it.next();
@@ -68,7 +66,6 @@
             }
         }
 
-        getLogger().info("Got " + inRangeAndValid.size() + " of " + logEntries.size()  + " log entries");
         ChangeLogSet changeLogSet = new ChangeLogSet( inRangeAndValid, startDate, endDate );
         return new ChangeLogScmResult(changeLogSet, result );
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumer.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumer.java?rev=389253&r1=389252&r2=389253&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumer.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumer.java Mon Mar 27 12:19:55 2006
@@ -22,7 +22,6 @@
 import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.provider.bazaar.command.BazaarConsumer;
 
-import java.io.File;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -48,12 +47,16 @@
 
     private static final String BRANCH_NICK_TOKEN = "branch nick: ";
 
-    private final File workingDir;
+    private static final String MERGED_TOKEN = "merged: ";
 
     private List logEntries = new ArrayList();
 
     private ChangeSet currentChange;
 
+    private ChangeSet lastChange;
+
+    private boolean isMergeEntry;
+
     private String currentRevision;
 
     private StringBuffer currentComment;
@@ -61,17 +64,15 @@
     private String userDatePattern;
 
     /**
-     * null means not parsing message nor files, UNKNOWN means parsing message
+     * Null means not parsing message nor files, UNKNOWN means parsing message
      */
     private ScmFileStatus currentStatus = null;
 
-    public BazaarChangeLogConsumer( ScmLogger logger, String userDatePattern, File workingDir )
+    public BazaarChangeLogConsumer( ScmLogger logger, String userDatePattern )
     {
         super( logger );
 
         this.userDatePattern = userDatePattern;
-
-        this.workingDir = workingDir;
     }
 
     public List getModifications()
@@ -86,12 +87,37 @@
         // Parse line
         if ( line.startsWith( START_LOG_TAG ) )
         {
+            //If last entry was part a merged entry
+            if (isMergeEntry && lastChange != null) {
+                String comment = lastChange.getComment();
+                comment += "\n[MAVEN]: Merged from " + currentChange.getAuthor();
+                comment += "\n[MAVEN]:    " + currentChange.getDateFormatted();
+                comment += "\n[MAVEN]:    " + currentChange.getComment();
+                lastChange.setComment(comment);
+            }
+
+            //Init a new changeset
             currentChange = new ChangeSet();
             currentChange.setFiles(new ArrayList());
             logEntries.add( currentChange );
+
+            //Reset memeber vars
             currentComment = new StringBuffer();
             currentStatus = null;
             currentRevision = "";
+            isMergeEntry = false;
+        }
+        else if ( line.startsWith( MERGED_TOKEN ) )
+        {
+            //This is part of lastChange and is not a separate log entry
+            isMergeEntry = true;
+            logEntries.remove(currentChange);
+            if (logEntries.size() > 0) {
+                lastChange = (ChangeSet)logEntries.get(logEntries.size() - 1);
+            } else {
+                getLogger().warn("First entry was unexpectedly a merged entry");
+                lastChange = null;
+            }
         }
         else if ( line.startsWith( REVNO_TAG ) )
         {
@@ -129,12 +155,8 @@
         else if ( currentStatus != null )
         {
             tmpLine = tmpLine.trim();
-            File tmpFile = new File( workingDir, tmpLine );
-            if ( tmpFile.isFile() )
-            {
-                ChangeFile changeFile = new ChangeFile( tmpLine, currentRevision );
-                currentChange.addFile( changeFile );
-            }
+            ChangeFile changeFile = new ChangeFile( tmpLine, currentRevision );
+            currentChange.addFile( changeFile );
         }
         else if ( line.startsWith( BRANCH_NICK_TOKEN ) )
         {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/diff/BazaarDiffConsumer.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/diff/BazaarDiffConsumer.java?rev=389253&r1=389252&r2=389253&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/diff/BazaarDiffConsumer.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/main/java/org/apache/maven/scm/provider/bazaar/command/diff/BazaarDiffConsumer.java Mon Mar 27 12:19:55 2006
@@ -40,7 +40,6 @@
 
     private final static String DELETED_FILE_TOKEN = "=== deleted file ";
 
-    //TODO: What is this?
     private final static String NO_NEWLINE_TOKEN = "\\ No newline at end of file";
 
     private final static String FROM_FILE_TOKEN = "---";
@@ -115,9 +114,36 @@
         }
     }
 
+    /**
+     * This method takes into account two types of diff output. <br>
+     * - Bazaar 0.7 format: dir/dir/myfile  <br>
+     * - Bazaar 0.8 format: a/dir/dir/myfile <br>
+     *
+     * @param status Eg. modified or added
+     * @param line The original bazaar output to process (for logging)
+     * @param tmpLine The bazaar output to process
+     */
     private void addChangedFile( ScmFileStatus status, String line, String tmpLine )
     {
         tmpLine = tmpLine.substring( 1, tmpLine.length() - 1 );
+        boolean ok = addChangedFile( status, tmpLine );
+
+        if (!ok) {
+            int index = tmpLine.indexOf("/");
+            if (index > -1) {
+                tmpLine = tmpLine.substring(index + 1);
+                ok = addChangedFile( status, tmpLine );
+            }
+        }
+
+        if (!ok) {
+            logger.warn( "Could not figure out of line: " + line );
+        }
+    }
+
+    /** @return True if tmpLine was a valid file and thus added to the changeset */
+    private boolean addChangedFile( ScmFileStatus status, String tmpLine )
+    {
         File tmpFile = new File( workingDirectory, tmpLine );
         if ( tmpFile.isFile() )
         {
@@ -125,11 +151,10 @@
             currentDifference = new StringBuffer();
             differences.put( currentFile, currentDifference );
             changedFiles.add( new ScmFile( tmpLine, status ) );
+            return true;
         }
-        else
-        {
-            logger.warn( "Could not figure out of line: " + line );
-        }
+
+        return false;
     }
 
     public List getChangedFiles()

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/BazaarTestUtils.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/BazaarTestUtils.java?rev=389253&r1=389252&r2=389253&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/BazaarTestUtils.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/BazaarTestUtils.java Mon Mar 27 12:19:55 2006
@@ -103,16 +103,19 @@
         ScmResult result = BazaarUtils.execute( WORKING_DIR, add_cmd );
         if ( !result.isSuccess() )
         {
-            String message = "Provider message: " + result.getProviderMessage() + "\n" + "Output: " + result.getCommandOutput();
+            String message = "Provider message: " + result.getProviderMessage()
+            + "\n" + "Output: " + result.getCommandOutput();
             throw new Exception( message );
         }
 
         // Commit the initial repository
-        String[] commit_cmd = new String[]{BazaarCommand.COMMIT_CMD, BazaarCommand.MESSAGE_OPTION, COMMIT_MESSAGE};
+        String[] commit_cmd = new String[]{BazaarCommand.COMMIT_CMD,
+            BazaarCommand.MESSAGE_OPTION, COMMIT_MESSAGE};
         result = BazaarUtils.execute( WORKING_DIR, commit_cmd );
         if ( !result.isSuccess() )
         {
-            String message = "Provider message: " + result.getProviderMessage() + "\n" + "Output: " + result.getCommandOutput();
+            String message = "Provider message: " + result.getProviderMessage()
+            + "\n" + "Output: " + result.getCommandOutput();
             throw new Exception( message );
         }
     }

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumerTest.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumerTest.java?rev=389253&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumerTest.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumerTest.java Mon Mar 27 12:19:55 2006
@@ -0,0 +1,50 @@
+package org.apache.maven.scm.provider.bazaar.command.changelog;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.List;
+
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.log.DefaultLog;
+
+public class BazaarChangeLogConsumerTest
+    extends ScmTestCase
+{
+    public void testChanglogWithMergeEntries() throws IOException
+    {
+        File testFile = getTestFile( "src/test/resources/bazaar/changeLogWithMerge.txt" );
+
+        BazaarChangeLogConsumer consumer = new BazaarChangeLogConsumer( new DefaultLog(), null);
+
+        FileInputStream fis = new FileInputStream( testFile );
+        BufferedReader in = new BufferedReader( new InputStreamReader( fis ) );
+        String s = in.readLine();
+        while ( s != null )
+        {
+            consumer.consumeLine( s );
+            s = in.readLine();
+        }
+
+        List mods = consumer.getModifications();
+        assertEquals(4, mods.size());
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/java/org/apache/maven/scm/provider/bazaar/command/changelog/BazaarChangeLogConsumerTest.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/changelog/BazaarChangeLogConsumerTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/resources/bazaar/changeLogWithMerge.txt
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/resources/bazaar/changeLogWithMerge.txt?rev=389253&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/resources/bazaar/changeLogWithMerge.txt (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/resources/bazaar/changeLogWithMerge.txt Mon Mar 27 12:19:55 2006
@@ -0,0 +1,50 @@
+------------------------------------------------------------
+revno: 4
+committer: tsmoergrav@slb.com
+branch nick: bzr.test2
+timestamp: Fri 2006-03-24 21:51:36 +0100
+message:
+  Hello
+modified:
+  changeLogWithMerge.txt
+    ------------------------------------------------------------
+    merged: tsmoergrav@slb.com-20060324204530-b95bda1a51d98560
+    committer: tsmoergrav@slb.com
+    branch nick: BZR~1.TES
+    timestamp: Fri 2006-03-24 21:45:30 +0100
+    message:
+      Great!
+    ------------------------------------------------------------
+    merged: tsmoergrav@slb.com-20060324204323-8143a4e84f876d8e
+    committer: tsmoergrav@slb.com
+    branch nick: bzr.test
+    timestamp: Fri 2006-03-24 21:43:23 +0100
+    message:
+      Go Girl!
+------------------------------------------------------------
+revno: 3
+committer: tsmoergrav@slb.com
+branch nick: BZR~2.TES
+timestamp: Fri 2006-03-24 21:39:57 +0100
+message:
+  Third
+modified:
+  changeLogWithMerge.txt
+------------------------------------------------------------
+revno: 2
+committer: tsmoergrav@slb.com
+branch nick: BZR~2.TES
+timestamp: Fri 2006-03-24 21:39:31 +0100
+message:
+  Second
+modified:
+  changeLogWithMerge.txt
+------------------------------------------------------------
+revno: 1
+committer: tsmoergrav@slb.com
+branch nick: BZR~1.TES
+timestamp: Fri 2006-03-24 21:37:51 +0100
+message:
+  Init
+added:
+  changeLogWithMerge.txt

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/resources/bazaar/changeLogWithMerge.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-bazaar/src/test/resources/bazaar/changeLogWithMerge.txt
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"