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 2011/02/12 00:39:30 UTC

svn commit: r1069986 - in /maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src: main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/ test/java/org/apache/maven/scm/provider/git/gitexe/command/blame/ te...

Author: struberg
Date: Fri Feb 11 23:39:29 2011
New Revision: 1069986

URL: http://svn.apache.org/viewvc?rev=1069986&view=rev
Log:
[SCM-606] rewrite GitBlameCommand to use git-blame --porcelain

Added:
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-3.out
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-empty.out
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-new-file.out
Modified:
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameConsumer.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameConsumerTest.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame.out

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameCommand.java?rev=1069986&r1=1069985&r2=1069986&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameCommand.java Fri Feb 11 23:39:29 2011
@@ -54,7 +54,7 @@ public class GitBlameCommand
         int exitCode = GitCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
         if ( exitCode != 0 )
         {
-            throw new UnsupportedOperationException();
+            return new BlameScmResult(cl.toString(), "The git blame command failed.", stderr.getOutput(), false);
         }
         return new BlameScmResult( cl.toString(), consumer.getLines() );
     }
@@ -62,8 +62,7 @@ public class GitBlameCommand
     public static Commandline createCommandLine( File workingDirectory, String filename )
     {
         Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "blame" );
-        cl.createArg().setValue( "-c" );
-        cl.createArg().setValue( "-l" );
+        cl.createArg().setValue( "--porcelain" );
         cl.createArg().setValue( filename );
         return cl;
     }

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameConsumer.java?rev=1069986&r1=1069985&r2=1069986&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameConsumer.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameConsumer.java Fri Feb 11 23:39:29 2011
@@ -23,22 +23,32 @@ import org.apache.maven.scm.command.blam
 import org.apache.maven.scm.log.ScmLogger;
 import org.apache.maven.scm.util.AbstractConsumer;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 /**
+ * Parses the --porcelain format of git-blame
+ *
  * @author Evgeny Mandrikov
  * @author Olivier Lamy
+ * @author Mark Struberg
  * @since 1.4
  */
 public class GitBlameConsumer
     extends AbstractConsumer
 {
-    private static final String GIT_TIMESTAMP_PATTERN = "yyyy-MM-dd HH:mm:ss Z";
+    private final static String GIT_COMMITTER_PREFIX = "committer";
+    private final static String GIT_COMMITTER      = GIT_COMMITTER_PREFIX + " ";
+    private final static String GIT_COMMITTER_TIME = GIT_COMMITTER_PREFIX + "-time ";
+
 
     private List<BlameLine> lines = new ArrayList<BlameLine>();
 
+    private String revision = null;
+    private String author   = null;
+    private Date   time     = null;
+
+    private boolean expectRevisionLine = true;
+
     public GitBlameConsumer( ScmLogger logger )
     {
         super( logger );
@@ -46,17 +56,53 @@ public class GitBlameConsumer
 
     public void consumeLine( String line )
     {
-        String parts[] = line.split( "\t", 4 );
-        String revision = parts[0];
-        String author = parts[1].substring( 1 );
-        String dateTimeStr = parts[2];
+        if ( line == null )
+        {
+            return;
+        }
 
-        Date dateTime = parseDate( dateTimeStr, null, GIT_TIMESTAMP_PATTERN );
-        getLines().add( new BlameLine( dateTime, revision, author ) );
+        if (expectRevisionLine)
+        {
+            // this is the revision line
+            String parts[] = line.split( "\\s", 4 );
+
+            if ( parts.length >= 1)
+            {
+                revision = parts[0];
+            }
 
-        if ( getLogger().isDebugEnabled() )
+            expectRevisionLine = false;
+        }
+        else
         {
-            getLogger().debug( author + " " + dateTimeStr );
+            if ( line.startsWith( GIT_COMMITTER ) )
+            {
+                author = line.substring( GIT_COMMITTER.length() );
+                return;
+            }
+
+            if ( line.startsWith( GIT_COMMITTER_TIME ) )
+            {
+                String timeStr = line.substring( GIT_COMMITTER_TIME.length() );
+                time = new Date( Long.parseLong( timeStr ) * 1000L );
+                return;
+            }
+
+
+            if ( line.startsWith( "\t" ) )
+            {
+                // this is the content line.
+                // we actually don't need the content, but this is the right time to add the blame line
+                getLines().add( new BlameLine( time, revision, author ) );
+
+                if ( getLogger().isDebugEnabled() )
+                {
+                    getLogger().debug( author + " " + time.toGMTString() );
+                }
+
+                expectRevisionLine = true;
+            }
+
         }
     }
 

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameConsumerTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameConsumerTest.java?rev=1069986&r1=1069985&r2=1069986&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameConsumerTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/blame/GitBlameConsumerTest.java Fri Feb 11 23:39:29 2011
@@ -8,16 +8,85 @@ import org.codehaus.plexus.PlexusTestCas
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
+import java.io.IOException;
 
+/**
+ * Test the {@link GitBlameConsumer} in various different situations.
+ * Depending on the underlying operating system we might get
+ * slightly different output from a <pre>git blame</pre> commandline invocation.
+ */
 public class GitBlameConsumerTest
     extends PlexusTestCase
 {
+    public void testConsumerEasy()
+        throws Exception
+    {
+        GitBlameConsumer consumer = consumeFile( "/src/test/resources/git/blame/git-blame-3.out" );
+
+        Assert.assertEquals( 36, consumer.getLines().size() );
+
+        BlameLine blameLine = (BlameLine) consumer.getLines().get( 11 );
+        Assert.assertEquals( "e670863b2b03e158c59f34af1fee20f91b2bd852", blameLine.getRevision() );
+        Assert.assertEquals( "Mark Struberg", blameLine.getAuthor() );
+        Assert.assertNotNull( blameLine.getDate() );
+    }
+
+
     public void testConsumer()
         throws Exception
     {
+        GitBlameConsumer consumer = consumeFile( "/src/test/resources/git/blame/git-blame.out" );
+
+        Assert.assertEquals( 187, consumer.getLines().size() );
+
+        BlameLine blameLine = (BlameLine) consumer.getLines().get( 11 );
+        Assert.assertEquals( "e670863b2b03e158c59f34af1fee20f91b2bd852", blameLine.getRevision() );
+        Assert.assertEquals( "Mark Struberg", blameLine.getAuthor() );
+        Assert.assertNotNull( blameLine.getDate() );
+    }
+
+    /**
+     * Test what happens if a git-blame command got invoked on a
+     * file which has no content.
+     */
+    public void testConsumerEmptyFile()
+        throws Exception
+    {
+        GitBlameConsumer consumer = consumeFile( "/src/test/resources/git/blame/git-blame-empty.out" );
+
+        Assert.assertEquals( 0, consumer.getLines().size() );
+    }
+
+
+    /**
+     * Test what happens if a git-blame command got invoked on a
+     * file which didn't got added to the git repo yet.
+     */
+    public void testConsumerOnNewFile()
+        throws Exception
+    {
+        GitBlameConsumer consumer = consumeFile( "/src/test/resources/git/blame/git-blame-new-file.out" );
+
+        Assert.assertEquals( 3, consumer.getLines().size() );
+        BlameLine blameLine = (BlameLine) consumer.getLines().get( 0 );
+        Assert.assertNotNull(blameLine);
+        Assert.assertEquals( "0000000000000000000000000000000000000000", blameLine.getRevision() );
+        Assert.assertEquals("Not Committed Yet", blameLine.getAuthor());
+
+    }
+
+    /**
+     * Consume all lines in the given file with a fresh {@link GitBlameConsumer}.
+     *
+     * @param fileName
+     * @return the resulting {@link GitBlameConsumer}
+     * @throws IOException
+     */
+    private GitBlameConsumer consumeFile( String fileName ) throws IOException
+    {
         GitBlameConsumer consumer = new GitBlameConsumer( new DefaultLog() );
 
-        File f = getTestFile( "/src/test/resources/git/blame/git-blame.out" );
+        File f = getTestFile( fileName );
 
         BufferedReader r = new BufferedReader( new FileReader( f ) );
 
@@ -27,16 +96,6 @@ public class GitBlameConsumerTest
         {
             consumer.consumeLine( line );
         }
-
-        Assert.assertEquals( 73, consumer.getLines().size() );
-
-        BlameLine blameLine1 = (BlameLine) consumer.getLines().get( 11 );
-        Assert.assertEquals( "96cfe5d4", blameLine1.getRevision() );
-        Assert.assertEquals( "Tiago Bello Torres", blameLine1.getAuthor() );
-
-        BlameLine blameLine2 = (BlameLine) consumer.getLines().get( 35 );
-        Assert.assertEquals( "8748a722", blameLine2.getRevision() );
-        Assert.assertEquals( "Tiago Bello Torres", blameLine2.getAuthor() );
-
+        return consumer;
     }
 }

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-3.out
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-3.out?rev=1069986&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-3.out (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-3.out Fri Feb 11 23:39:29 2011
@@ -0,0 +1,83 @@
+e670863b2b03e158c59f34af1fee20f91b2bd852 1 1 36
+author Mark Struberg
+author-mail <st...@yahoo.de>
+author-time 1195766163
+author-tz +0100
+committer Mark Struberg
+committer-mail <st...@yahoo.de>
+committer-time 1195766163
+committer-tz +0100
+summary initial version
+boundary
+filename pom.xml
+	<?xml version="1.0" encoding="UTF-8"?><!--
+e670863b2b03e158c59f34af1fee20f91b2bd852 2 2
+	  ~ Licensed to the Apache Software Foundation (ASF) under one
+e670863b2b03e158c59f34af1fee20f91b2bd852 3 3
+	  ~ or more contributor license agreements.  See the NOTICE file
+e670863b2b03e158c59f34af1fee20f91b2bd852 4 4
+	  ~ distributed with this work for additional information
+e670863b2b03e158c59f34af1fee20f91b2bd852 5 5
+	  ~ regarding copyright ownership.  The ASF licenses this file
+e670863b2b03e158c59f34af1fee20f91b2bd852 6 6
+	  ~ to you under the Apache License, Version 2.0 (the
+e670863b2b03e158c59f34af1fee20f91b2bd852 7 7
+	  ~ "License"); you may not use this file except in compliance
+e670863b2b03e158c59f34af1fee20f91b2bd852 8 8
+	  ~ with the License.  You may obtain a copy of the License at
+e670863b2b03e158c59f34af1fee20f91b2bd852 9 9
+	  ~
+e670863b2b03e158c59f34af1fee20f91b2bd852 10 10
+	  ~ http://www.apache.org/licenses/LICENSE-2.0
+e670863b2b03e158c59f34af1fee20f91b2bd852 11 11
+	  ~
+e670863b2b03e158c59f34af1fee20f91b2bd852 12 12
+	  ~ Unless required by applicable law or agreed to in writing,
+e670863b2b03e158c59f34af1fee20f91b2bd852 13 13
+	  ~ software distributed under the License is distributed on an
+e670863b2b03e158c59f34af1fee20f91b2bd852 14 14
+	  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+e670863b2b03e158c59f34af1fee20f91b2bd852 15 15
+	  ~ KIND, either express or implied.  See the License for the
+e670863b2b03e158c59f34af1fee20f91b2bd852 16 16
+	  ~ specific language governing permissions and limitations
+e670863b2b03e158c59f34af1fee20f91b2bd852 17 17
+	  ~ under the License.
+e670863b2b03e158c59f34af1fee20f91b2bd852 18 18
+	  -->
+e670863b2b03e158c59f34af1fee20f91b2bd852 19 19
+	
+e670863b2b03e158c59f34af1fee20f91b2bd852 20 20
+	<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+e670863b2b03e158c59f34af1fee20f91b2bd852 21 21
+	  <parent>
+e670863b2b03e158c59f34af1fee20f91b2bd852 22 22
+	    <artifactId>maven-scm-providers</artifactId>
+e670863b2b03e158c59f34af1fee20f91b2bd852 23 23
+	    <groupId>org.apache.maven.scm</groupId>
+e670863b2b03e158c59f34af1fee20f91b2bd852 24 24
+	    <version>1.0</version>
+e670863b2b03e158c59f34af1fee20f91b2bd852 25 25
+	  </parent>
+e670863b2b03e158c59f34af1fee20f91b2bd852 26 26
+	  <modelVersion>4.0.0</modelVersion>
+e670863b2b03e158c59f34af1fee20f91b2bd852 27 27
+	  <artifactId>maven-scm-providers-git</artifactId>
+e670863b2b03e158c59f34af1fee20f91b2bd852 28 28
+	  <packaging>pom</packaging>
+e670863b2b03e158c59f34af1fee20f91b2bd852 29 29
+	  <name>Maven SCM git Provider - Parent</name>
+e670863b2b03e158c59f34af1fee20f91b2bd852 30 30
+	  <version>1.1-SNAPSHOT</version>
+e670863b2b03e158c59f34af1fee20f91b2bd852 31 31
+	  <modules>
+e670863b2b03e158c59f34af1fee20f91b2bd852 32 32
+	    <module>maven-scm-provider-git-commons</module>
+e670863b2b03e158c59f34af1fee20f91b2bd852 33 33
+	    <module>maven-scm-provider-gitexe</module>
+e670863b2b03e158c59f34af1fee20f91b2bd852 34 34
+	    <module>maven-scm-provider-gittest</module>
+e670863b2b03e158c59f34af1fee20f91b2bd852 35 35
+	  </modules>
+e670863b2b03e158c59f34af1fee20f91b2bd852 36 36
+	</project>

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-empty.out
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-empty.out?rev=1069986&view=auto
==============================================================================
    (empty)

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-new-file.out
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-new-file.out?rev=1069986&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-new-file.out (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame-new-file.out Fri Feb 11 23:39:29 2011
@@ -0,0 +1,16 @@
+0000000000000000000000000000000000000000 1 1 3
+author Not Committed Yet
+author-mail <not.committed.yet>
+author-time 1297466272
+author-tz +0100
+committer Not Committed Yet
+committer-mail <not.committed.yet>
+committer-time 1297466272
+committer-tz +0100
+summary Version of newfile from newfile
+filename newfile
+	new file
+0000000000000000000000000000000000000000 2 2
+	which is not yet checked in
+0000000000000000000000000000000000000000 3 3
+	containing 3 lines of text

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame.out
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame.out?rev=1069986&r1=1069985&r2=1069986&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame.out (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/blame/git-blame.out Fri Feb 11 23:39:29 2011
@@ -1,73 +1,451 @@
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	1)/*                                      
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	2) * Copyright (c) 1999-2009 Touch Tecnologia e Informatica Ltda.
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	3) * Gomes de Carvalho, 1666, 3o. Andar, Vila Olimpia, Sao Paulo, SP, Brasil.
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	4) * Todos os direitos reservados.
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	5) *                              
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	6) * Este software e confidencial e de propriedade da Touch Tecnologia e 
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	7) * Informatica Ltda. (Informacao Confidencial). As informacoes contidas neste
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	8) * arquivo nao podem ser publicadas, e seu uso esta limitado de acordo com os 
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	9) * termos do contrato de licenca.
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	10) */
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	11)
-96cfe5d4	(Tiago Bello Torres	2010-06-24 14:21:29 -0300	12)package br.com.touchtec.veris.service;
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	13)
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	14)import br.com.touchtec.exception.TouchException;
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	15)import br.com.touchtec.message.Message;
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	16)
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	17)/**
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	18) * 
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	19) * 
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	20) * @author jorge
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	21) * @since
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	22) * 
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	23) */
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	24)public class VerisUserAuthenticationException extends TouchException {
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	25)
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	26)	/**
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	27)	 * 
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	28)	 */
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	29)	private static final long serialVersionUID = 1L;
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	30)
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	31)	/**
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	32)	 * @param message
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	33)	 * @since
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	34)	 */
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	35)	public VerisUserAuthenticationException(String message) {
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	36)		super(message);
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	37)	}
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	38)
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	39)	/**
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	40)	 * @param cause
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	41)	 * @since
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	42)	 */
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	43)	public VerisUserAuthenticationException(Throwable cause) {
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	44)		super(cause);
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	45)	}
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	46)
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	47)	/**
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	48)	 * @param msg
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	49)	 * @since
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	50)	 */
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	51)	public VerisUserAuthenticationException(Message msg) {
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	52)		super(msg);
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	53)	}
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	54)
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	55)	/**
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	56)	 * @param message
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	57)	 * @param cause
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	58)	 * @since
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	59)	 */
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	60)	public VerisUserAuthenticationException(String message, Throwable cause) {
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	61)		super(message, cause);
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	62)	}
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	63)
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	64)	/**
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	65)	 * @param msg
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	66)	 * @param cause
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	67)	 * @since
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	68)	 */
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	69)	public VerisUserAuthenticationException(Message msg, Throwable cause) {
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	70)		super(msg, cause);
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	71)	}
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	72)
-8748a722	(Tiago Bello Torres	2010-06-03 17:59:00 -0300	73)}
+e670863b2b03e158c59f34af1fee20f91b2bd852 1 1 21
+author Mark Struberg
+author-mail <st...@yahoo.de>
+author-time 1195766163
+author-tz +0100
+committer Mark Struberg
+committer-mail <st...@yahoo.de>
+committer-time 1195766163
+committer-tz +0100
+summary initial version
+boundary
+filename maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+	package org.apache.maven.scm.provider.git.gitexe.command.checkout;
+e670863b2b03e158c59f34af1fee20f91b2bd852 2 2
+	
+e670863b2b03e158c59f34af1fee20f91b2bd852 3 3
+	/*
+e670863b2b03e158c59f34af1fee20f91b2bd852 4 4
+	 * Licensed to the Apache Software Foundation (ASF) under one
+e670863b2b03e158c59f34af1fee20f91b2bd852 5 5
+	 * or more contributor license agreements.  See the NOTICE file
+e670863b2b03e158c59f34af1fee20f91b2bd852 6 6
+	 * distributed with this work for additional information
+e670863b2b03e158c59f34af1fee20f91b2bd852 7 7
+	 * regarding copyright ownership.  The ASF licenses this file
+e670863b2b03e158c59f34af1fee20f91b2bd852 8 8
+	 * to you under the Apache License, Version 2.0 (the
+e670863b2b03e158c59f34af1fee20f91b2bd852 9 9
+	 * "License"); you may not use this file except in compliance
+e670863b2b03e158c59f34af1fee20f91b2bd852 10 10
+	 * with the License.  You may obtain a copy of the License at
+e670863b2b03e158c59f34af1fee20f91b2bd852 11 11
+	 *
+e670863b2b03e158c59f34af1fee20f91b2bd852 12 12
+	 * http://www.apache.org/licenses/LICENSE-2.0
+e670863b2b03e158c59f34af1fee20f91b2bd852 13 13
+	 *
+e670863b2b03e158c59f34af1fee20f91b2bd852 14 14
+	 * Unless required by applicable law or agreed to in writing,
+e670863b2b03e158c59f34af1fee20f91b2bd852 15 15
+	 * software distributed under the License is distributed on an
+e670863b2b03e158c59f34af1fee20f91b2bd852 16 16
+	 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+e670863b2b03e158c59f34af1fee20f91b2bd852 17 17
+	 * KIND, either express or implied.  See the License for the
+e670863b2b03e158c59f34af1fee20f91b2bd852 18 18
+	 * specific language governing permissions and limitations
+e670863b2b03e158c59f34af1fee20f91b2bd852 19 19
+	 * under the License.
+e670863b2b03e158c59f34af1fee20f91b2bd852 20 20
+	 */
+e670863b2b03e158c59f34af1fee20f91b2bd852 21 21
+	
+e670863b2b03e158c59f34af1fee20f91b2bd852 23 22 2
+	import org.apache.maven.scm.ScmException;
+e670863b2b03e158c59f34af1fee20f91b2bd852 24 23
+	import org.apache.maven.scm.ScmFileSet;
+ee00bb6815bf9d5844073309534c652c591ae313 24 24 1
+author Mark Struberg
+author-mail <st...@yahoo.de>
+author-time 1196968572
+author-tz +0100
+committer Mark Struberg
+committer-mail <st...@yahoo.de>
+committer-time 1196968572
+committer-tz +0100
+summary git-branch added and improved branch/tag handling
+previous a4984b7e83eecf5774bde8b2625d44ec72679793 maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+filename maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+	import org.apache.maven.scm.ScmFileStatus;
+ed6a2c5cab54dda610c09c31c242dc7579260422 25 25 1
+author Mark Struberg
+author-mail <st...@yahoo.de>
+author-time 1196973164
+author-tz +0100
+committer Mark Struberg
+committer-mail <st...@yahoo.de>
+committer-time 1196973164
+committer-tz +0100
+summary fixed broken tag command
+previous ee00bb6815bf9d5844073309534c652c591ae313 maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+filename maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+	import org.apache.maven.scm.ScmTag;
+e670863b2b03e158c59f34af1fee20f91b2bd852 27 26 4
+	import org.apache.maven.scm.ScmVersion;
+e670863b2b03e158c59f34af1fee20f91b2bd852 28 27
+	import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
+e670863b2b03e158c59f34af1fee20f91b2bd852 29 28
+	import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+e670863b2b03e158c59f34af1fee20f91b2bd852 30 29
+	import org.apache.maven.scm.provider.ScmProviderRepository;
+e670863b2b03e158c59f34af1fee20f91b2bd852 32 30 3
+	import org.apache.maven.scm.provider.git.command.GitCommand;
+e670863b2b03e158c59f34af1fee20f91b2bd852 33 31
+	import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+e670863b2b03e158c59f34af1fee20f91b2bd852 34 32
+	import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 32 33 2
+author Mark Struberg
+author-mail <st...@yahoo.de>
+author-time 1196410907
+author-tz +0100
+committer Mark Struberg
+committer-mail <st...@yahoo.de>
+committer-time 1196410907
+committer-tz +0100
+summary first draft of tag command for git
+previous 51a69707a2d55f311d010fbede9db4d0de61ac15 maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+filename maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+	import org.apache.maven.scm.provider.git.gitexe.command.list.GitListCommand;
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 33 34
+	import org.apache.maven.scm.provider.git.gitexe.command.list.GitListConsumer;
+e670863b2b03e158c59f34af1fee20f91b2bd852 35 35 1
+	import org.codehaus.plexus.util.StringUtils;
+e670863b2b03e158c59f34af1fee20f91b2bd852 37 36 6
+	import org.codehaus.plexus.util.cli.CommandLineUtils;
+e670863b2b03e158c59f34af1fee20f91b2bd852 38 37
+	import org.codehaus.plexus.util.cli.Commandline;
+e670863b2b03e158c59f34af1fee20f91b2bd852 39 38
+	
+e670863b2b03e158c59f34af1fee20f91b2bd852 40 39
+	import java.io.File;
+e670863b2b03e158c59f34af1fee20f91b2bd852 41 40
+	
+e670863b2b03e158c59f34af1fee20f91b2bd852 42 41
+	/**
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 41 42 1
+	 * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+e670863b2b03e158c59f34af1fee20f91b2bd852 45 43 1
+	 */
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 43 44 1
+	public class GitCheckOutCommand extends AbstractCheckOutCommand implements GitCommand
+e670863b2b03e158c59f34af1fee20f91b2bd852 49 45 1
+	{
+7c14cf0301dbb6d1379c1801a703b2641c22f348 47 46 5
+author Mark Struberg
+author-mail <st...@yahoo.de>
+author-time 1195869083
+author-tz +0100
+committer Mark Struberg
+committer-mail <st...@yahoo.de>
+committer-time 1195869083
+committer-tz +0100
+summary tck continued until still missing 'checkin'
+previous e670863b2b03e158c59f34af1fee20f91b2bd852 maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+filename maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+	    /**
+7c14cf0301dbb6d1379c1801a703b2641c22f348 48 47
+	     * For git, the given repository is a remote one.
+7c14cf0301dbb6d1379c1801a703b2641c22f348 49 48
+	     * We have to clone it first if the working directory does not contain a git repo yet,
+7c14cf0301dbb6d1379c1801a703b2641c22f348 50 49
+	     * otherwise we have to git-pull it.
+7c14cf0301dbb6d1379c1801a703b2641c22f348 51 50
+	     * 
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 50 51 1
+	     * TODO We currently assume a '.git' directory, so this does not work for --bare repos
+7c14cf0301dbb6d1379c1801a703b2641c22f348 53 52 1
+	     */
+e670863b2b03e158c59f34af1fee20f91b2bd852 50 53 6
+	    protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+e670863b2b03e158c59f34af1fee20f91b2bd852 51 54
+	                                                        ScmVersion version )
+e670863b2b03e158c59f34af1fee20f91b2bd852 52 55
+	        throws ScmException
+e670863b2b03e158c59f34af1fee20f91b2bd852 53 56
+	    {
+e670863b2b03e158c59f34af1fee20f91b2bd852 54 57
+	        GitScmProviderRepository repository = (GitScmProviderRepository) repo;
+e670863b2b03e158c59f34af1fee20f91b2bd852 55 58
+	
+7c14cf0301dbb6d1379c1801a703b2641c22f348 60 59 5
+	        if ( GitScmProviderRepository.PROTOCOL_FILE.equals( repository.getProtocol() ) &&
+7c14cf0301dbb6d1379c1801a703b2641c22f348 61 60
+	             repository.getUrl().indexOf( fileSet.getBasedir().getPath() ) >= 0 ) 
+7c14cf0301dbb6d1379c1801a703b2641c22f348 62 61
+	        {
+7c14cf0301dbb6d1379c1801a703b2641c22f348 63 62
+	            throw new ScmException( "remote repository must not be the working directory" );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 64 63
+	        }
+e670863b2b03e158c59f34af1fee20f91b2bd852 57 64 1
+	
+7c14cf0301dbb6d1379c1801a703b2641c22f348 66 65 3
+	        int exitCode;
+7c14cf0301dbb6d1379c1801a703b2641c22f348 67 66
+	
+7c14cf0301dbb6d1379c1801a703b2641c22f348 68 67
+	        CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
+e670863b2b03e158c59f34af1fee20f91b2bd852 60 68 1
+	        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+7c14cf0301dbb6d1379c1801a703b2641c22f348 71 69 1
+	        
+ee00bb6815bf9d5844073309534c652c591ae313 71 70 3
+	
+ee00bb6815bf9d5844073309534c652c591ae313 72 71
+	        if ( !fileSet.getBasedir().exists() || 
+ee00bb6815bf9d5844073309534c652c591ae313 73 72
+	             !( new File( fileSet.getBasedir(), ".git" ).exists() ) )
+7c14cf0301dbb6d1379c1801a703b2641c22f348 89 73 8
+	        {
+7c14cf0301dbb6d1379c1801a703b2641c22f348 90 74
+	            if ( fileSet.getBasedir().exists() ) 
+7c14cf0301dbb6d1379c1801a703b2641c22f348 91 75
+	            {
+7c14cf0301dbb6d1379c1801a703b2641c22f348 92 76
+	                // git refuses to clone otherwise
+7c14cf0301dbb6d1379c1801a703b2641c22f348 93 77
+	                fileSet.getBasedir().delete();
+7c14cf0301dbb6d1379c1801a703b2641c22f348 94 78
+	            }
+7c14cf0301dbb6d1379c1801a703b2641c22f348 95 79
+	            
+7c14cf0301dbb6d1379c1801a703b2641c22f348 96 80
+	            // no git repo seems to exist, let's clone the original repo
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 92 81 1
+	            Commandline clClone = createCloneCommand( repository, fileSet.getBasedir() );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 98 82 1
+	            
+52733aa427041cafd760833cb068ffe897fd35db 96 83 2
+author Mark Struberg
+author-mail <st...@yahoo.de>
+author-time 1196168736
+author-tz +0100
+committer Mark Struberg
+committer-mail <st...@yahoo.de>
+committer-time 1196168736
+committer-tz +0100
+summary fixed a GitCommandLineUtil and provice first version of the checkin command.
+previous cef708a0aa71cc72f12eb6755513294f720ad858 maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+filename maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+	            exitCode = GitCommandLineUtils.execute( clClone, stdout, stderr, getLogger() );
+52733aa427041cafd760833cb068ffe897fd35db 97 84
+	            if ( exitCode != 0 )
+7c14cf0301dbb6d1379c1801a703b2641c22f348 104 85 1
+	            {
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 97 86 1
+	                return new CheckOutScmResult( clClone.toString(), "The git-clone command failed.", stderr.getOutput(), false );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 106 87 2
+	            }
+7c14cf0301dbb6d1379c1801a703b2641c22f348 107 88
+	        }
+ee00bb6815bf9d5844073309534c652c591ae313 90 89 13
+	
+ee00bb6815bf9d5844073309534c652c591ae313 91 90
+	        if ( fileSet.getBasedir().exists() && 
+ee00bb6815bf9d5844073309534c652c591ae313 92 91
+	             new File( fileSet.getBasedir(), ".git" ).exists() ) 
+ee00bb6815bf9d5844073309534c652c591ae313 93 92
+	        {
+ee00bb6815bf9d5844073309534c652c591ae313 94 93
+	            // git repo exists, so we must git-pull the changes
+ee00bb6815bf9d5844073309534c652c591ae313 95 94
+	            Commandline clPull = createPullCommand( repository, fileSet.getBasedir(), version );
+ee00bb6815bf9d5844073309534c652c591ae313 96 95
+	            
+ee00bb6815bf9d5844073309534c652c591ae313 97 96
+	            exitCode = GitCommandLineUtils.execute( clPull, stdout, stderr, getLogger() );
+ee00bb6815bf9d5844073309534c652c591ae313 98 97
+	            if ( exitCode != 0 )
+ee00bb6815bf9d5844073309534c652c591ae313 99 98
+	            {
+ee00bb6815bf9d5844073309534c652c591ae313 100 99
+	                return new CheckOutScmResult( clPull.toString(), "The git-pull command failed.", stderr.getOutput(), false );
+ee00bb6815bf9d5844073309534c652c591ae313 101 100
+	            }
+ee00bb6815bf9d5844073309534c652c591ae313 102 101
+	        }
+7c14cf0301dbb6d1379c1801a703b2641c22f348 108 102 3
+	        
+7c14cf0301dbb6d1379c1801a703b2641c22f348 109 103
+	        // and now lets do the git-checkout itself
+7c14cf0301dbb6d1379c1801a703b2641c22f348 110 104
+	        Commandline cl = createCommandLine( repository, fileSet.getBasedir(), version );
+e670863b2b03e158c59f34af1fee20f91b2bd852 61 105 1
+	
+52733aa427041cafd760833cb068ffe897fd35db 108 106 1
+	        exitCode = GitCommandLineUtils.execute( cl, stdout, stderr, getLogger() );
+e670863b2b03e158c59f34af1fee20f91b2bd852 76 107 2
+	        if ( exitCode != 0 )
+e670863b2b03e158c59f34af1fee20f91b2bd852 77 108
+	        {
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 107 109 1
+	            return new CheckOutScmResult( cl.toString(), "The git-checkout command failed.", stderr.getOutput(), false );
+e670863b2b03e158c59f34af1fee20f91b2bd852 79 110 2
+	        }
+e670863b2b03e158c59f34af1fee20f91b2bd852 80 111
+	
+7c14cf0301dbb6d1379c1801a703b2641c22f348 131 112 1
+	        // and now search for the files
+ee00bb6815bf9d5844073309534c652c591ae313 114 113 3
+	        GitListConsumer listConsumer = new GitListConsumer( getLogger()
+ee00bb6815bf9d5844073309534c652c591ae313 115 114
+	        		                                          , fileSet.getBasedir()
+ee00bb6815bf9d5844073309534c652c591ae313 116 115
+	        		                                          , ScmFileStatus.CHECKED_IN);
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 112 116 2
+	
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 113 117
+	        Commandline clList = GitListCommand.createCommandLine( repository, fileSet.getBasedir() );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 133 118 1
+	        
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 115 119 1
+	        exitCode = GitCommandLineUtils.execute( clList, listConsumer, stderr, getLogger() );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 143 120 2
+	        if ( exitCode != 0 )
+7c14cf0301dbb6d1379c1801a703b2641c22f348 144 121
+	        {
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 118 122 1
+	            return new CheckOutScmResult( clList.toString(), "The git-ls-files command failed.", stderr.getOutput(), false );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 146 123 2
+	        }
+7c14cf0301dbb6d1379c1801a703b2641c22f348 147 124
+	
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 121 125 1
+	        return new CheckOutScmResult( cl.toString(), listConsumer.getListedFiles() );
+e670863b2b03e158c59f34af1fee20f91b2bd852 82 126 11
+	    }
+e670863b2b03e158c59f34af1fee20f91b2bd852 83 127
+	
+e670863b2b03e158c59f34af1fee20f91b2bd852 84 128
+	    // ----------------------------------------------------------------------
+e670863b2b03e158c59f34af1fee20f91b2bd852 85 129
+	    //
+e670863b2b03e158c59f34af1fee20f91b2bd852 86 130
+	    // ----------------------------------------------------------------------
+e670863b2b03e158c59f34af1fee20f91b2bd852 87 131
+	
+e670863b2b03e158c59f34af1fee20f91b2bd852 88 132
+	    public static Commandline createCommandLine( GitScmProviderRepository repository, File workingDirectory,
+e670863b2b03e158c59f34af1fee20f91b2bd852 89 133
+	                                                 ScmVersion version )
+e670863b2b03e158c59f34af1fee20f91b2bd852 90 134
+	    {
+e670863b2b03e158c59f34af1fee20f91b2bd852 91 135
+	        Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "checkout" );
+e670863b2b03e158c59f34af1fee20f91b2bd852 92 136
+	
+7c14cf0301dbb6d1379c1801a703b2641c22f348 160 137 1
+	        
+e670863b2b03e158c59f34af1fee20f91b2bd852 93 138 2
+	        if ( version != null && StringUtils.isNotEmpty( version.getName() ) )
+e670863b2b03e158c59f34af1fee20f91b2bd852 94 139
+	        {
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 136 140 1
+	            cl.createArgument().setValue( version.getName() );
+e670863b2b03e158c59f34af1fee20f91b2bd852 99 141 4
+	        }
+e670863b2b03e158c59f34af1fee20f91b2bd852 100 142
+	
+e670863b2b03e158c59f34af1fee20f91b2bd852 101 143
+	        return cl;
+e670863b2b03e158c59f34af1fee20f91b2bd852 102 144
+	    }
+7c14cf0301dbb6d1379c1801a703b2641c22f348 171 145 4
+	    
+7c14cf0301dbb6d1379c1801a703b2641c22f348 172 146
+	    /**
+7c14cf0301dbb6d1379c1801a703b2641c22f348 173 147
+	     * create a git-clone repository command 
+7c14cf0301dbb6d1379c1801a703b2641c22f348 174 148
+	     */
+57fd77f4b848e4a2cafd0b1c3cb0ca535b3e9f4a 145 149 1
+	    private Commandline createCloneCommand( GitScmProviderRepository repository, File workingDirectory )
+7c14cf0301dbb6d1379c1801a703b2641c22f348 177 150 5
+	    {
+7c14cf0301dbb6d1379c1801a703b2641c22f348 178 151
+	        Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory.getParentFile(), "clone" );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 179 152
+	        
+7c14cf0301dbb6d1379c1801a703b2641c22f348 180 153
+	        cl.createArgument().setValue( repository.getUrl() );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 181 154
+	        
+7c14cf0301dbb6d1379c1801a703b2641c22f348 190 155 17
+	        cl.createArgument().setFile( workingDirectory );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 191 156
+	        
+7c14cf0301dbb6d1379c1801a703b2641c22f348 192 157
+	        return cl;
+7c14cf0301dbb6d1379c1801a703b2641c22f348 193 158
+	    }
+7c14cf0301dbb6d1379c1801a703b2641c22f348 194 159
+	    
+7c14cf0301dbb6d1379c1801a703b2641c22f348 195 160
+	    /**
+7c14cf0301dbb6d1379c1801a703b2641c22f348 196 161
+	     * create a git-pull repository command 
+7c14cf0301dbb6d1379c1801a703b2641c22f348 197 162
+	     */
+7c14cf0301dbb6d1379c1801a703b2641c22f348 198 163
+	    private Commandline createPullCommand( GitScmProviderRepository repository, File workingDirectory,
+7c14cf0301dbb6d1379c1801a703b2641c22f348 199 164
+	                                           ScmVersion version )
+7c14cf0301dbb6d1379c1801a703b2641c22f348 200 165
+	    {
+7c14cf0301dbb6d1379c1801a703b2641c22f348 201 166
+	        Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "pull" );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 202 167
+	        
+7c14cf0301dbb6d1379c1801a703b2641c22f348 203 168
+	        cl.createArgument().setValue( repository.getUrl() );
+7c14cf0301dbb6d1379c1801a703b2641c22f348 204 169
+	        
+7c14cf0301dbb6d1379c1801a703b2641c22f348 205 170
+	        if ( version != null && StringUtils.isNotEmpty( version.getName() ) )
+7c14cf0301dbb6d1379c1801a703b2641c22f348 206 171
+	        {
+ed6a2c5cab54dda610c09c31c242dc7579260422 172 172 9
+	            if ( version instanceof ScmTag )
+ed6a2c5cab54dda610c09c31c242dc7579260422 173 173
+	            {
+ed6a2c5cab54dda610c09c31c242dc7579260422 174 174
+	            	cl.createArgument().setValue( "tag" );
+ed6a2c5cab54dda610c09c31c242dc7579260422 175 175
+	            	cl.createArgument().setValue( version.getName() );
+ed6a2c5cab54dda610c09c31c242dc7579260422 176 176
+	            }
+ed6a2c5cab54dda610c09c31c242dc7579260422 177 177
+	            else
+ed6a2c5cab54dda610c09c31c242dc7579260422 178 178
+	            {
+ed6a2c5cab54dda610c09c31c242dc7579260422 179 179
+	            	cl.createArgument().setValue( version.getName() + ":" + version.getName() );
+ed6a2c5cab54dda610c09c31c242dc7579260422 180 180
+	            }
+7c14cf0301dbb6d1379c1801a703b2641c22f348 211 181 1
+	        }
+96aa36b0dc9ce85fd8981bde54edaa3bbe2b4482 182 182 3
+author Mark Struberg
+author-mail <st...@yahoo.de>
+author-time 1202341147
+author-tz +0100
+committer Mark Struberg
+committer-mail <st...@yahoo.de>
+committer-time 1202341147
+committer-tz +0100
+summary fixed problems with git-1.5.4
+previous 976b745bf1faecd939187a254c49edee2a81569a maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+filename maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitCheckOutCommand.java
+	        else {
+96aa36b0dc9ce85fd8981bde54edaa3bbe2b4482 183 183
+	        	cl.createArgument().setValue( "master" );
+96aa36b0dc9ce85fd8981bde54edaa3bbe2b4482 184 184
+	        }
+7c14cf0301dbb6d1379c1801a703b2641c22f348 212 185 2
+	        return cl;
+7c14cf0301dbb6d1379c1801a703b2641c22f348 213 186
+	    }    
+e670863b2b03e158c59f34af1fee20f91b2bd852 103 187 1
+	}