Author: vsiveton Date: Tue Sep 2 04:23:31 2008 New Revision: 691200 URL: http://svn.apache.org/viewvc?rev=691200&view=rev Log: SCM-357: UCM config_spec are not managed correctly Submitted by: Tim Delesio
o patch applied Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepository.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommand.java?rev=691200&r1=691199&r2=691200&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/command/checkout/ClearCaseCheckOutCommand.java Tue Sep 2 04:23:31 2008 @@ -118,7 +118,15 @@ { // write config spec to temp file - String configSpec = createConfigSpec( repo.getLoadDirectory(), version ); + String configSpec; + if ( repo.hasElements() ) + { + configSpec = createConfigSpec( repo.getLoadDirectory(), version ); + } + else + { + configSpec = createConfigSpec( repo.getLoadDirectory(), repo.getElementName(), version ); + } getLogger().info( "Created config spec for view '" + viewName + "':\n" + configSpec ); configSpecLocation = writeTemporaryConfigSpecFile( configSpec, viewName ); @@ -213,6 +221,25 @@ { configSpec.append( "element * " + version.getName() + "\n" ); configSpec.append( "element -directory * /main/LATEST\n" ); + // configSpec.append( "element * /main/QualityControl_INT/RAD7_Migration/LATEST\n" ); + } + else + { + configSpec.append( "element * /main/LATEST\n" ); + } + configSpec.append( "load " + loadDirectory + "\n" ); + return configSpec.toString(); + } + + protected String createConfigSpec( String loadDirectory, String elementName, ScmVersion version ) + { + // create config spec + StringBuffer configSpec = new StringBuffer(); + configSpec.append( "element * CHECKEDOUT\n" ); + if ( version != null && StringUtils.isNotEmpty( version.getName() ) ) + { + configSpec.append( "element * " + version.getName() + "\n" ); + configSpec.append( "element * " + elementName + "\n" ); } else { Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepository.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepository.java?rev=691200&r1=691199&r2=691200&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepository.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/main/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepository.java Tue Sep 2 04:23:31 2008 @@ -90,6 +90,11 @@ private Settings settings; /** + * Describe the Element Name + */ + private String elementName; + + /** * Define the flag used in the clearcase-settings.xml when using ClearCaseLT */ public static final String CLEARCASE_LT = "LT"; @@ -193,6 +198,7 @@ throws UnknownHostException, MalformedURLException { int tokenNumber = tokenizer.countTokens(); + String directory; if ( tokenNumber <= 2 ) { throw new MalformedURLException( "ClearCaseUCM need more parameters. Expected url format : " @@ -208,15 +214,43 @@ vobName = tokenizer.nextToken(); streamName = tokenizer.nextToken(); } + else if ( tokenNumber == 4 ) + { + String[] tokens = new String[4]; + tokens[0] = tokenizer.nextToken(); + tokens[1] = tokenizer.nextToken(); + tokens[2] = tokenizer.nextToken(); + tokens[3] = tokenizer.nextToken(); + + if ( tokens[3].startsWith( "/main/" ) ) + { + viewName = getDefaultViewName(); + configSpecString = tokens[0]; + vobName = tokens[1]; + streamName = tokens[2]; + elementName = tokens[3]; + } + else + { + viewName = tokens[0]; + viewNameGivenByUser = true; + configSpecString = tokens[1]; + vobName = tokens[2]; + streamName = tokens[3]; + } + } else { configSpecString = checkViewName( tokenizer ); vobName = tokenizer.nextToken(); streamName = tokenizer.nextToken(); - checkUnexpectedParameter( tokenizer, tokenNumber, 4 ); + elementName = tokenizer.nextToken(); + checkUnexpectedParameter( tokenizer, tokenNumber, 5 ); } + logger.info( "viewName = '" + viewName + "' ; configSpec = '" + configSpecString + "' ; vobName = '" - + vobName + "' ; streamName = '" + streamName + "'" ); + + vobName + "' ; streamName = '" + streamName + "' ; elementName = '" + elementName + "'" ); + return configSpecString; } @@ -232,6 +266,7 @@ { viewName = getDefaultViewName(); } + return tokenizer.nextToken(); } @@ -344,4 +379,19 @@ { return vobName; } + + public String getElementName() + { + return elementName; + } + + public boolean hasElements() + { + if ( elementName == null ) + { + return false; + } + + return true; + } } Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java?rev=691200&r1=691199&r2=691200&view=diff ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-clearcase/src/test/java/org/apache/maven/scm/provider/clearcase/repository/ClearCaseScmProviderRepositoryTest.java Tue Sep 2 04:23:31 2008 @@ -120,8 +120,8 @@ assertEquals( "/VOB/some/dir", repository.getLoadDirectory() ); assertNull(repository.getStreamName()); assertNull(repository.getVobName()); - } - + } + public void testParsingUrlClearCaseUCMWithPipe() throws ScmRepositoryException { @@ -140,7 +140,7 @@ assertEquals(streamName, repository.getStreamName()); assertEquals(vobName, repository.getVobName()); } - + public void testParsingUrlClearCaseUCMWithoutViewnameWithColon() throws ScmRepositoryException { @@ -158,7 +158,28 @@ assertEquals(streamName, repository.getStreamName()); assertEquals(vobName, repository.getVobName()); } - + + public void testParsingUrlClearCaseUCMWithoutViewnameWithColonAndElement() + throws ScmRepositoryException + { + Settings settings = new Settings(); + settings.setClearcaseType( ClearCaseScmProviderRepository.CLEARCASE_UCM ); + String delimiter = ":"; + String configSpecPath = "//myserver/ClearCase/ConfigSpecs/mymodule.txt"; + String vobName = "pvob_alliance"; + String streamName = "INT_COMMUN_V1.0"; + String elementName = "/main/element/LATEST"; + String url = configSpecPath + delimiter + vobName + delimiter + streamName + delimiter + elementName; + ClearCaseScmProviderRepository repository = + new ClearCaseScmProviderRepository( new DefaultLog(), url, settings ); + assertEquals( new File( configSpecPath ).getPath(), repository.getConfigSpec().getPath() ); + assertNotNull( repository.getViewName( "bla" ) ); + assertNull( repository.getLoadDirectory() ); + assertEquals( streamName, repository.getStreamName() ); + assertEquals( vobName, repository.getVobName() ); + assertEquals( elementName, repository.getElementName() ); + } + public void testParsingUrlClearCaseUCMAutoConfig() throws ScmRepositoryException { @@ -177,4 +198,26 @@ assertEquals(streamName, repository.getStreamName()); assertEquals(vobName, repository.getVobName()); } + + public void testParsingUrlClearCaseUCMAutoConfigWithElement() + throws ScmRepositoryException + { + Settings settings = new Settings(); + settings.setClearcaseType( ClearCaseScmProviderRepository.CLEARCASE_UCM ); + String delimiter = "|"; + String loadPath = "/ua/sub/project"; + String vobName = "pvob_alliance"; + String streamName = "INT_COMMUN_V1.0"; + String elementName = "/main/element/LATEST"; + String url = "load " + loadPath + delimiter + vobName + delimiter + streamName + delimiter + elementName; + ClearCaseScmProviderRepository repository = + new ClearCaseScmProviderRepository( new DefaultLog(), url, settings ); + assertNull( repository.getConfigSpec() ); + assertTrue( repository.isAutoConfigSpec() ); + assertNotNull( repository.getViewName( "bla" ) ); + assertEquals( loadPath, repository.getLoadDirectory() ); + assertEquals( streamName, repository.getStreamName() ); + assertEquals( vobName, repository.getVobName() ); + assertEquals( elementName, repository.getElementName() ); + } }