Author: mperham Date: Tue Apr 24 15:46:55 2007 New Revision: 532125 URL: http://svn.apache.org/viewvc?view=rev&rev=532125 Log: PR: SCM-301 Fixes for Perforce provider in Continuum Submitted by: Raphael PETIT
Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/tag/PerforceTagCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommandTest.java Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java?view=diff&rev=532125&r1=532124&r2=532125 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/PerforceScmProvider.java Tue Apr 24 15:46:55 2007 @@ -19,6 +19,7 @@ * under the License. */ + import org.apache.maven.scm.CommandParameters; import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFileSet; @@ -56,6 +57,8 @@ import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.cli.Commandline; +import sun.security.action.GetLongAction; + import java.io.BufferedReader; import java.io.File; import java.io.IOException; @@ -336,10 +339,10 @@ Created by maven-scm-provider-perforce */ - public static String createClientspec( PerforceScmProviderRepository repo, File workDir, String repoPath ) + public static String createClientspec(ScmLogger logger, PerforceScmProviderRepository repo, File workDir, String repoPath ) { - String clientspecName = getClientspecName( repo, workDir ); - String userName = getUsername( repo ); + String clientspecName = getClientspecName( logger, repo, workDir ); + String userName = getUsername( logger, repo ); String rootDir; try @@ -367,14 +370,21 @@ public static final String DEFAULT_CLIENTSPEC_PROPERTY = "maven.scm.perforce.clientspec.name"; - public static String getClientspecName( PerforceScmProviderRepository repo, File workDir ) + public static String getClientspecName( ScmLogger logger,PerforceScmProviderRepository repo, File workDir ) { - return System.getProperty( DEFAULT_CLIENTSPEC_PROPERTY, generateDefaultClientspecName( repo, workDir ) ); + String def = generateDefaultClientspecName( logger, repo, workDir ); + // until someone put clearProperty in DefaultContinuumScm.getScmRepository( Project , boolean ) + String l = System.getProperty( DEFAULT_CLIENTSPEC_PROPERTY, def ); + if ( l == null || "".equals( l.trim() ) ) + { + return def; + } + return l; } - private static String generateDefaultClientspecName( PerforceScmProviderRepository repo, File workDir ) + private static String generateDefaultClientspecName(ScmLogger logger, PerforceScmProviderRepository repo, File workDir ) { - String username = getUsername( repo ); + String username = getUsername( logger, repo ); String hostname; String path; try @@ -394,9 +404,9 @@ return username + "-" + hostname + "-MavenSCM-" + path; } - private static String getUsername( PerforceScmProviderRepository repo ) + private static String getUsername( ScmLogger logger, PerforceScmProviderRepository repo ) { - String username = PerforceInfoCommand.getInfo( null, repo ).getEntry( "User name" ); + String username = PerforceInfoCommand.getInfo( logger, repo ).getEntry( "User name" ); if ( username == null ) { // os user != perforce user @@ -440,7 +450,12 @@ if ( pom.exists() ) { loc = where.getDepotLocation( pom ); - if ( loc.endsWith( "/pom.xml" ) ) + if ( loc == null ) + { + loc = repo.getPath(); + log.debug( "cannot find depot => using " + loc ); + } + else if ( loc.endsWith( "/pom.xml" ) ) { loc = loc.substring( 0, loc.length() - "/pom.xml".length() ); log.debug( "Actual POM location: " + loc ); @@ -497,4 +512,4 @@ return live.booleanValue(); } -} \ No newline at end of file +} Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java?view=diff&rev=532125&r1=532124&r2=532125 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommand.java Tue Apr 24 15:46:55 2007 @@ -24,6 +24,7 @@ import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.ScmResult; import org.apache.maven.scm.command.AbstractCommand; +import org.apache.maven.scm.log.ScmLogger; import org.apache.maven.scm.provider.ScmProviderRepository; import org.apache.maven.scm.provider.perforce.PerforceScmProvider; import org.apache.maven.scm.provider.perforce.repository.PerforceScmProviderRepository; @@ -66,9 +67,9 @@ private Map entries = null; - public static PerforceInfoCommand getInfo( AbstractCommand cmd, PerforceScmProviderRepository repo ) + public static PerforceInfoCommand getInfo( ScmLogger logger, PerforceScmProviderRepository repo ) { - return getSingleton( cmd, repo ); + return getSingleton( logger, repo ); } public String getEntry( String key ) @@ -76,15 +77,15 @@ return (String) entries.get( key ); } - private static synchronized PerforceInfoCommand getSingleton( AbstractCommand cmd, + private static synchronized PerforceInfoCommand getSingleton( ScmLogger logger, PerforceScmProviderRepository repo ) { if ( singleton == null ) { PerforceInfoCommand pic = new PerforceInfoCommand(); - if ( cmd != null ) + if ( logger != null ) { - pic.setLogger( cmd.getLogger() ); + pic.setLogger( logger ); } try { @@ -108,15 +109,11 @@ return null; } - boolean log = getLogger() != null; try { Commandline command = PerforceScmProvider.createP4Command( (PerforceScmProviderRepository) repo, null ); command.createArgument().setValue( "info" ); - if ( log ) - { - getLogger().debug( PerforceScmProvider.clean( "Executing: " + command.toString() ) ); - } + getLogger().debug( PerforceScmProvider.clean( "Executing: " + command.toString() ) ); Process proc = command.execute(); BufferedReader br = new BufferedReader( new InputStreamReader( proc.getInputStream() ) ); String line; @@ -126,11 +123,22 @@ int idx = line.indexOf( ':' ); if ( idx == -1 ) { - throw new IllegalStateException( "Unexpected results from 'p4 info' command: " + line ); + if ( line.indexOf( "Client unknown." ) == -1 ) + { + throw new IllegalStateException( "Unexpected results from 'p4 info' command: " + line ); + } + else + { + getLogger().debug( "Cannot find client."); + entries.put( "Client root", "" ); + } + } + else + { + String key = line.substring( 0, idx ); + String value = line.substring( idx + 1 ).trim(); + entries.put( key, value ); } - String key = line.substring( 0, idx ); - String value = line.substring( idx + 1 ).trim(); - entries.put( key, value ); } } catch ( CommandLineException e ) Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java?view=diff&rev=532125&r1=532124&r2=532125 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/changelog/PerforceChangeLogCommand.java Tue Apr 24 15:46:55 2007 @@ -53,13 +53,13 @@ String datePattern ) throws ScmException { - if ( branch != null || StringUtils.isNotEmpty( branch.getName() ) ) + if ( branch != null && StringUtils.isNotEmpty( branch.getName() ) ) { throw new ScmException( "This SCM doesn't support branches." ); } PerforceScmProviderRepository p4repo = (PerforceScmProviderRepository) repo; - String clientspec = PerforceScmProvider.getClientspecName( p4repo, fileSet.getBasedir() ); + String clientspec = PerforceScmProvider.getClientspecName( getLogger(), p4repo, fileSet.getBasedir() ); Commandline cl = createCommandLine( p4repo, fileSet.getBasedir(), clientspec ); String location = PerforceScmProvider.getRepoPath( getLogger(), p4repo, fileSet.getBasedir() ); Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java?view=diff&rev=532125&r1=532124&r2=532125 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/checkout/PerforceCheckOutCommand.java Tue Apr 24 15:46:55 2007 @@ -69,7 +69,7 @@ actualLocation = PerforceScmProvider.getRepoPath( getLogger(), prepo, files.getBasedir() ); - String specname = PerforceScmProvider.getClientspecName( prepo, workingDirectory ); + String specname = PerforceScmProvider.getClientspecName(getLogger(), prepo, workingDirectory ); PerforceCheckOutConsumer consumer = new PerforceCheckOutConsumer( specname, actualLocation ); getLogger().info( "Checkout working directory: " + workingDirectory ); Commandline cl = null; @@ -88,7 +88,7 @@ // Write clientspec to STDIN OutputStream out = proc.getOutputStream(); DataOutputStream dos = new DataOutputStream( out ); - String client = PerforceScmProvider.createClientspec( prepo, workingDirectory, actualLocation ); + String client = PerforceScmProvider.createClientspec(getLogger(), prepo, workingDirectory, actualLocation ); getLogger().debug( "Updating clientspec:\n" + client ); dos.write( client.getBytes() ); dos.close(); Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/tag/PerforceTagCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/tag/PerforceTagCommand.java?view=diff&rev=532125&r1=532124&r2=532125 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/tag/PerforceTagCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/main/java/org/apache/maven/scm/provider/perforce/command/tag/PerforceTagCommand.java Tue Apr 24 15:46:55 2007 @@ -194,10 +194,10 @@ { // I have no idea why but Perforce doesn't default the owner to the current user. // Since the user is not explicitly set, we use 'p4 info' to query for the current user. - username = PerforceInfoCommand.getInfo( this, repo ).getEntry( "User name" ); + username = PerforceInfoCommand.getInfo( getLogger(), repo ).getEntry( "User name" ); } buf.append( "Owner: " ).append( username ).append( NEWLINE ); buf.append( "Options: " ).append( lock ? "" : "un" ).append( "locked" ).append( NEWLINE ); return buf.toString(); } -} \ No newline at end of file +} Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommandTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommandTest.java?view=diff&rev=532125&r1=532124&r2=532125 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommandTest.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-perforce/src/test/java/org/apache/maven/scm/provider/perforce/command/PerforceInfoCommandTest.java Tue Apr 24 15:46:55 2007 @@ -45,11 +45,11 @@ if ( PerforceScmProvider.isLive() ) { - assertNotNull( PerforceInfoCommand.getInfo( cmd, p4Repo ).getEntry( "User name" ) ); - assertNotNull( PerforceInfoCommand.getInfo( cmd, p4Repo ).getEntry( "Client root" ) ); - assertNotNull( PerforceInfoCommand.getInfo( cmd, p4Repo ).getEntry( "Client name" ) ); - assertNotNull( PerforceInfoCommand.getInfo( cmd, p4Repo ).getEntry( "Client host" ) ); - assertNull( PerforceInfoCommand.getInfo( cmd, p4Repo ).getEntry( "foobar" ) ); + assertNotNull( PerforceInfoCommand.getInfo( prov.getLogger(), p4Repo ).getEntry( "User name" ) ); + assertNotNull( PerforceInfoCommand.getInfo( prov.getLogger(), p4Repo ).getEntry( "Client root" ) ); + assertNotNull( PerforceInfoCommand.getInfo( prov.getLogger(), p4Repo ).getEntry( "Client name" ) ); + assertNotNull( PerforceInfoCommand.getInfo( prov.getLogger(), p4Repo ).getEntry( "Client host" ) ); + assertNull( PerforceInfoCommand.getInfo( prov.getLogger(), p4Repo ).getEntry( "foobar" ) ); } } }