fix mailing test cases
Project: http://git-wip-us.apache.org/repos/asf/maven-scm/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-scm/commit/184ef0e4 Tree: http://git-wip-us.apache.org/repos/asf/maven-scm/tree/184ef0e4 Diff: http://git-wip-us.apache.org/repos/asf/maven-scm/diff/184ef0e4 Branch: refs/heads/master Commit: 184ef0e4209a185bf35a95ad95ad58ded778ef87 Parents: b85c9bb Author: imod <d...@fortysix.ch> Authored: Sat Jul 6 22:09:08 2013 +0200 Committer: imod <d...@fortysix.ch> Committed: Sat Jul 6 22:09:08 2013 +0200 ---------------------------------------------------------------------- .../provider/git/jgit/command/JGitUtils.java | 25 +++++++----- .../command/checkout/JGitCheckOutCommand.java | 43 +++++++++++++++----- .../git/jgit/command/tag/JGitTagCommand.java | 18 +++++++- 3 files changed, 63 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-scm/blob/184ef0e4/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java b/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java index 541baf2..67166e1 100644 --- a/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java +++ b/src/main/java/org/apache/maven/scm/provider/git/jgit/command/JGitUtils.java @@ -24,7 +24,10 @@ import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.InvalidRemoteException; import org.eclipse.jgit.api.errors.NoFilepatternException; import org.eclipse.jgit.api.errors.TransportException; +import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffEntry.ChangeType; +import org.eclipse.jgit.diff.DiffFormatter; +import org.eclipse.jgit.diff.RawTextComparator; import org.eclipse.jgit.errors.CorruptObjectException; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.MissingObjectException; @@ -44,7 +47,7 @@ import org.eclipse.jgit.transport.PushResult; import org.eclipse.jgit.transport.RefSpec; import org.eclipse.jgit.transport.RemoteRefUpdate; import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; -import org.eclipse.jgit.treewalk.TreeWalk; +import org.eclipse.jgit.util.io.DisabledOutputStream; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -188,15 +191,18 @@ public class JGitUtils List<ScmFile> list = new ArrayList<ScmFile>(); if ( JGitUtils.hasCommits( repository ) ) { - TreeWalk tw = new TreeWalk( repository ); - tw.reset(); - tw.setRecursive( true ); - tw.addTree( commit.getTree() ); - while ( tw.next() ) - { - list.add( new ScmFile( tw.getPathString(), ScmFileStatus.CHECKED_IN ) ); + RevWalk rw = new RevWalk(repository); + RevCommit realParant = commit.getParentCount() > 0 ? commit.getParent(0) : commit; + RevCommit parent = rw.parseCommit(realParant.getId()); + DiffFormatter df = new DiffFormatter(DisabledOutputStream.INSTANCE); + df.setRepository(repository); + df.setDiffComparator(RawTextComparator.DEFAULT); + df.setDetectRenames(true); + List<DiffEntry> diffs = df.scan(parent.getTree(), commit.getTree()); + for (DiffEntry diff : diffs) { + list.add( new ScmFile( diff.getNewPath(), ScmFileStatus.CHECKED_IN )); } - tw.release(); + rw.release(); } return list; } @@ -209,7 +215,6 @@ public class JGitUtils * @throws ScmException if the given Status cannot be translated */ public static ScmFileStatus getScmFileStatus( ChangeType changeType ) - throws ScmException { switch ( changeType ) { http://git-wip-us.apache.org/repos/asf/maven-scm/blob/184ef0e4/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java b/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java index 95f486e..4ac934e 100644 --- a/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java +++ b/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java @@ -27,6 +27,7 @@ import java.util.List; import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFile; import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.ScmFileStatus; import org.apache.maven.scm.ScmVersion; import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand; import org.apache.maven.scm.command.checkout.CheckOutScmResult; @@ -38,7 +39,11 @@ import org.codehaus.plexus.util.StringUtils; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.ProgressMonitor; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevTree; +import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.CredentialsProvider; +import org.eclipse.jgit.treewalk.TreeWalk; /** * @author <a href="mailto:strub...@yahoo.de">Mark Struberg</a> @@ -73,12 +78,13 @@ public class JGitCheckOutCommand ProgressMonitor monitor = JGitUtils.getMonitor( getLogger() ); - String branch = version == null ? null : version.getName(); + String branch = version != null ? version.getName() : null; + if ( StringUtils.isBlank( branch ) ) { branch = Constants.MASTER; } - + if ( !fileSet.getBasedir().exists() || !( new File( fileSet.getBasedir(), ".git" ).exists() ) ) { if ( fileSet.getBasedir().exists() ) @@ -97,19 +103,33 @@ public class JGitCheckOutCommand } else { + // repo already exists, fetch the remote + CredentialsProvider credentials = JGitUtils.getCredentials( (GitScmProviderRepository) repo ); + getLogger().info( "fetching..." ); Git git = Git.open( fileSet.getBasedir() ); - // switch branch if we currently are not on the proper one - getLogger().info( "checkout [" + branch + "] to " + fileSet.getBasedir() ); - git.checkout().setName( branch ).call(); - - git.fetch().setRemote( repository.getFetchUrl() ).call(); - git.pull().call(); + git.fetch().setCredentialsProvider(credentials).setProgressMonitor( monitor ).call(); } - List<ScmFile> listedFiles = new ArrayList<ScmFile>(); - // TODO collect checkedout files + Git git = Git.open( fileSet.getBasedir() ); + // switch to branch/tag if we currently are not on the proper one + getLogger().info( "checkout [" + branch + "] to " + fileSet.getBasedir() ); + git.checkout().setName( branch ).call(); - return new CheckOutScmResult( "checkout via JGit", listedFiles ); + RevWalk revWalk = new RevWalk(git.getRepository()); + RevCommit commit = revWalk.parseCommit(git.getRepository().resolve(Constants.HEAD)); + + final TreeWalk walk = new TreeWalk(git.getRepository()); + walk.reset(); // drop the first empty tree, which we do not need here + walk.setRecursive(true); + walk.addTree(commit.getTree()); + + List<ScmFile> listedFiles = new ArrayList<ScmFile>(); + while (walk.next()) + { + listedFiles.add( new ScmFile( walk.getPathString(), ScmFileStatus.CHECKED_OUT)); + } + + return new CheckOutScmResult( "checkout via JGit", listedFiles ); } catch ( Exception e ) { @@ -117,4 +137,5 @@ public class JGitCheckOutCommand } } + } http://git-wip-us.apache.org/repos/asf/maven-scm/blob/184ef0e4/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java b/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java index 1de70b5..68188fb 100644 --- a/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java +++ b/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java @@ -25,6 +25,7 @@ import java.util.List; import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFile; import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.ScmFileStatus; import org.apache.maven.scm.ScmResult; import org.apache.maven.scm.ScmTagParameters; import org.apache.maven.scm.command.tag.AbstractTagCommand; @@ -36,7 +37,10 @@ import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository; import org.codehaus.plexus.util.StringUtils; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.transport.RefSpec; +import org.eclipse.jgit.treewalk.TreeWalk; /** * @author <a href="mailto:strub...@yahoo.de">Mark Struberg</a> @@ -86,8 +90,18 @@ public class JGitTagCommand } // search for the tagged files - List<ScmFile> taggedFiles = new ArrayList<ScmFile>(); - // TODO list all tagged files + RevWalk revWalk = new RevWalk(git.getRepository()); + RevCommit commit = revWalk.parseCommit(tagRef.getObjectId()); + + final TreeWalk walk = new TreeWalk(git.getRepository()); + walk.reset(); // drop the first empty tree, which we do not need here + walk.setRecursive(true); + walk.addTree(commit.getTree()); + + List<ScmFile> taggedFiles = new ArrayList<ScmFile>(); + while (walk.next()) { + taggedFiles.add( new ScmFile( walk.getPathString(), ScmFileStatus.CHECKED_OUT)); + } return new TagScmResult( "JGit tag", taggedFiles ); }