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 ol...@apache.org on 2011/01/19 22:54:37 UTC
svn commit: r1061024 - in
/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src:
main/java/org/apache/maven/scm/provider/hg/
main/java/org/apache/maven/scm/provider/hg/command/
main/java/org/apache/maven/scm/provider/hg/command/branch/ main/ja...
Author: olamy
Date: Wed Jan 19 21:54:37 2011
New Revision: 1061024
URL: http://svn.apache.org/viewvc?rev=1061024&view=rev
Log:
[SCM-587] Branch support for Mercurial (hg) SCM provider
Submitted by Henning Schmiedehausen
Added:
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/branch/
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/branch/HgBranchCommand.java (with props)
Modified:
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java
maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/diff/HgDiffCommandTckTest.java
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java?rev=1061024&r1=1061023&r2=1061024&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/HgScmProvider.java Wed Jan 19 21:54:37 2011
@@ -28,6 +28,7 @@ import org.apache.maven.scm.ScmException
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.command.add.AddScmResult;
import org.apache.maven.scm.command.blame.BlameScmResult;
+import org.apache.maven.scm.command.branch.BranchScmResult;
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
@@ -40,6 +41,7 @@ import org.apache.maven.scm.provider.Abs
import org.apache.maven.scm.provider.ScmProviderRepository;
import org.apache.maven.scm.provider.hg.command.add.HgAddCommand;
import org.apache.maven.scm.provider.hg.command.blame.HgBlameCommand;
+import org.apache.maven.scm.provider.hg.command.branch.HgBranchCommand;
import org.apache.maven.scm.provider.hg.command.changelog.HgChangeLogCommand;
import org.apache.maven.scm.provider.hg.command.checkin.HgCheckInCommand;
import org.apache.maven.scm.provider.hg.command.checkout.HgCheckOutCommand;
@@ -298,4 +300,15 @@ public class HgScmProvider
return (BlameScmResult) command.execute( repository, fileSet, parameters );
}
+
+ /** {@inheritDoc} */
+ public BranchScmResult branch( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+ throws ScmException
+ {
+ HgBranchCommand command = new HgBranchCommand();
+
+ command.setLogger( getLogger() );
+
+ return (BranchScmResult) command.execute( repository, fileSet, parameters );
+ }
}
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java?rev=1061024&r1=1061023&r2=1061024&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/HgCommandConstants.java Wed Jan 19 21:54:37 2011
@@ -59,7 +59,12 @@ public class HgCommandConstants
/**
* Create a new copy of a branch. Alias get or clone
*/
- public static final String BRANCH_CMD = "clone";
+ public static final String CLONE_CMD = "clone";
+
+ /**
+ * Create a new branch in the repo.
+ */
+ public static final String BRANCH_CMD = "branch";
/**
* Commit changes into a new revision
@@ -133,5 +138,7 @@ public class HgCommandConstants
public static final String ALL_OPTION = "-A";
+ public static final String NEW_BRANCH_OPTION = "--new-branch";
+
}
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/branch/HgBranchCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/branch/HgBranchCommand.java?rev=1061024&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/branch/HgBranchCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/branch/HgBranchCommand.java Wed Jan 19 21:54:37 2011
@@ -0,0 +1,173 @@
+package org.apache.maven.scm.provider.hg.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 java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.scm.ScmBranchParameters;
+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.ScmResult;
+import org.apache.maven.scm.command.Command;
+import org.apache.maven.scm.command.branch.AbstractBranchCommand;
+import org.apache.maven.scm.command.branch.BranchScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.hg.HgUtils;
+import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
+import org.apache.maven.scm.provider.hg.command.HgConsumer;
+import org.apache.maven.scm.provider.hg.command.inventory.HgListConsumer;
+import org.apache.maven.scm.provider.hg.repository.HgScmProviderRepository;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * Branch. Mercurial has weird branches. After a branch is created, it must be committed to the server, otherwise
+ * the branch does not exist (yet) in the repository.
+ *
+ * @author Henning Schmiedehausen
+ * @version $Id$
+ */
+public class HgBranchCommand
+ extends AbstractBranchCommand
+ implements Command
+{
+
+ protected ScmResult executeBranchCommand( ScmProviderRepository scmProviderRepository, ScmFileSet fileSet, String branch,
+ String message )
+ throws ScmException
+ {
+ return executeBranchCommand( scmProviderRepository, fileSet, branch, new ScmBranchParameters( message ) );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ protected ScmResult executeBranchCommand( ScmProviderRepository scmProviderRepository, ScmFileSet fileSet, String branch,
+ ScmBranchParameters scmBranchParameters )
+ throws ScmException
+ {
+
+ if ( StringUtils.isBlank( branch ) )
+ {
+ throw new ScmException( "branch must be specified" );
+ }
+
+ if ( !fileSet.getFileList().isEmpty() )
+ {
+ throw new ScmException( "This provider doesn't support branchging subsets of a directory" );
+ }
+
+ File workingDir = fileSet.getBasedir();
+
+ // build the command
+ String[] branchCmd =
+ new String[]{ HgCommandConstants.BRANCH_CMD, branch };
+
+ // keep the command about in string form for reporting
+ ;
+ HgConsumer branchConsumer = new HgConsumer( getLogger() ) {
+ public void doConsume( ScmFileStatus status, String trimmedLine )
+ {
+ }
+ };
+
+ ScmResult result = HgUtils.execute( branchConsumer, getLogger(), workingDir, branchCmd );
+ HgScmProviderRepository repository = (HgScmProviderRepository) scmProviderRepository;
+
+ if ( !result.isSuccess() )
+ {
+ throw new ScmException( "Error while executing command " + joinCmd( branchCmd ) );
+ }
+
+ // First commit.
+ String[] commitCmd = new String[]{ HgCommandConstants.COMMIT_CMD, HgCommandConstants.MESSAGE_OPTION, scmBranchParameters.getMessage() };
+
+
+ result = HgUtils.execute( new HgConsumer( getLogger() ), getLogger(), workingDir, commitCmd );
+
+ if ( !result.isSuccess() )
+ {
+ throw new ScmException( "Error while executing command " + joinCmd( commitCmd ) );
+ }
+
+ // now push, if we should.
+
+ if ( repository.isPushChanges() )
+ {
+ if ( !repository.getURI().equals( fileSet.getBasedir().getAbsolutePath() ) )
+ {
+
+ String[] pushCmd = new String[] {
+ HgCommandConstants.PUSH_CMD,
+ HgCommandConstants.NEW_BRANCH_OPTION,
+ repository.getURI()
+ };
+
+ result = HgUtils.execute( new HgConsumer( getLogger() ), getLogger(), fileSet.getBasedir(), pushCmd );
+
+ if ( !result.isSuccess() )
+ {
+ throw new ScmException( "Error while executing command " + joinCmd( pushCmd ) );
+ }
+ }
+ }
+
+ // do an inventory to return the files branched (all of them)
+ String[] listCmd = new String[]{ HgCommandConstants.INVENTORY_CMD };
+ HgListConsumer listconsumer = new HgListConsumer( getLogger() );
+
+ result = HgUtils.execute( listconsumer, getLogger(), fileSet.getBasedir(), listCmd );
+
+ if ( !result.isSuccess() )
+ {
+ throw new ScmException( "Error while executing command " + joinCmd(listCmd) );
+ }
+
+ List<ScmFile> files = listconsumer.getFiles();
+ List<ScmFile> fileList = new ArrayList<ScmFile>();
+ for ( Iterator<ScmFile> i = files.iterator(); i.hasNext(); )
+ {
+ ScmFile f = i.next();
+
+ fileList.add( new ScmFile( f.getPath(), ScmFileStatus.TAGGED ) );
+ }
+
+ return new BranchScmResult( fileList, result );
+ }
+
+ private String joinCmd( String[] cmd )
+ {
+ StringBuilder result = new StringBuilder();
+ for ( int i = 0; i < cmd.length; i++ )
+ {
+ String s = cmd[i];
+ result.append( s );
+ if ( i < cmd.length - 1 )
+ {
+ result.append( " " );
+ }
+ }
+ return result.toString();
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/branch/HgBranchCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/branch/HgBranchCommand.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java?rev=1061024&r1=1061023&r2=1061024&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/checkout/HgCheckOutCommand.java Wed Jan 19 21:54:37 2011
@@ -70,7 +70,7 @@ public class HgCheckOutCommand
// Do the actual checkout
String[] checkoutCmd = new String[] {
- HgCommandConstants.BRANCH_CMD,
+ HgCommandConstants.CLONE_CMD,
HgCommandConstants.REVISION_OPTION,
scmVersion != null && !StringUtils.isEmpty( scmVersion.getName() ) ? scmVersion.getName() : "tip",
url,
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/diff/HgDiffCommandTckTest.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/diff/HgDiffCommandTckTest.java?rev=1061024&r1=1061023&r2=1061024&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/diff/HgDiffCommandTckTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-hg/src/test/java/org/apache/maven/scm/provider/hg/command/diff/HgDiffCommandTckTest.java Wed Jan 19 21:54:37 2011
@@ -19,7 +19,12 @@ package org.apache.maven.scm.provider.hg
* under the License.
*/
-import org.apache.maven.scm.ChangeFile;
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeSet;
+
import org.apache.maven.scm.ScmFile;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmTestCase;
@@ -30,12 +35,6 @@ import org.apache.maven.scm.provider.hg.
import org.apache.maven.scm.repository.ScmRepository;
import org.apache.maven.scm.tck.command.diff.DiffCommandTckTest;
-import java.io.File;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeSet;
-
public class HgDiffCommandTckTest
extends DiffCommandTckTest
{