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 jv...@apache.org on 2008/04/05 23:58:57 UTC
svn commit: r645182 [3/5] - in
/maven/scm/trunk/maven-scm-providers/maven-scm-providers-git: ./
maven-scm-provider-git-commons/ maven-scm-provider-git-commons/src/
maven-scm-provider-git-commons/src/main/
maven-scm-provider-git-commons/src/main/java/ m...
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/checkin/GitCheckInCommand.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/checkin/GitCheckInCommand.java?rev=645182&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/checkin/GitCheckInCommand.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/checkin/GitCheckInCommand.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,201 @@
+package org.apache.maven.scm.provider.git.gitexe.command.checkin;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.checkin.AbstractCheckInCommand;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
+import org.apache.maven.scm.provider.git.gitexe.command.add.GitAddCommand;
+import org.apache.maven.scm.provider.git.gitexe.command.status.GitStatusCommand;
+import org.apache.maven.scm.provider.git.gitexe.command.status.GitStatusConsumer;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitCheckInCommand extends AbstractCheckInCommand implements GitCommand
+{
+ protected CheckInScmResult executeCheckInCommand( ScmProviderRepository repo, ScmFileSet fileSet, String message,
+ ScmVersion version )
+ throws ScmException
+ {
+ GitScmProviderRepository repository = (GitScmProviderRepository) repo;
+
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+ CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
+
+ int exitCode;
+
+ File messageFile = FileUtils.createTempFile( "maven-scm-", ".commit", null );
+ try
+ {
+ FileUtils.fileWrite( messageFile.getAbsolutePath(), message );
+ }
+ catch ( IOException ex )
+ {
+ return new CheckInScmResult( null, "Error while making a temporary file for the commit message: " +
+ ex.getMessage(), null, false );
+ }
+
+ try
+ {
+ if ( !fileSet.getFileList().isEmpty() )
+ {
+ // if specific fileSet is given, we have to git-add them first
+ // otherwise we will use 'git-commit -a' later
+
+ Commandline clAdd = GitAddCommand.createCommandLine( fileSet.getBasedir(), fileSet.getFileList() );
+
+ exitCode = GitCommandLineUtils.execute( clAdd, stdout, stderr, getLogger() );
+
+ if ( exitCode != 0 )
+ {
+ return new CheckInScmResult( clAdd.toString(), "The git-add command failed.", stderr.getOutput(), false );
+ }
+
+ }
+
+ // git-commit doesn't show single files, but only summary :/
+ // so we must run git-status and consume the output
+ // borrow a few things from the git-status command
+ Commandline clStatus = GitStatusCommand.createCommandLine( repository, fileSet );
+
+ GitStatusConsumer statusConsumer = new GitStatusConsumer( getLogger(), fileSet.getBasedir() );
+ exitCode = GitCommandLineUtils.execute( clStatus, statusConsumer, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ // git-status returns non-zero if nothing to do
+ getLogger().info( "nothing added to commit but untracked files present (use \"git add\" to track)" );
+ }
+
+ Commandline clCommit = createCommitCommandLine(repository, fileSet, messageFile);
+
+ exitCode = GitCommandLineUtils.execute( clCommit, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new CheckInScmResult( clCommit.toString(), "The git-commit command failed.", stderr.getOutput(), false );
+ }
+
+ Commandline cl = createPushCommandLine( repository, fileSet, version );
+
+ exitCode = GitCommandLineUtils.execute( cl, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new CheckInScmResult( cl.toString(), "The git-push command failed.", stderr.getOutput(), false );
+ }
+
+ List checkedInFiles = new ArrayList( statusConsumer.getChangedFiles().size() );
+
+ // rewrite all detected files to now have status 'checked_in'
+ for ( Iterator it = statusConsumer.getChangedFiles().iterator(); it.hasNext(); )
+ {
+ ScmFile scmfile = new ScmFile( ((ScmFile) it.next()).getPath(), ScmFileStatus.CHECKED_IN );
+
+ if ( fileSet.getFileList().isEmpty() ) {
+ checkedInFiles.add( scmfile );
+ }
+ else
+ {
+ // if a specific fileSet is given, we have to check if the file is really tracked
+ for ( Iterator itfl = fileSet.getFileList().iterator(); itfl.hasNext(); )
+ {
+ File f = (File) itfl.next();
+ if ( f.toString().equals( scmfile.getPath() ))
+ {
+ checkedInFiles.add( scmfile );
+ }
+
+ }
+ }
+ }
+
+ return new CheckInScmResult( cl.toString(), checkedInFiles );
+ }
+ finally
+ {
+ try
+ {
+ FileUtils.forceDelete( messageFile );
+ }
+ catch ( IOException ex )
+ {
+ // ignore
+ }
+ }
+
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public static Commandline createPushCommandLine( GitScmProviderRepository repository, ScmFileSet fileSet,
+ ScmVersion version )
+ throws ScmException
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "push");
+
+ //X TODO handle version
+
+ return cl;
+ }
+
+ public static Commandline createCommitCommandLine( GitScmProviderRepository repository, ScmFileSet fileSet,
+ File messageFile )
+ throws ScmException
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "commit");
+
+ cl.createArgument().setValue( "--verbose" );
+
+ cl.createArgument().setValue( "-F" );
+ cl.createArgument().setValue( messageFile.getAbsolutePath() );
+
+ if ( fileSet.getFileList().isEmpty() )
+ {
+ // commit all tracked files
+ cl.createArgument().setValue( "-a" );
+ }
+ else
+ {
+ // specify exactly which files to commit
+ GitCommandLineUtils.addTarget( cl, fileSet.getFileList() );
+ }
+
+ return cl;
+ }
+
+}
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/checkin/GitCheckInCommand.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/checkin/GitCheckInCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/checkout/GitCheckOutCommand.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/checkout/GitCheckOutCommand.java?rev=645182&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/checkout/GitCheckOutCommand.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/checkout/GitCheckOutCommand.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,187 @@
+package org.apache.maven.scm.provider.git.gitexe.command.checkout;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmTag;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
+import org.apache.maven.scm.provider.git.gitexe.command.list.GitListCommand;
+import org.apache.maven.scm.provider.git.gitexe.command.list.GitListConsumer;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitCheckOutCommand extends AbstractCheckOutCommand implements GitCommand
+{
+ /**
+ * For git, the given repository is a remote one.
+ * We have to clone it first if the working directory does not contain a git repo yet,
+ * otherwise we have to git-pull it.
+ *
+ * TODO We currently assume a '.git' directory, so this does not work for --bare repos
+ */
+ protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+ ScmVersion version )
+ 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;
+
+ CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+
+ if ( !fileSet.getBasedir().exists() ||
+ !( new File( fileSet.getBasedir(), ".git" ).exists() ) )
+ {
+ if ( fileSet.getBasedir().exists() )
+ {
+ // git refuses to clone otherwise
+ fileSet.getBasedir().delete();
+ }
+
+ // no git repo seems to exist, let's clone the original repo
+ Commandline clClone = createCloneCommand( repository, fileSet.getBasedir() );
+
+ exitCode = GitCommandLineUtils.execute( clClone, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new CheckOutScmResult( clClone.toString(), "The git-clone command failed.", stderr.getOutput(), false );
+ }
+ }
+
+ if ( fileSet.getBasedir().exists() &&
+ new File( fileSet.getBasedir(), ".git" ).exists() )
+ {
+ // git repo exists, so we must git-pull the changes
+ Commandline clPull = createPullCommand( repository, fileSet.getBasedir(), version );
+
+ exitCode = GitCommandLineUtils.execute( clPull, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new CheckOutScmResult( clPull.toString(), "The git-pull command failed.", stderr.getOutput(), false );
+ }
+ }
+
+ // and now lets do the git-checkout itself
+ Commandline cl = createCommandLine( repository, fileSet.getBasedir(), version );
+
+ exitCode = GitCommandLineUtils.execute( cl, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new CheckOutScmResult( cl.toString(), "The git-checkout command failed.", stderr.getOutput(), false );
+ }
+
+ // and now search for the files
+ GitListConsumer listConsumer = new GitListConsumer( getLogger()
+ , fileSet.getBasedir()
+ , ScmFileStatus.CHECKED_IN);
+
+ Commandline clList = GitListCommand.createCommandLine( repository, fileSet.getBasedir() );
+
+ exitCode = GitCommandLineUtils.execute( clList, listConsumer, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new CheckOutScmResult( clList.toString(), "The git-ls-files command failed.", stderr.getOutput(), false );
+ }
+
+ return new CheckOutScmResult( cl.toString(), listConsumer.getListedFiles() );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public static Commandline createCommandLine( GitScmProviderRepository repository, File workingDirectory,
+ ScmVersion version )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "checkout" );
+
+
+ if ( version != null && StringUtils.isNotEmpty( version.getName() ) )
+ {
+ cl.createArgument().setValue( version.getName() );
+ }
+
+ return cl;
+ }
+
+ /**
+ * create a git-clone repository command
+ */
+ private Commandline createCloneCommand( GitScmProviderRepository repository, File workingDirectory )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory.getParentFile(), "clone" );
+
+ cl.createArgument().setValue( repository.getUrl() );
+
+ cl.createArgument().setFile( workingDirectory );
+
+ return cl;
+ }
+
+ /**
+ * create a git-pull repository command
+ */
+ private Commandline createPullCommand( GitScmProviderRepository repository, File workingDirectory,
+ ScmVersion version )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "pull" );
+
+ cl.createArgument().setValue( repository.getUrl() );
+
+ if ( version != null && StringUtils.isNotEmpty( version.getName() ) )
+ {
+ if ( version instanceof ScmTag )
+ {
+ cl.createArgument().setValue( "tag" );
+ cl.createArgument().setValue( version.getName() );
+ }
+ else
+ {
+ cl.createArgument().setValue( version.getName() + ":" + version.getName() );
+ }
+ }
+ else {
+ cl.createArgument().setValue( "master" );
+ }
+ return cl;
+ }
+}
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/checkout/GitCheckOutCommand.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/checkout/GitCheckOutCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/diff/GitDiffCommand.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/diff/GitDiffCommand.java?rev=645182&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/diff/GitDiffCommand.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/diff/GitDiffCommand.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,96 @@
+package org.apache.maven.scm.provider.git.gitexe.command.diff;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.diff.AbstractDiffCommand;
+import org.apache.maven.scm.command.diff.DiffScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.command.diff.GitDiffConsumer;
+import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitDiffCommand extends AbstractDiffCommand implements GitCommand
+{
+ protected DiffScmResult executeDiffCommand( ScmProviderRepository repo, ScmFileSet fileSet, ScmVersion startVersion,
+ ScmVersion endVersion )
+ throws ScmException
+ {
+ GitDiffConsumer consumer = new GitDiffConsumer( getLogger(), fileSet.getBasedir() );
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+ int exitCode;
+
+ Commandline clDiff2Index = createCommandLine( fileSet.getBasedir(), startVersion, endVersion, false );
+
+ exitCode = GitCommandLineUtils.execute( clDiff2Index, consumer, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new DiffScmResult( clDiff2Index.toString(), "The git-diff command failed.", stderr.getOutput(), false );
+ }
+
+ Commandline clDiff2Head = createCommandLine( fileSet.getBasedir(), startVersion, endVersion, true );
+
+ exitCode = GitCommandLineUtils.execute( clDiff2Head, consumer, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new DiffScmResult( clDiff2Head.toString(), "The git-diff command failed.", stderr.getOutput(), false );
+ }
+
+ return new DiffScmResult( clDiff2Index.toString(), consumer.getChangedFiles(), consumer.getDifferences(),
+ consumer.getPatch() );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ /**
+ * @param cached if <code>true</code> diff the index to the head, else diff the tree to the index
+ */
+ public static Commandline createCommandLine( File workingDirectory, ScmVersion startVersion, ScmVersion endVersion, boolean cached )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "diff" );
+
+ if ( cached ) {
+ cl.createArgument().setValue( "--cached" );
+ }
+
+ if ( startVersion != null && StringUtils.isNotEmpty( startVersion.getName() ) )
+ {
+ cl.createArgument().setValue( startVersion.getName() );
+ }
+ if ( endVersion != null && StringUtils.isNotEmpty( endVersion.getName() ) )
+ {
+ cl.createArgument().setValue( endVersion.getName() );
+ }
+
+ return cl;
+ }
+}
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/diff/GitDiffCommand.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/diff/GitDiffCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/list/GitListCommand.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/list/GitListCommand.java?rev=645182&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/list/GitListCommand.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/list/GitListCommand.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,85 @@
+package org.apache.maven.scm.provider.git.gitexe.command.list;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.command.list.AbstractListCommand;
+import org.apache.maven.scm.command.list.ListScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
+import org.apache.maven.scm.provider.git.gitexe.command.list.GitListConsumer;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitListCommand extends AbstractListCommand implements GitCommand
+{
+
+ protected ListScmResult executeListCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+ boolean recursive, 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;
+
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+ GitListConsumer consumer = new GitListConsumer( getLogger()
+ , fileSet.getBasedir().getParentFile()
+ , ScmFileStatus.CHECKED_IN );
+
+ Commandline cl = createCommandLine( repository, fileSet.getBasedir() );
+
+ exitCode = GitCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new ListScmResult( cl.toString(), "The git-ls-files command failed.", stderr.getOutput(), false );
+ }
+
+ return new ListScmResult( cl.toString(), consumer.getListedFiles() );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public static Commandline createCommandLine( GitScmProviderRepository repository, File workingDirectory )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "ls-files" );
+
+ return cl;
+ }
+
+}
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/list/GitListCommand.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/list/GitListCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/list/GitListConsumer.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/list/GitListConsumer.java?rev=645182&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/list/GitListConsumer.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/list/GitListConsumer.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,65 @@
+package org.apache.maven.scm.provider.git.gitexe.command.list;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.git.gitexe.command.AbstractFileCheckingConsumer;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitListConsumer
+ extends AbstractFileCheckingConsumer
+{
+ private ScmFileStatus fileStatus;
+
+ /**
+ * @param logger
+ * @param workingDirectory
+ * @param fileStatus will be used for each file found
+ */
+ public GitListConsumer( ScmLogger logger, File workingDirectory, ScmFileStatus fileStatus )
+ {
+ super( logger, workingDirectory );
+
+ this.fileStatus = fileStatus;
+ }
+
+ protected void parseLine( String line )
+ {
+ String file = line;
+
+ addFile( new ScmFile( file, fileStatus ) );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public List getListedFiles()
+ {
+ return getFiles();
+ }
+}
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/list/GitListConsumer.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/list/GitListConsumer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/remove/GitRemoveCommand.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/remove/GitRemoveCommand.java?rev=645182&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/remove/GitRemoveCommand.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/remove/GitRemoveCommand.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,79 @@
+package org.apache.maven.scm.provider.git.gitexe.command.remove;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.remove.AbstractRemoveCommand;
+import org.apache.maven.scm.command.remove.RemoveScmResult;
+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;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitRemoveCommand extends AbstractRemoveCommand implements GitCommand
+{
+ protected ScmResult executeRemoveCommand( ScmProviderRepository repo, ScmFileSet fileSet, String message )
+ throws ScmException
+ {
+ GitScmProviderRepository repository = (GitScmProviderRepository) repo;
+
+ if ( fileSet.getFileList().isEmpty() )
+ {
+ throw new ScmException( "You must provide at least one file/directory to remove" );
+ }
+
+ Commandline cl = createCommandLine( fileSet.getBasedir(), fileSet.getFileList() );
+
+ GitRemoveConsumer consumer = new GitRemoveConsumer( getLogger() );
+
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ int exitCode;
+
+ exitCode = GitCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new RemoveScmResult( cl.toString(), "The git command failed.", stderr.getOutput(), false );
+ }
+
+ return new RemoveScmResult( cl.toString(), consumer.getRemovedFiles() );
+ }
+
+ public static Commandline createCommandLine( File workingDirectory, List/*File*/ files )
+ throws ScmException
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "rm" );
+
+ GitCommandLineUtils.addTarget( cl, files );
+
+ return cl;
+ }
+
+}
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/remove/GitRemoveCommand.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/remove/GitRemoveCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/remove/GitRemoveConsumer.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/remove/GitRemoveConsumer.java?rev=645182&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/remove/GitRemoveConsumer.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/remove/GitRemoveConsumer.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,99 @@
+package org.apache.maven.scm.provider.git.gitexe.command.remove;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.regexp.RE;
+import org.apache.regexp.RESyntaxException;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitRemoveConsumer implements StreamConsumer
+{
+ /**
+ * The pattern used to match deleted file lines
+ */
+ private static final String REMOVED_PATTERN = "^rm\\s'(.*)'";
+
+ private ScmLogger logger;
+
+ private List removedFiles = new ArrayList();
+
+ /**
+ * @see #REMOVED_PATTERN
+ */
+ private RE removedRegexp;
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public GitRemoveConsumer( ScmLogger logger )
+ {
+ this.logger = logger;
+ try
+ {
+ removedRegexp = new RE( REMOVED_PATTERN );
+ }
+ catch ( RESyntaxException ex )
+ {
+ throw new RuntimeException(
+ "INTERNAL ERROR: Could not create regexp to parse git log file. This shouldn't happen. Something is probably wrong with the oro installation.",
+ ex );
+ }
+ }
+
+ // ----------------------------------------------------------------------
+ // StreamConsumer Implementation
+ // ----------------------------------------------------------------------
+
+ public void consumeLine( String line )
+ {
+ if ( line.length() <= 2 )
+ {
+ return;
+ }
+
+ if ( removedRegexp.match( line ) )
+ {
+ String file = removedRegexp.getParen( 1 );
+ removedFiles.add( new ScmFile( file, ScmFileStatus.DELETED ) );
+ }
+ else
+ {
+ logger.info( "could not parse line: " + line );
+
+ return;
+ }
+ }
+
+ public List getRemovedFiles()
+ {
+ return removedFiles;
+ }
+
+}
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/remove/GitRemoveConsumer.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/remove/GitRemoveConsumer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/status/GitStatusCommand.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/status/GitStatusCommand.java?rev=645182&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/status/GitStatusCommand.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/status/GitStatusCommand.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,72 @@
+package org.apache.maven.scm.provider.git.gitexe.command.status;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.status.AbstractStatusCommand;
+import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public class GitStatusCommand
+ extends AbstractStatusCommand
+ implements GitCommand
+{
+ protected StatusScmResult executeStatusCommand( ScmProviderRepository repo, ScmFileSet fileSet )
+ throws ScmException
+ {
+ Commandline cl = createCommandLine( (GitScmProviderRepository) repo, fileSet );
+
+ GitStatusConsumer consumer = new GitStatusConsumer( getLogger(), fileSet.getBasedir() );
+
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ int exitCode;
+
+ exitCode = GitCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ // git-status returns non-zero if nothing to do
+ getLogger().info( "nothing added to commit but untracked files present (use \"git add\" to track)" );
+ }
+
+ return new StatusScmResult( cl.toString(), consumer.getChangedFiles() );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public static Commandline createCommandLine( GitScmProviderRepository repository, ScmFileSet fileSet )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "status" );
+
+ return cl;
+ }
+}
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/status/GitStatusCommand.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/status/GitStatusCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/status/GitStatusConsumer.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/status/GitStatusConsumer.java?rev=645182&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/status/GitStatusConsumer.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/status/GitStatusConsumer.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,149 @@
+package org.apache.maven.scm.provider.git.gitexe.command.status;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.regexp.RE;
+import org.apache.regexp.RESyntaxException;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitStatusConsumer
+ implements StreamConsumer
+{
+ /**
+ * The pattern used to match added file lines
+ */
+ private static final String ADDED_PATTERN = "^#\\s*new file:\\s*(.*)";
+
+ /**
+ * The pattern used to match modified file lines
+ */
+ private static final String MODIFIED_PATTERN = "^#\\s*modified:\\s*(.*)";
+
+ /**
+ * The pattern used to match deleted file lines
+ */
+ private static final String DELETED_PATTERN = "^#\\s*deleted:\\s*(.*)";
+
+ /**
+ * @see #ADDED_PATTERN
+ */
+ private RE addedRegexp;
+
+ /**
+ * @see #MODIFIED_PATTERN
+ */
+ private RE modifiedRegexp;
+
+ /**
+ * @see #DELETED_PATTERN
+ */
+ private RE deletedRegexp;
+
+ private ScmLogger logger;
+
+ private File workingDirectory;
+
+ private List changedFiles = new ArrayList();
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public GitStatusConsumer( ScmLogger logger, File workingDirectory )
+ {
+ this.logger = logger;
+ this.workingDirectory = workingDirectory;
+
+ try
+ {
+ addedRegexp = new RE( ADDED_PATTERN );
+ modifiedRegexp = new RE( MODIFIED_PATTERN );
+ deletedRegexp = new RE( DELETED_PATTERN );
+ }
+ catch ( RESyntaxException ex )
+ {
+ throw new RuntimeException(
+ "INTERNAL ERROR: Could not create regexp to parse git log file. This shouldn't happen. Something is probably wrong with the oro installation.",
+ ex );
+ }
+ }
+
+ // ----------------------------------------------------------------------
+ // StreamConsumer Implementation
+ // ----------------------------------------------------------------------
+
+ public void consumeLine( String line )
+ {
+ logger.debug( line );
+ if ( StringUtils.isEmpty( line ) )
+ {
+ return;
+ }
+
+ ScmFileStatus status = null;
+
+ String file = null;
+
+ if ( addedRegexp.match( line ) )
+ {
+ status = ScmFileStatus.ADDED;
+ file = addedRegexp.getParen( 1 );
+ }
+ else if ( modifiedRegexp.match( line ) )
+ {
+ status = ScmFileStatus.MODIFIED;
+ file = modifiedRegexp.getParen( 1 );
+ }
+ else if ( deletedRegexp.match( line ) )
+ {
+ status = ScmFileStatus.DELETED;
+ file = deletedRegexp.getParen( 1 );
+ }
+
+ // If the file isn't a file; don't add it.
+ if ( file != null )
+ {
+ if ( workingDirectory != null && !new File( workingDirectory, file ).isFile() )
+ {
+ return;
+ }
+
+ changedFiles.add( new ScmFile( file, status ) );
+ }
+
+
+ }
+
+ public List getChangedFiles()
+ {
+ return changedFiles;
+ }
+}
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/status/GitStatusConsumer.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/status/GitStatusConsumer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/tag/GitTagCommand.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/tag/GitTagCommand.java?rev=645182&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/tag/GitTagCommand.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/tag/GitTagCommand.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,161 @@
+package org.apache.maven.scm.provider.git.gitexe.command.tag;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.command.tag.AbstractTagCommand;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.git.command.GitCommand;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
+import org.apache.maven.scm.provider.git.gitexe.command.list.GitListCommand;
+import org.apache.maven.scm.provider.git.gitexe.command.list.GitListConsumer;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitTagCommand extends AbstractTagCommand implements GitCommand
+{
+ public ScmResult executeTagCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag, String message )
+ throws ScmException
+ {
+ if ( tag == null || StringUtils.isEmpty( tag.trim() ) )
+ {
+ throw new ScmException( "tag name must be specified" );
+ }
+
+ if ( !fileSet.getFileList().isEmpty() )
+ {
+ throw new ScmException( "This provider doesn't support tagging subsets of a directory" );
+ }
+
+ GitScmProviderRepository repository = (GitScmProviderRepository) repo;
+
+ File messageFile = FileUtils.createTempFile( "maven-scm-", ".commit", null );
+
+ try
+ {
+ FileUtils.fileWrite( messageFile.getAbsolutePath(), message );
+ }
+ catch ( IOException ex )
+ {
+ return new TagScmResult( null,
+ "Error while making a temporary file for the commit message: " + ex.getMessage(),
+ null, false );
+ }
+
+
+ try
+ {
+ CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ int exitCode;
+
+ Commandline clTag = createCommandLine( repository, fileSet.getBasedir(), tag, messageFile );
+
+ exitCode = GitCommandLineUtils.execute( clTag, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new TagScmResult( clTag.toString(), "The git-tag command failed.", stderr.getOutput(), false );
+ }
+
+ // and now push the tag to the origin repository
+ Commandline clPush = createPushCommandLine( repository, fileSet, tag );
+
+ exitCode = GitCommandLineUtils.execute( clPush, stdout, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new TagScmResult( clPush.toString(), "The git-push command failed.", stderr.getOutput(), false );
+ }
+
+ // plus search for the tagged files
+ GitListConsumer listConsumer = new GitListConsumer( getLogger()
+ , fileSet.getBasedir()
+ , ScmFileStatus.TAGGED );
+
+ Commandline clList = GitListCommand.createCommandLine( repository, fileSet.getBasedir() );
+
+ exitCode = GitCommandLineUtils.execute( clList, listConsumer, stderr, getLogger() );
+ if ( exitCode != 0 )
+ {
+ return new CheckOutScmResult( clList.toString(), "The git-ls-files command failed.", stderr.getOutput(), false );
+ }
+
+ return new TagScmResult( clTag.toString(), listConsumer.getListedFiles() );
+ }
+ finally
+ {
+ try
+ {
+ FileUtils.forceDelete( messageFile );
+ }
+ catch ( IOException ex )
+ {
+ // ignore
+ }
+ }
+
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public static Commandline createCommandLine( GitScmProviderRepository repository, File workingDirectory, String tag,
+ File messageFile )
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "tag" );
+
+ cl.createArgument().setValue( "-F" );
+ cl.createArgument().setValue( messageFile.getAbsolutePath() );
+
+ // Note: this currently assumes you have the tag base checked out too
+ cl.createArgument().setValue( tag );
+
+ return cl;
+ }
+
+ public static Commandline createPushCommandLine( GitScmProviderRepository repository, ScmFileSet fileSet,
+ String tag )
+ throws ScmException
+ {
+ Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( fileSet.getBasedir(), "push");
+
+ cl.createArgument().setValue( "origin" );
+ cl.createArgument().setValue( tag );
+
+ return cl;
+ }
+
+}
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/tag/GitTagCommand.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/tag/GitTagCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/branch/GitExeBranchCommandTckTest.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/branch/GitExeBranchCommandTckTest.java?rev=645182&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/branch/GitExeBranchCommandTckTest.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/branch/GitExeBranchCommandTckTest.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,30 @@
+package org.apache.maven.scm.provider.git.gitexe.command.branch;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.provider.git.command.branch.GitBranchCommandTckTest;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitExeBranchCommandTckTest
+ extends GitBranchCommandTckTest
+{
+}
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/branch/GitExeBranchCommandTckTest.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/branch/GitExeBranchCommandTckTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/changelog/GitChangeLogCommandTest.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/changelog/GitChangeLogCommandTest.java?rev=645182&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/changelog/GitChangeLogCommandTest.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/changelog/GitChangeLogCommandTest.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,149 @@
+package org.apache.maven.scm.provider.git.gitexe.command.changelog;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmBranch;
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.ScmVersion;
+import org.apache.maven.scm.ScmRevision;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class GitChangeLogCommandTest
+ extends ScmTestCase
+{
+ public void testCommandLineNoDates()
+ throws Exception
+ {
+ testCommandLine( "scm:git:http://foo.com/git", null, null, null,
+ "git log" );
+ }
+
+ public void testCommandLineWithDates()
+ throws Exception
+ {
+ Date startDate = getDate( 2003, Calendar.SEPTEMBER, 10, GMT_TIME_ZONE );
+ Date endDate = getDate( 2007, Calendar.OCTOBER, 10, GMT_TIME_ZONE );
+
+ testCommandLine( "scm:git:http://foo.com/git", null, startDate, endDate,
+ "git log \"--since=2003-09-10 00:00:00 +0000\" \"--until=2007-10-10 00:00:00 +0000\"" );
+ }
+
+ public void testCommandLineStartDateOnly()
+ throws Exception
+ {
+ Date startDate = getDate( 2003, Calendar.SEPTEMBER, 10, 1, 1, 1, GMT_TIME_ZONE );
+
+ testCommandLine( "scm:git:http://foo.com/git", null, startDate, null,
+ "git log \"--since=2003-09-10 01:01:01 +0000\"" );
+ }
+
+ public void testCommandLineDateFormat()
+ throws Exception
+ {
+ Date startDate = getDate( 2003, Calendar.SEPTEMBER, 10, 1, 1, 1, GMT_TIME_ZONE );
+ Date endDate = getDate( 2005, Calendar.NOVEMBER, 13, 23, 23, 23, GMT_TIME_ZONE );
+
+ testCommandLine( "scm:git:http://foo.com/git", null, startDate, endDate,
+ "git log \"--since=2003-09-10 01:01:01 +0000\" \"--until=2005-11-13 23:23:23 +0000\"" );
+ }
+
+ public void testCommandLineEndDateOnly()
+ throws Exception
+ {
+ Date endDate = getDate( 2003, Calendar.NOVEMBER, 10, GMT_TIME_ZONE );
+
+ // Only specifying end date should print no dates at all
+ testCommandLine( "scm:git:http://foo.com/git", null, null, endDate,
+ "git log \"--until=2003-11-10 00:00:00 +0000\"" );
+ }
+
+ public void testCommandLineWithBranchNoDates()
+ throws Exception
+ {
+ testCommandLine( "scm:git:http://foo.com/git", new ScmBranch( "my-test-branch" ), null, null,
+ "git log" );
+ }
+
+
+ public void testCommandLineWithStartVersion()
+ throws Exception
+ {
+ testCommandLine( "scm:git:http://foo.com/git", new ScmRevision("1"), null,
+ "git log --since=1" );
+ }
+
+ public void testCommandLineWithStartVersionAndEndVersion()
+ throws Exception
+ {
+ testCommandLine( "scm:git:http://foo.com/git", new ScmRevision("1"), new ScmRevision("10"),
+ "git log --since=1 --until=10" );
+ }
+
+ public void testCommandLineWithStartVersionAndEndVersionEquals()
+ throws Exception
+ {
+ testCommandLine( "scm:git:http://foo.com/git", new ScmRevision("1"), new ScmRevision("1"),
+ "git log --since=1 --until=1" );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ private void testCommandLine( String scmUrl, ScmBranch branch, Date startDate, Date endDate, String commandLine )
+ throws Exception
+ {
+ File workingDirectory = getTestFile( "target/git-update-command-test" );
+
+ ScmRepository repository = getScmManager().makeScmRepository( scmUrl );
+
+ GitScmProviderRepository gitRepository = (GitScmProviderRepository) repository.getProviderRepository();
+
+ Commandline cl = GitChangeLogCommand.createCommandLine( gitRepository, workingDirectory, branch, startDate,
+ endDate, null, null );
+
+ assertEquals( commandLine, cl.toString() );
+ }
+
+ private void testCommandLine( String scmUrl, ScmVersion startVersion, ScmVersion endVersion, String commandLine )
+ throws Exception
+ {
+ File workingDirectory = getTestFile( "target/git-update-command-test" );
+
+ ScmRepository repository = getScmManager().makeScmRepository( scmUrl );
+
+ GitScmProviderRepository gitRepository = (GitScmProviderRepository) repository.getProviderRepository();
+
+ Commandline cl = GitChangeLogCommand.createCommandLine( gitRepository, workingDirectory, null, null, null,
+ startVersion, endVersion );
+
+ assertEquals( commandLine, cl.toString() );
+ }
+}
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/changelog/GitChangeLogCommandTest.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/changelog/GitChangeLogCommandTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/changelog/GitChangeLogConsumerTest.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/changelog/GitChangeLogConsumerTest.java?rev=645182&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/changelog/GitChangeLogConsumerTest.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/changelog/GitChangeLogConsumerTest.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,149 @@
+package org.apache.maven.scm.provider.git.gitexe.command.changelog;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ChangeFile;
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.log.DefaultLog;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.text.SimpleDateFormat;
+import java.util.Iterator;
+import java.util.List;
+import java.util.TimeZone;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+public class GitChangeLogConsumerTest
+ extends PlexusTestCase
+{
+
+ public void testConsumer1()
+ throws Exception
+ {
+ GitChangeLogConsumer consumer = new GitChangeLogConsumer( new DefaultLog(), null );
+
+ File f = getTestFile( "/src/test/resources/git/changelog/gitwhatchanged.log" );
+
+ BufferedReader r = new BufferedReader( new FileReader( f ) );
+
+ String line;
+
+ while ( ( line = r.readLine() ) != null )
+ {
+ consumer.consumeLine( line );
+ }
+
+ List modifications = consumer.getModifications();
+
+ assertEquals( 6, modifications.size() );
+
+ for ( Iterator i = modifications.iterator(); i.hasNext(); )
+ {
+ ChangeSet entry = (ChangeSet) i.next();
+
+ assertEquals( "Mark Struberg <st...@yahoo.de>", entry.getAuthor() );
+
+ assertNotNull( entry.getDate() );
+
+ assertTrue( entry.getComment() != null && entry.getComment().length() > 0 );
+
+ assertNotNull( entry.getFiles() );
+ assertFalse( entry.getFiles().isEmpty() );
+ }
+
+ ChangeSet entry = (ChangeSet) modifications.get( 3 );
+
+ assertEquals( "Mark Struberg <st...@yahoo.de>", entry.getAuthor() );
+
+ assertNotNull( entry.getDate() );
+ SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss Z" );
+ sdf.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
+
+ assertEquals( "2007-11-24 00:10:42 +0000", sdf.format( entry.getDate() ) );
+
+ assertEquals( "/ added" , entry.getComment() );
+
+ assertNotNull( entry.getFiles() );
+ ChangeFile cf = (ChangeFile) entry.getFiles().get( 0 );
+ assertEquals( "readme.txt", cf.getName() );
+ assertTrue( cf.getRevision() != null && cf.getRevision().length() > 0 );
+ }
+
+ public void testConsumer2()
+ throws Exception
+ {
+ GitChangeLogConsumer consumer = new GitChangeLogConsumer( new DefaultLog(), null );
+
+ File f = getTestFile( "/src/test/resources/git/changelog/gitwhatchanged2.log" );
+
+ BufferedReader r = new BufferedReader( new FileReader( f ) );
+
+ String line;
+
+ while ( ( line = r.readLine() ) != null )
+ {
+ consumer.consumeLine( line );
+ }
+
+ List modifications = consumer.getModifications();
+
+ for ( Iterator i = modifications.iterator(); i.hasNext(); )
+ {
+ ChangeSet entry = (ChangeSet) i.next();
+
+ assertEquals( "Mark Struberg <st...@yahoo.de>", entry.getAuthor() );
+
+ assertNotNull( entry.getDate() );
+
+ assertTrue( entry.getComment() != null && entry.getComment().length() > 0 );
+
+ assertNotNull( entry.getFiles() );
+ assertFalse( entry.getFiles().isEmpty() );
+ }
+
+ assertEquals( 8, modifications.size() );
+
+ ChangeSet entry = (ChangeSet) modifications.get( 4 );
+
+ assertEquals( "Mark Struberg <st...@yahoo.de>", entry.getAuthor() );
+
+ assertNotNull( entry.getDate() );
+ SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss Z" );
+ sdf.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
+
+ assertEquals( "2007-11-27 13:05:36 +0000", sdf.format( entry.getDate() ) );
+
+ assertEquals( "fixed a GitCommandLineUtil and provice first version of the checkin command." , entry.getComment() );
+
+ assertNotNull( entry.getFiles() );
+
+ assertEquals( 10, entry.getFiles().size() );
+
+ ChangeFile cf = (ChangeFile) entry.getFiles().get( 0 );
+ assertEquals( "maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/GitCommandLineUtils.java", cf.getName() );
+ assertTrue( cf.getRevision() != null && cf.getRevision().length() > 0 );
+ }
+
+}
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/changelog/GitChangeLogConsumerTest.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/changelog/GitChangeLogConsumerTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/checkin/GitCheckInCommandTest.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/checkin/GitCheckInCommandTest.java?rev=645182&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/checkin/GitCheckInCommandTest.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/checkin/GitCheckInCommandTest.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,86 @@
+package org.apache.maven.scm.provider.git.gitexe.command.checkin;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+
+/**
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
+ */
+public class GitCheckInCommandTest
+ extends ScmTestCase
+{
+ private File messageFile;
+
+ private String messageFileString;
+
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ messageFile = new File( "commit-message" );
+
+ String path = messageFile.getAbsolutePath();
+ if ( path.indexOf( ' ' ) >= 0 )
+ {
+ path = "\"" + path + "\"";
+ }
+ messageFileString = "-F " + path;
+ }
+
+ public void testCommandLineWithoutTag()
+ throws Exception
+ {
+ testCommandLine( "scm:git:http://foo.com/git/trunk", "git commit --verbose " + messageFileString + " -a" );
+ }
+
+ public void testCommandLineWithUsername()
+ throws Exception
+ {
+ testCommandLine( "scm:git:http://anonymous@foo.com/git/trunk",
+ "git commit --verbose " + messageFileString + " -a" );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ private void testCommandLine( String scmUrl, String commandLine )
+ throws Exception
+ {
+ File workingDirectory = getTestFile( "target/git-checkin-command-test" );
+
+ ScmRepository repository = getScmManager().makeScmRepository( scmUrl );
+
+ GitScmProviderRepository gitRepository = (GitScmProviderRepository) repository.getProviderRepository();
+
+ Commandline cl =
+ GitCheckInCommand.createCommitCommandLine( gitRepository, new ScmFileSet( workingDirectory ), messageFile );
+
+ assertEquals( commandLine, cl.toString() );
+ }
+}
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/checkin/GitCheckInCommandTest.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/checkin/GitCheckInCommandTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/checkin/GitExeCheckInCommandTckTest.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/checkin/GitExeCheckInCommandTckTest.java?rev=645182&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/checkin/GitExeCheckInCommandTckTest.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/checkin/GitExeCheckInCommandTckTest.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,31 @@
+package org.apache.maven.scm.provider.git.gitexe.command.checkin;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.provider.git.command.checkin.GitCheckInCommandTckTest;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public class GitExeCheckInCommandTckTest
+ extends GitCheckInCommandTckTest
+{
+}
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/checkin/GitExeCheckInCommandTckTest.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/checkin/GitExeCheckInCommandTckTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
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/checkout/GitCheckOutCommandTest.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/checkout/GitCheckOutCommandTest.java?rev=645182&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/checkout/GitCheckOutCommandTest.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/checkout/GitCheckOutCommandTest.java Sat Apr 5 14:58:41 2008
@@ -0,0 +1,79 @@
+package org.apache.maven.scm.provider.git.gitexe.command.checkout;
+
+/*
+ * 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.
+ */
+
+import org.apache.maven.scm.ScmRevision;
+import org.apache.maven.scm.ScmTestCase;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class GitCheckOutCommandTest
+ extends ScmTestCase
+{
+ private File workingDirectory;
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ workingDirectory = getTestFile( "target/git-checkout-command-test" );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public void testCommandLineWithBranch()
+ throws Exception
+ {
+ testCommandLine( getScmManager(), "scm:git:http://foo.com/git", "mybranch",
+ "git checkout mybranch" );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ private void testCommandLine( ScmManager scmManager, String scmUrl, String revision, String commandLine )
+ throws Exception
+ {
+ ScmRepository repository = scmManager.makeScmRepository( scmUrl );
+
+ GitScmProviderRepository gitRepository = (GitScmProviderRepository) repository.getProviderRepository();
+
+ Commandline cl = GitCheckOutCommand.createCommandLine( gitRepository, workingDirectory,
+ new ScmRevision( revision ) );
+
+ assertEquals( commandLine, cl.toString() );
+ }
+}