ScmVersion endVersion )
throws ScmException
{
PerforceScmProviderRepository p4repo = (PerforceScmProviderRepository) repo;
String clientspec = PerforceScmProvider.getClientspecName( getLogger(), p4repo, fileSet.getBasedir() );
Commandline cl = createCommandLine( p4repo, fileSet.getBasedir(), clientspec, null, startDate, endDate, startVersion, endVersion );
String location = PerforceScmProvider.getRepoPath( getLogger(), p4repo, fileSet.getBasedir() );
PerforceChangesConsumer consumer =
new PerforceChangesConsumer( getLogger() );
try
{
if ( getLogger().isDebugEnabled() )
{
getLogger().debug( PerforceScmProvider.clean( "Executing " + cl.toString() ) );
}
CommandLineUtils.StringStreamConsumer err = new CommandLineUtils.StringStreamConsumer();
int exitCode = CommandLineUtils.executeCommandLine( cl, consumer, err );
if ( exitCode != 0 )
{
String cmdLine = CommandLineUtils.toString( cl.getCommandline() );
StringBuilder msg = new StringBuilder( "Exit code: " + exitCode + " - " + err.getOutput() );
msg.append( '\n' );
msg.append( "Command line was:" + cmdLine );
throw new CommandLineException( msg.toString() );
}
}
catch ( CommandLineException e )
{
if ( getLogger().isErrorEnabled() )
{
getLogger().error( "CommandLineException " + e.getMessage(), e );
}
}
List<String> changes = consumer.getChanges();
cl = PerforceScmProvider.createP4Command( p4repo, fileSet.getBasedir() );
cl.createArg().setValue( "describe" );
cl.createArg().setValue( "-s" );
for( String change : changes )
{
cl.createArg().setValue( change );
}
PerforceDescribeConsumer describeConsumer =
new PerforceDescribeConsumer( location, datePattern, getLogger() );
try
{
if ( getLogger().isDebugEnabled() )
{
getLogger().debug( PerforceScmProvider.clean( "Executing " + cl.toString() ) );
}
CommandLineUtils.StringStreamConsumer err = new CommandLineUtils.StringStreamConsumer();
int exitCode = CommandLineUtils.executeCommandLine( cl, describeConsumer, err );
if ( exitCode != 0 )
{
String cmdLine = CommandLineUtils.toString( cl.getCommandline() );
StringBuilder msg = new StringBuilder( "Exit code: " + exitCode + " - " + err.getOutput() );
msg.append( '\n' );
msg.append( "Command line was:" + cmdLine );
throw new CommandLineException( msg.toString() );
}
}
catch ( CommandLineException e )
{
if ( getLogger().isErrorEnabled() )
{
getLogger().error( "CommandLineException " + e.getMessage(), e );
}
}
ChangeLogSet cls = new ChangeLogSet( describeConsumer.getModifications(), null, null );
cls.setStartVersion(startVersion);
cls.setEndVersion(endVersion);
return new ChangeLogScmResult( cl.toString(), cls );
}