[ 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