You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Sebastian Annies (JIRA)" <ji...@codehaus.org> on 2007/08/21 14:39:48 UTC
[jira] Issue Comment Edited: (CONTINUUM-1402) Syncing with Perforce
on Linux/Unix/Bash fails
[ http://jira.codehaus.org/browse/CONTINUUM-1402?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_105305 ]
Sebastian Annies edited comment on CONTINUUM-1402 at 8/21/07 7:39 AM:
----------------------------------------------------------------------
MORE READABLE HERE:
When a client is created it is named:
E.g. {{sannies-sojus-MavenSCM-\opt\continuum-1.1-beta-3-SNAPSHOT\apps\continuum\webapp\WEB-INF\working-directory\6}}
that is ok, but now comes the sync command and uses following commandline
{{/bin/bash c "p4 -d /opt/continuum-1.1-beta-3-SNAPSHOT/apps/continuum/webapp/WEB-INF/working-directory/1 -cbackground-sojus-MavenSCM\opt\continuum-1.1-beta-3-SNAPSHOT\apps\continuum\webapp\WEB-INF\working-directory\1 sync"}}
The Bash now removes the backslashes in the client name! The result is that the client is not existent and perforce returns with an error.
I think continuum does everything allright but we need the ticket here to be reminded to switch to a new plexus-utils or maven-scm if it is fixed there.
The Problem starts in 'PerforceCheckOutCommand':
{{public static Commandline createCommandLine( PerforceScmProviderRepository repo, File workingDirectory,
ScmVersion version, String specname )
{
Commandline command = PerforceScmProvider.createP4Command( repo, workingDirectory );
{color.red}
command.createArgument().setValue( "-c" + specname );{color}
command.createArgument().setValue( "sync" );
// Use a simple heuristic to determine if we should use the Force flag
// on sync. Forcing sync is a HUGE performance hit but is required in
// rare instances where source is somehow deleted. If the target
// directory is completely empty, assume a force is required. If
// not empty, we assume a previous checkout was already done and a normal
// sync will suffice.
// SCM-110
String[] files = workingDirectory.list();
if ( files == null || files.length == 0 )
{
// We need to force so checkout to an empty directory will work. command.createArgument().setValue( "-f" ); }
// Not sure what to do here. I'm unclear whether we should be
// sync'ing each file individually to the label or just sync the
// entire contents of the workingDir. I'm going to assume the
// latter until the exact semantics are clearer.
if ( version != null && StringUtils.isNotEmpty( version.getName() ) )
{ command.createArgument().setValue( "@" + version.getName() ); }
}
}}
The {{specname}} contains the backslashes and is these are neither escaped nor quoted! Hmm ... Is that a job that the CommandLine should handle? I think so!
The next thing I will do is to file an issue at plexus-utils and link the issues.
was:
MORE READABLE HERE:
When a client is created it is named:
E.g. {{sannies-sojus-MavenSCM-\opt\continuum-1.1-beta-3-SNAPSHOT\apps\continuum\webapp\WEB-INF\working-directory\6}}
that is ok, but now comes the sync command and uses following commandline
{{/bin/bash c "p4 -d /opt/continuum-1.1-beta-3-SNAPSHOT/apps/continuum/webapp/WEB-INF/working-directory/1 -cbackground-sojus-MavenSCM\opt\continuum-1.1-beta-3-SNAPSHOT\apps\continuum\webapp\WEB-INF\working-directory\1 sync"}}
The Bash now removes the backslashes in the client name! The result is that the client is not existent and perforce returns with an error.
I think continuum does everything allright but we need the ticket here to be reminded to switch to a new plexus-utils or maven-scm if it is fixed there.
The Problem starts in 'PerforceCheckOutCommand':
{{
public static Commandline createCommandLine( PerforceScmProviderRepository repo, File workingDirectory,
ScmVersion version, String specname )
{
Commandline command = PerforceScmProvider.createP4Command( repo, workingDirectory );
{color.red}
command.createArgument().setValue( "-c" + specname );{color}
command.createArgument().setValue( "sync" );
// Use a simple heuristic to determine if we should use the Force flag
// on sync. Forcing sync is a HUGE performance hit but is required in
// rare instances where source is somehow deleted. If the target
// directory is completely empty, assume a force is required. If
// not empty, we assume a previous checkout was already done and a normal
// sync will suffice.
// SCM-110
String[] files = workingDirectory.list();
if ( files == null || files.length == 0 )
{
// We need to force so checkout to an empty directory will work. command.createArgument().setValue( "-f" ); }
// Not sure what to do here. I'm unclear whether we should be
// sync'ing each file individually to the label or just sync the
// entire contents of the workingDir. I'm going to assume the
// latter until the exact semantics are clearer.
if ( version != null && StringUtils.isNotEmpty( version.getName() ) )
{ command.createArgument().setValue( "@" + version.getName() ); }
}
}}
The {{specname }} contains the backslashes and is these are neither escaped nor quoted! Hmm ... Is that a job that the CommandLine should handle? I think so!
The next thing I will do is to file an issue at plexus-utils and link the issues.
> Syncing with Perforce on Linux/Unix/Bash fails
> ----------------------------------------------
>
> Key: CONTINUUM-1402
> URL: http://jira.codehaus.org/browse/CONTINUUM-1402
> Project: Continuum
> Issue Type: Bug
> Components: Integration - Maven 2, SCM
> Affects Versions: 1.1-beta-2
> Environment: Bash
> Reporter: Sebastian Annies
> Priority: Critical
>
> When a client is created it is named:
> E.g.{{monospaced}} sannies-sojus-MavenSCM-\opt\continuum-1.1-beta-3-SNAPSHOT\apps\continuum\webapp\WEB-INF\working-directory\6{{monospaced}}
> that is ok, but now comes the sync command and uses following commandline
> {{monospaced}}
> /bin/bash -c "p4 -d /opt/continuum-1.1-beta-3-SNAPSHOT/apps/continuum/webapp/WEB-INF/working-directory/1 -cbackground-sojus-MavenSCM-\opt\continuum-1.1-beta-3-SNAPSHOT\apps\continuum\webapp\WEB-INF\working-directory\1 sync"
> {{monospaced}}
> The Bash now removes the backslashes in the client name! The result is that the client is not existent and perforce returns with an error.
> I think continuum does everything allright but we need the ticket here to be reminded to switch to a new plexus-utils or maven-scm if it is fixed there.
> The Problem starts in 'PerforceCheckOutCommand':
> {{monospaced}}
> public static Commandline createCommandLine( PerforceScmProviderRepository repo, File workingDirectory,
> ScmVersion version, String specname )
> {
> Commandline command = PerforceScmProvider.createP4Command( repo, workingDirectory );
> {color:red}
> command.createArgument().setValue( "-c" + specname );
> {color}
> command.createArgument().setValue( "sync" );
> // Use a simple heuristic to determine if we should use the Force flag
> // on sync. Forcing sync is a HUGE performance hit but is required in
> // rare instances where source is somehow deleted. If the target
> // directory is completely empty, assume a force is required. If
> // not empty, we assume a previous checkout was already done and a normal
> // sync will suffice.
> // SCM-110
> String[] files = workingDirectory.list();
> if ( files == null || files.length == 0 )
> {
> // We need to force so checkout to an empty directory will work.
> command.createArgument().setValue( "-f" );
> }
> // Not sure what to do here. I'm unclear whether we should be
> // sync'ing each file individually to the label or just sync the
> // entire contents of the workingDir. I'm going to assume the
> // latter until the exact semantics are clearer.
> if ( version != null && StringUtils.isNotEmpty( version.getName() ) )
> {
> command.createArgument().setValue( "@" + version.getName() );
> }
> return command;
> {{monospaced}}
> The {{monospaced}}specname {{monospaced}} contains the backslashes and is these are neither escaped nor quoted! Hmm ... Is that a job that the CommandLine should handle? I think so!
> The next thing I will do is to file an issue at plexus-utils and link the issues.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira