add test case for MRELEASE-875
Project: http://git-wip-us.apache.org/repos/asf/maven-scm/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-scm/commit/bea863c4 Tree: http://git-wip-us.apache.org/repos/asf/maven-scm/tree/bea863c4 Diff: http://git-wip-us.apache.org/repos/asf/maven-scm/diff/bea863c4 Branch: refs/heads/MRELEASE-875 Commit: bea863c42c525e90daa818765bbf38a9d1d4420d Parents: 0128678 Author: imod <[email protected]> Authored: Sun Jul 20 13:06:17 2014 +0200 Committer: imod <[email protected]> Committed: Sun Jul 20 13:07:54 2014 +0200 ---------------------------------------------------------------------- .../provider/git/AbstractGitScmProvider.java | 1 + ...itExeCheckInCommandNotInRepoRootTckTest.java | 232 ++++++++++++++++++ ...GitCheckInCommandCommitterAuthorTckTest.java | 2 +- .../JGitCheckInCommandNotInRepoRootTckTest.java | 245 +++++++++++++++++++ .../command/checkin/CheckInCommandTckTest.java | 6 +- 5 files changed, 482 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-scm/blob/bea863c4/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java ---------------------------------------------------------------------- diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java index 7451d97..85fabe6 100644 --- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java +++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-git-commons/src/main/java/org/apache/maven/scm/provider/git/AbstractGitScmProvider.java @@ -46,6 +46,7 @@ import org.apache.maven.scm.provider.AbstractScmProvider; import org.apache.maven.scm.provider.ScmProviderRepository; import org.apache.maven.scm.provider.git.command.GitCommand; import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository; +import org.apache.maven.scm.provider.git.util.GitUtil; import org.apache.maven.scm.repository.ScmRepositoryException; import org.apache.maven.scm.repository.UnknownRepositoryStructure; http://git-wip-us.apache.org/repos/asf/maven-scm/blob/bea863c4/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitExeCheckInCommandNotInRepoRootTckTest.java ---------------------------------------------------------------------- diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitExeCheckInCommandNotInRepoRootTckTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitExeCheckInCommandNotInRepoRootTckTest.java new file mode 100644 index 0000000..40b0d2e --- /dev/null +++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitExeCheckInCommandNotInRepoRootTckTest.java @@ -0,0 +1,232 @@ +package org.apache.maven.scm.provider.git.gitexe.command.checkin; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.maven.scm.ScmFile; +import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.ScmFileStatus; +import org.apache.maven.scm.command.add.AddScmResult; +import org.apache.maven.scm.command.checkin.CheckInScmResult; +import org.apache.maven.scm.command.checkout.CheckOutScmResult; +import org.apache.maven.scm.provider.git.GitScmTestUtils; +import org.apache.maven.scm.provider.git.command.checkin.GitCheckInCommandTckTest; +import org.codehaus.plexus.PlexusTestCase; + +/** + * Tests for MRELEASE-875 + * + * @author Dominik Bartholdi (imod) + */ +public class GitExeCheckInCommandNotInRepoRootTckTest + extends GitCheckInCommandTckTest +{ + + /** + * {@inheritDoc} + */ + public String getScmUrl() + throws Exception + { + return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "git" ); + } + + private File getSubWorkingDir() + { + return new File( getWorkingCopy(), "sub1/sub2/" ); + } + + public void testCheckInCommandTest() + throws Exception + { + // Make sure that the correct files was checked out + File fooJava = new File( getWorkingCopy(), "sub1/sub2/src/main/java/Foo.java" ); + + File barJava = new File( getWorkingCopy(), "sub1/sub2/src/main/java/Bar.java" ); + + File readmeTxt = new File( getWorkingCopy(), "sub1/sub2/readme.txt" ); + + assertFalse( "check Foo.java doesn't yet exist", fooJava.canRead() ); + + assertFalse( "check Bar.java doesn't yet exist", barJava.canRead() ); + + assertTrue( "check can read readme.txt", readmeTxt.canRead() ); + + // Change the files + createFooJava( fooJava ); + + createBarJava( barJava ); + + changeReadmeTxt( readmeTxt ); + + AddScmResult addResult = + getScmManager().add( getScmRepository(), + new ScmFileSet( getSubWorkingDir(), "src/main/java/Foo.java", null ) ); + + assertResultIsSuccess( addResult ); + + // + CheckInScmResult result = + getScmManager().checkIn( getScmRepository(), new ScmFileSet( getSubWorkingDir() ), "Commit message" ); + + assertResultIsSuccess( result ); + + List<ScmFile> files = result.getCheckedInFiles(); + + assertNotNull( files ); + + assertEquals( 2, files.size() ); + + Map<String, ScmFile> fileMap = mapFilesByPath( files ); + ScmFile file1 = fileMap.get( "sub1/sub2/src/main/java/Foo.java" ); + assertNotNull( file1 ); + assertEquals( ScmFileStatus.CHECKED_IN, file1.getStatus() ); + + ScmFile file2 = fileMap.get( "sub1/sub2/readme.txt" ); + assertNotNull( file2 ); + assertEquals( ScmFileStatus.CHECKED_IN, file2.getStatus() ); + + CheckOutScmResult checkoutResult = + getScmManager().checkOut( getScmRepository(), new ScmFileSet( getAssertionCopy() ) ); + + assertResultIsSuccess( checkoutResult ); + + fooJava = new File( getAssertionCopy(), "sub1/sub2/src/main/java/Foo.java" ); + + barJava = new File( getAssertionCopy(), "sub1/sub2/src/main/java/Bar.java" ); + + readmeTxt = new File( getAssertionCopy(), "sub1/sub2/readme.txt" ); + + assertTrue( "check can read Foo.java", fooJava.canRead() ); + + assertFalse( "check Bar.java doesn't exist", barJava.canRead() ); + + assertTrue( "check can read readme.txt", readmeTxt.canRead() ); + + assertEquals( "check readme.txt contents", "changed file", + org.codehaus.plexus.util.FileUtils.fileRead( readmeTxt ) ); + } + + public void testCheckInCommandPartialFileset() + throws Exception + { + // Make sure that the correct files was checked out + File fooJava = new File( getWorkingCopy(), "sub1/sub2/src/main/java/Foo.java" ); + + File barJava = new File( getWorkingCopy(), "sub1/sub2/src/main/java/Bar.java" ); + + File readmeTxt = new File( getWorkingCopy(), "sub1/sub2/readme.txt" ); + + assertFalse( "check Foo.java doesn't yet exist", fooJava.canRead() ); + + assertFalse( "check Bar.java doesn't yet exist", barJava.canRead() ); + + assertTrue( "check can read readme.txt", readmeTxt.canRead() ); + + // Change the files + createFooJava( fooJava ); + + createBarJava( barJava ); + + changeReadmeTxt( readmeTxt ); + + AddScmResult addResult = + getScmManager().getProviderByUrl( getScmUrl() ).add( getScmRepository(), + new ScmFileSet( getSubWorkingDir(), + "src/main/java/Foo.java", null ) ); + + assertResultIsSuccess( addResult ); + + CheckInScmResult result = + getScmManager().checkIn( getScmRepository(), new ScmFileSet( getSubWorkingDir(), "**/Foo.java", null ), + "Commit message" ); + + assertResultIsSuccess( result ); + + List<ScmFile> files = result.getCheckedInFiles(); + + assertNotNull( files ); + + assertEquals( 1, files.size() ); + + ScmFile file1 = files.get( 0 ); + + assertEquals( ScmFileStatus.CHECKED_IN, file1.getStatus() ); + + assertPath( "/test-repo/check-in/Foo.java", file1.getPath() ); + + CheckOutScmResult checkoutResult = + getScmManager().checkOut( getScmRepository(), new ScmFileSet( getAssertionCopy() ) ); + + assertResultIsSuccess( checkoutResult ); + + fooJava = new File( getAssertionCopy(), "sub1/sub2/src/main/java/Foo.java" ); + + barJava = new File( getAssertionCopy(), "sub1/sub2/src/main/java/Bar.java" ); + + readmeTxt = new File( getAssertionCopy(), "sub1/sub2/readme.txt" ); + + assertTrue( "check can read Foo.java", fooJava.canRead() ); + + assertFalse( "check Bar.java doesn't exist", barJava.canRead() ); + + assertTrue( "check can read readme.txt", readmeTxt.canRead() ); + + assertEquals( "check readme.txt contents", "/sub1/sub2/readme.txt", + org.codehaus.plexus.util.FileUtils.fileRead( readmeTxt ) ); + } + + @Override + protected List<String> getScmFileNames() + { + List<String> scmFileNames = new ArrayList<String>( 4 ); + scmFileNames.add( "/sub1/sub2/pom.xml" ); + scmFileNames.add( "/sub1/sub2/readme.txt" ); + scmFileNames.add( "/sub1/sub2/src/main/java/Application.java" ); + scmFileNames.add( "/sub1/sub2/src/test/java/Test.java" ); + return scmFileNames; + } + + @Override + public void initRepo() + throws Exception + { + GitScmTestUtils.initRepo( "src/test/resources/repoWithSubdirs/", getRepositoryRoot(), getWorkingDirectory() ); + } + + /** + * @return default location of the test read/write repository + */ + protected File getRepositoryRoot() + { + return PlexusTestCase.getTestFile( "target/scm-test/repositoryWithSubdirs" ); + } + + // @Test + // public void testCheckInWithWorkingdirNotInRepoRoot() + // throws Exception + // { + // System.out.println( "hello" ); + // } +} http://git-wip-us.apache.org/repos/asf/maven-scm/blob/bea863c4/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandCommitterAuthorTckTest.java ---------------------------------------------------------------------- diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandCommitterAuthorTckTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandCommitterAuthorTckTest.java index 10fdb85..039af7f 100644 --- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandCommitterAuthorTckTest.java +++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandCommitterAuthorTckTest.java @@ -250,7 +250,7 @@ public class JGitCheckInCommandCommitterAuthorTckTest return head; } - private void createFooJava( File fooJava ) + protected void createFooJava( File fooJava ) throws Exception { FileWriter output = new FileWriter( fooJava ); http://git-wip-us.apache.org/repos/asf/maven-scm/blob/bea863c4/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandNotInRepoRootTckTest.java ---------------------------------------------------------------------- diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandNotInRepoRootTckTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandNotInRepoRootTckTest.java new file mode 100644 index 0000000..634ecd2 --- /dev/null +++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandNotInRepoRootTckTest.java @@ -0,0 +1,245 @@ +package org.apache.maven.scm.provider.git.jgit.command.checkin; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.apache.maven.scm.ScmFile; +import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.ScmFileStatus; +import org.apache.maven.scm.command.add.AddScmResult; +import org.apache.maven.scm.command.checkin.CheckInScmResult; +import org.apache.maven.scm.command.checkout.CheckOutScmResult; +import org.apache.maven.scm.provider.git.GitScmTestUtils; +import org.apache.maven.scm.provider.git.command.checkin.GitCheckInCommandTckTest; +import org.codehaus.plexus.PlexusTestCase; +import org.eclipse.jgit.util.FileUtils; + +/** + * Test for MRELEASE-875 + * + * @author <a href="mailto:[email protected]">Mark Struberg</a> + * @author Dominik Bartholdi (imod) + */ +public class JGitCheckInCommandNotInRepoRootTckTest + extends GitCheckInCommandTckTest +{ + + /** + * {@inheritDoc} + */ + public String getScmUrl() + throws Exception + { + return GitScmTestUtils.getScmUrl( getRepositoryRoot(), "jgit" ); + } + + @Override + protected void deleteDirectory( File directory ) + throws IOException + { + if ( directory.exists() ) + { + FileUtils.delete( directory, FileUtils.RECURSIVE | FileUtils.RETRY ); + } + } + + private File getSubWorkingDir() + { + return new File( getWorkingCopy(), "sub1/sub2/" ); + } + + public void testCheckInCommandTest() + throws Exception + { + // Make sure that the correct files was checked out + File fooJava = new File( getWorkingCopy(), "sub1/sub2/src/main/java/Foo.java" ); + + File barJava = new File( getWorkingCopy(), "sub1/sub2/src/main/java/Bar.java" ); + + File readmeTxt = new File( getWorkingCopy(), "sub1/sub2/readme.txt" ); + + assertFalse( "check Foo.java doesn't yet exist", fooJava.canRead() ); + + assertFalse( "check Bar.java doesn't yet exist", barJava.canRead() ); + + assertTrue( "check can read readme.txt", readmeTxt.canRead() ); + + // Change the files + createFooJava( fooJava ); + + createBarJava( barJava ); + + changeReadmeTxt( readmeTxt ); + + AddScmResult addResult = + getScmManager().add( getScmRepository(), + new ScmFileSet( getSubWorkingDir(), "src/main/java/Foo.java", null ) ); + + assertResultIsSuccess( addResult ); + + // + CheckInScmResult result = + getScmManager().checkIn( getScmRepository(), new ScmFileSet( getSubWorkingDir() ), "Commit message" ); + + assertResultIsSuccess( result ); + + List<ScmFile> files = result.getCheckedInFiles(); + + assertNotNull( files ); + + assertEquals( 2, files.size() ); + + Map<String, ScmFile> fileMap = mapFilesByPath( files ); + ScmFile file1 = fileMap.get( "sub1/sub2/src/main/java/Foo.java" ); + assertNotNull( file1 ); + assertEquals( ScmFileStatus.CHECKED_IN, file1.getStatus() ); + + ScmFile file2 = fileMap.get( "sub1/sub2/readme.txt" ); + assertNotNull( file2 ); + assertEquals( ScmFileStatus.CHECKED_IN, file2.getStatus() ); + + CheckOutScmResult checkoutResult = + getScmManager().checkOut( getScmRepository(), new ScmFileSet( getAssertionCopy() ) ); + + assertResultIsSuccess( checkoutResult ); + + fooJava = new File( getAssertionCopy(), "sub1/sub2/src/main/java/Foo.java" ); + + barJava = new File( getAssertionCopy(), "sub1/sub2/src/main/java/Bar.java" ); + + readmeTxt = new File( getAssertionCopy(), "sub1/sub2/readme.txt" ); + + assertTrue( "check can read Foo.java", fooJava.canRead() ); + + assertFalse( "check Bar.java doesn't exist", barJava.canRead() ); + + assertTrue( "check can read readme.txt", readmeTxt.canRead() ); + + assertEquals( "check readme.txt contents", "changed file", + org.codehaus.plexus.util.FileUtils.fileRead( readmeTxt ) ); + } + + public void testCheckInCommandPartialFileset() + throws Exception + { + // Make sure that the correct files was checked out + File fooJava = new File( getWorkingCopy(), "sub1/sub2/src/main/java/Foo.java" ); + + File barJava = new File( getWorkingCopy(), "sub1/sub2/src/main/java/Bar.java" ); + + File readmeTxt = new File( getWorkingCopy(), "sub1/sub2/readme.txt" ); + + assertFalse( "check Foo.java doesn't yet exist", fooJava.canRead() ); + + assertFalse( "check Bar.java doesn't yet exist", barJava.canRead() ); + + assertTrue( "check can read readme.txt", readmeTxt.canRead() ); + + // Change the files + createFooJava( fooJava ); + + createBarJava( barJava ); + + changeReadmeTxt( readmeTxt ); + + AddScmResult addResult = + getScmManager().getProviderByUrl( getScmUrl() ).add( getScmRepository(), + new ScmFileSet( getSubWorkingDir(), + "src/main/java/Foo.java", null ) ); + + assertResultIsSuccess( addResult ); + + CheckInScmResult result = + getScmManager().checkIn( getScmRepository(), new ScmFileSet( getSubWorkingDir(), "**/Foo.java", null ), + "Commit message" ); + + assertResultIsSuccess( result ); + + List<ScmFile> files = result.getCheckedInFiles(); + + assertNotNull( files ); + + assertEquals( 1, files.size() ); + + ScmFile file1 = files.get( 0 ); + + assertEquals( ScmFileStatus.CHECKED_IN, file1.getStatus() ); + + assertPath( "/test-repo/check-in/Foo.java", file1.getPath() ); + + CheckOutScmResult checkoutResult = + getScmManager().checkOut( getScmRepository(), new ScmFileSet( getAssertionCopy() ) ); + + assertResultIsSuccess( checkoutResult ); + + fooJava = new File( getAssertionCopy(), "sub1/sub2/src/main/java/Foo.java" ); + + barJava = new File( getAssertionCopy(), "sub1/sub2/src/main/java/Bar.java" ); + + readmeTxt = new File( getAssertionCopy(), "sub1/sub2/readme.txt" ); + + assertTrue( "check can read Foo.java", fooJava.canRead() ); + + assertFalse( "check Bar.java doesn't exist", barJava.canRead() ); + + assertTrue( "check can read readme.txt", readmeTxt.canRead() ); + + assertEquals( "check readme.txt contents", "/sub1/sub2/readme.txt", + org.codehaus.plexus.util.FileUtils.fileRead( readmeTxt ) ); + } + + @Override + protected List<String> getScmFileNames() + { + List<String> scmFileNames = new ArrayList<String>( 4 ); + scmFileNames.add( "/sub1/sub2/pom.xml" ); + scmFileNames.add( "/sub1/sub2/readme.txt" ); + scmFileNames.add( "/sub1/sub2/src/main/java/Application.java" ); + scmFileNames.add( "/sub1/sub2/src/test/java/Test.java" ); + return scmFileNames; + } + + @Override + public void initRepo() + throws Exception + { + GitScmTestUtils.initRepo( "src/test/resources/repoWithSubdirs/", getRepositoryRoot(), getWorkingDirectory() ); + } + + /** + * @return default location of the test read/write repository + */ + protected File getRepositoryRoot() + { + return PlexusTestCase.getTestFile( "target/scm-test/repositoryWithSubdirs" ); + } + + // @Test + // public void testCheckInWithWorkingdirNotInRepoRoot() + // throws Exception + // { + // System.out.println( "hello" ); + // } +} http://git-wip-us.apache.org/repos/asf/maven-scm/blob/bea863c4/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java ---------------------------------------------------------------------- diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java index 55069ee..41d059f 100644 --- a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java +++ b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java @@ -181,7 +181,7 @@ public abstract class CheckInCommandTckTest assertEquals( "check readme.txt contents", "/readme.txt", FileUtils.fileRead( readmeTxt ) ); } - private void createFooJava( File fooJava ) + protected void createFooJava( File fooJava ) throws Exception { FileWriter output = new FileWriter( fooJava ); @@ -206,7 +206,7 @@ public abstract class CheckInCommandTckTest } } - private void createBarJava( File barJava ) + protected void createBarJava( File barJava ) throws Exception { FileWriter output = new FileWriter( barJava ); @@ -228,7 +228,7 @@ public abstract class CheckInCommandTckTest output.close(); } - private void changeReadmeTxt( File readmeTxt ) + protected void changeReadmeTxt( File readmeTxt ) throws Exception { FileWriter output = new FileWriter( readmeTxt );
