Author: olamy Date: Sun Aug 10 04:35:16 2008 New Revision: 684464 URL: http://svn.apache.org/viewvc?rev=684464&view=rev Log: [SCM-396] git provider implements scm update
start implementation (TODO finish correct implementation of ScmFileStatus) Added: 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/update/ 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/update/GitUpdateCommand.java (with props) 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/update/GitUpdateCommandConsumer.java (with props) 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/update/ 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/update/GitUpdateCommandConsumerTest.java (with props) maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-add-delete.out maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-one-other-format.out maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-one.out maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-up-to-date.out maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update.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/GitExeScmProvider.java 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/GitExeScmProvider.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/GitExeScmProvider.java?rev=684464&r1=684463&r2=684464&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/GitExeScmProvider.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/GitExeScmProvider.java Sun Aug 10 04:35:16 2008 @@ -34,6 +34,7 @@ import org.apache.maven.scm.provider.git.gitexe.command.remove.GitRemoveCommand; import org.apache.maven.scm.provider.git.gitexe.command.status.GitStatusCommand; import org.apache.maven.scm.provider.git.gitexe.command.tag.GitTagCommand; +import org.apache.maven.scm.provider.git.gitexe.command.update.GitUpdateCommand; import org.apache.maven.scm.repository.ScmRepositoryException; import java.io.File; @@ -98,7 +99,7 @@ protected GitCommand getUpdateCommand() { - return null; //X TODO + return new GitUpdateCommand(); } protected GitCommand getListCommand() Added: 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/update/GitUpdateCommand.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/update/GitUpdateCommand.java?rev=684464&view=auto ============================================================================== --- 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/update/GitUpdateCommand.java (added) +++ 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/update/GitUpdateCommand.java Sun Aug 10 04:35:16 2008 @@ -0,0 +1,85 @@ +package org.apache.maven.scm.provider.git.gitexe.command.update; + +import java.util.Collections; + +import org.apache.maven.scm.ScmException; +import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.ScmVersion; +import org.apache.maven.scm.command.changelog.ChangeLogCommand; +import org.apache.maven.scm.command.update.AbstractUpdateCommand; +import org.apache.maven.scm.command.update.UpdateScmResult; +import org.apache.maven.scm.command.update.UpdateScmResultWithRevision; +import org.apache.maven.scm.provider.ScmProviderRepository; +import org.apache.maven.scm.provider.git.command.GitCommand; +import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils; +import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository; +import org.codehaus.plexus.util.cli.CommandLineUtils; +import org.codehaus.plexus.util.cli.Commandline; + +/* + * 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. + */ + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">olamy</a> + * @since 10 août 2008 + * @version $Id$ + */ +public class GitUpdateCommand extends AbstractUpdateCommand implements GitCommand +{ + + protected UpdateScmResult executeUpdateCommand( ScmProviderRepository repo, ScmFileSet fileSet, + ScmVersion scmVersion ) + throws ScmException + { + GitScmProviderRepository repository = (GitScmProviderRepository) repo; + + if ( GitScmProviderRepository.PROTOCOL_FILE.equals( repository.getProtocol() ) && + repository.getUrl().indexOf( fileSet.getBasedir().getPath() ) >= 0 ) + { + throw new ScmException( "remote repository must not be the working directory" ); + } + + int exitCode; + + GitUpdateCommandConsumer consumer = new GitUpdateCommandConsumer( getLogger(), fileSet + .getBasedir() ); + + CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer(); + + Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "pull" ); + cl.createArg().setLine( "origin" ); + cl.createArg().setLine( "master" ); + exitCode = GitCommandLineUtils.execute( cl, consumer, stderr, getLogger() ); + if ( exitCode != 0 ) + { + getLogger().warn( "failed to update git, return code " + exitCode ); + return new UpdateScmResult( cl.toString(), "The git-pull origin master command failed.", stderr.getOutput(), false ); + } + return new UpdateScmResultWithRevision( cl.toString(), consumer.getUpdatedFiles(), null ); + } + + protected ChangeLogCommand getChangeLogCommand() + { + // TODO Auto-generated method stub + return null; + } + + + +} Propchange: 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/update/GitUpdateCommand.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: 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/update/GitUpdateCommand.java ------------------------------------------------------------------------------ svn:keywords = Author Date Revision Id Added: 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/update/GitUpdateCommandConsumer.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/update/GitUpdateCommandConsumer.java?rev=684464&view=auto ============================================================================== --- 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/update/GitUpdateCommandConsumer.java (added) +++ 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/update/GitUpdateCommandConsumer.java Sun Aug 10 04:35:16 2008 @@ -0,0 +1,107 @@ +package org.apache.maven.scm.provider.git.gitexe.command.update; + +import java.io.File; +import java.util.ArrayList; +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.util.AbstractConsumer; +import org.codehaus.plexus.util.StringUtils; + +/* + * 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. + */ + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">olamy</a> + * @since 10 août 2008 + * @version $Id$ + */ +public class GitUpdateCommandConsumer + extends AbstractConsumer +{ + + private boolean updatingFound; + + private boolean summaryFound; + + private List scmFiles = new ArrayList(); + + public GitUpdateCommandConsumer( ScmLogger logger, File workingDirectory ) + { + super( logger ); + } + + public void consumeLine( String line ) + { + getLogger().debug( "GitUpdateCommandConsumer consumeLine : " + line ); + if ( line == null || StringUtils.isEmpty( line ) ) + { + return; + } + if ( !updatingFound ) + { + if ( line.startsWith( "Updating" ) ) + { + updatingFound = true; + return; + } + } + // skip summary line + //1 files changed, 1 insertions(+), 1 deletions(-)â[m + if ( line.indexOf( "files changed" ) >= 0 ) + { + summaryFound = true; + + } + if ( updatingFound && !summaryFound ) + { + // test format : pom.xmlâ[m | 1 â[32m+â[m + int index = line.indexOf( "â[" ); + + if ( index >= 0 ) + { + String fileName = StringUtils.trim( line.substring( 0, index ) ); + scmFiles.add( new ScmFile( fileName, ScmFileStatus.UPDATED ) ); + } + else + { + // test other format : pom.xml | 3 +-- + index = line.indexOf( "|" ); + if ( index >= 0 ) + { + String fileName = StringUtils.trim( line.substring( 0, index ) ); + scmFiles.add( new ScmFile( fileName, ScmFileStatus.UPDATED ) ); + } + } + } + + // here we have status/name of added/remove and we update if create or remove + //3 files changed, 1 insertions(+), 3 deletions(-)â[m + // delete mode 100644 README + //create mode 100644 test.txt + } + + public List getUpdatedFiles() + { + getLogger().debug( " updatedFiles size " + scmFiles.size() ); + return scmFiles; + } +} Propchange: 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/update/GitUpdateCommandConsumer.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: 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/update/GitUpdateCommandConsumer.java ------------------------------------------------------------------------------ svn:keywords = Author Date Revision Id Added: 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/update/GitUpdateCommandConsumerTest.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/update/GitUpdateCommandConsumerTest.java?rev=684464&view=auto ============================================================================== --- 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/update/GitUpdateCommandConsumerTest.java (added) +++ 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/update/GitUpdateCommandConsumerTest.java Sun Aug 10 04:35:16 2008 @@ -0,0 +1,90 @@ +package org.apache.maven.scm.provider.git.gitexe.command.update; + +import java.io.BufferedReader; +import java.io.File; +import java.io.Reader; +import java.util.List; + +import org.apache.maven.scm.ScmFile; +import org.apache.maven.scm.ScmFileStatus; +import org.apache.maven.scm.log.DefaultLog; +import org.codehaus.plexus.PlexusTestCase; +import org.codehaus.plexus.util.ReaderFactory; + +/* + * 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. + */ + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">olamy</a> + * @since 10 août 2008 + * @version $Id$ + */ +public class GitUpdateCommandConsumerTest + extends PlexusTestCase +{ + public void testOneUpdate() + throws Exception + { + assertOneUpdate( "/src/test/resources/git/update/git-update-one.out" ); + } + + public void testOneUpdateOtherFormat() + throws Exception + { + assertOneUpdate( "/src/test/resources/git/update/git-update-one-other-format.out" ); + } + + + private void assertOneUpdate( String fileName ) + throws Exception + { + GitUpdateCommandConsumer consumer = new GitUpdateCommandConsumer( new DefaultLog(), null ); + + BufferedReader r = getGitLogBufferedReader( fileName ); + + String line; + + while ( ( line = r.readLine() ) != null ) + { + //System.out.println(" line " + line ); + consumer.consumeLine( line ); + } + + List changedFiles = consumer.getUpdatedFiles(); + + assertEquals( 1, changedFiles.size() ); + + assertScmFile( (ScmFile) changedFiles.get( 0 ), "pom.xml", ScmFileStatus.UPDATED ); + } + + private BufferedReader getGitLogBufferedReader( String fileName ) + throws Exception + { + File f = getTestFile( fileName ); + Reader reader = ReaderFactory.newReader( f, "UTF-8" ); + return new BufferedReader( reader ); + } + + private void assertScmFile( ScmFile file, String fileName, ScmFileStatus status ) + { + assertEquals( fileName, file.getPath() ); + assertEquals( status, file.getStatus() ); + } + +} Propchange: 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/update/GitUpdateCommandConsumerTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: 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/update/GitUpdateCommandConsumerTest.java ------------------------------------------------------------------------------ svn:keywords = Author Date Revision Id Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-add-delete.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/update/git-update-add-delete.out?rev=684464&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-add-delete.out (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-add-delete.out Sun Aug 10 04:35:16 2008 @@ -0,0 +1,14 @@ +remote: Counting objects: 12, done.â[K +remote: Compressing objects: 100% (6/6), done.â[K) â[K +remote: Total 9 (delta 3), reused 8 (delta 2)â[K +Unpacking objects: 100% (9/9), done. +From [EMAIL PROTECTED]:olamy/scm-git-test-one-module + * branch master -> FETCH_HEAD +Updating 9e24129..a74329b +Fast forward + README â[m | 2 â[31m--â[m + pom.xml â[m | 1 â[31m-â[m + test.txtâ[m | 1 â[32m+â[m + 3 files changed, 1 insertions(+), 3 deletions(-)â[m + delete mode 100644 README + create mode 100644 test.txt Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-one-other-format.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/update/git-update-one-other-format.out?rev=684464&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-one-other-format.out (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-one-other-format.out Sun Aug 10 04:35:16 2008 @@ -0,0 +1,6 @@ +From [EMAIL PROTECTED]:olamy/scm-git-test-one-module + * branch master -> FETCH_HEAD +Updating a2a2d2f..9b95d23 +Fast forward + pom.xml | 3 +-- + 1 files changed, 1 insertions(+), 2 deletions(-) \ No newline at end of file Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-one.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/update/git-update-one.out?rev=684464&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-one.out (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-one.out Sun Aug 10 04:35:16 2008 @@ -0,0 +1,10 @@ +remote: Counting objects: 5, done.â[K +remote: Compressing objects: 100% (3/3), done.â[K +remote: Total 3 (delta 2), reused 1 (delta 0)â[K +Unpacking objects: 100% (3/3), done. +From [EMAIL PROTECTED]:olamy/scm-git-test-one-module + * branch master -> FETCH_HEAD +Updating a74329b..5c76cac +Fast forward + pom.xmlâ[m | 1 â[32m+â[m + 1 files changed, 1 insertions(+), 0 deletions(-)â[m \ No newline at end of file Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-up-to-date.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/update/git-update-up-to-date.out?rev=684464&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-up-to-date.out (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update-up-to-date.out Sun Aug 10 04:35:16 2008 @@ -0,0 +1,3 @@ +From [EMAIL PROTECTED]:olamy/scm-git-test-one-module + * branch master -> FETCH_HEAD +Already up-to-date. \ No newline at end of file Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update.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/update/git-update.out?rev=684464&view=auto ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update.out (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/git/update/git-update.out Sun Aug 10 04:35:16 2008 @@ -0,0 +1,11 @@ +remote: Counting objects: 7, done.â[K +remote: Compressing objects: 100% (3/3), done.â[K +remote: Total 4 (delta 2), reused 3 (delta 1)â[K +Unpacking objects: 100% (4/4), done. +From [EMAIL PROTECTED]:olamy/scm-git-test-one-module + * branch master -> FETCH_HEAD +Updating e5f3806..9e24129 +Fast forward + README â[m | 1 â[31m-â[m + pom.xmlâ[m | 1 â[32m+â[m + 2 files changed, 1 insertions(+), 1 deletions(-)â[m