add list command
Project: http://git-wip-us.apache.org/repos/asf/maven-scm/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-scm/commit/39833cce Tree: http://git-wip-us.apache.org/repos/asf/maven-scm/tree/39833cce Diff: http://git-wip-us.apache.org/repos/asf/maven-scm/diff/39833cce Branch: refs/heads/master Commit: 39833cce08e766a230667311eb854f7cc3cae4fe Parents: 79bc9a1 Author: imod <d...@fortysix.ch> Authored: Fri Jun 21 20:38:51 2013 +0200 Committer: imod <d...@fortysix.ch> Committed: Fri Jun 21 20:38:51 2013 +0200 ---------------------------------------------------------------------- .../scm/provider/git/jgit/JGitScmProvider.java | 7 +- .../git/jgit/command/list/JGitListCommand.java | 68 ++++++++++++++++++++ 2 files changed, 72 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-scm/blob/39833cce/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java b/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java index 2c39278..2804c72 100644 --- a/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java +++ b/src/main/java/org/apache/maven/scm/provider/git/jgit/JGitScmProvider.java @@ -19,6 +19,8 @@ package org.apache.maven.scm.provider.git.jgit; * under the License. */ +import java.io.File; + import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.command.info.InfoScmResult; @@ -31,12 +33,11 @@ import org.apache.maven.scm.provider.git.jgit.command.changelog.JGitChangeLogCom import org.apache.maven.scm.provider.git.jgit.command.checkin.JGitCheckInCommand; import org.apache.maven.scm.provider.git.jgit.command.checkout.JGitCheckOutCommand; import org.apache.maven.scm.provider.git.jgit.command.diff.JGitDiffCommand; +import org.apache.maven.scm.provider.git.jgit.command.list.JGitListCommand; import org.apache.maven.scm.provider.git.jgit.command.status.JGitStatusCommand; import org.apache.maven.scm.provider.git.jgit.command.tag.JGitTagCommand; import org.apache.maven.scm.repository.ScmRepositoryException; -import java.io.File; - /** * @author <a href="mailto:strub...@yahoo.de">Mark Struberg</a> * @version $Id: JGitScmProvider.java 894145 2009-12-28 10:13:39Z struberg $ @@ -114,7 +115,7 @@ public class JGitScmProvider /** {@inheritDoc} */ protected GitCommand getListCommand() { - throw new UnsupportedOperationException("getListCommand"); + return new JGitListCommand(); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/maven-scm/blob/39833cce/src/main/java/org/apache/maven/scm/provider/git/jgit/command/list/JGitListCommand.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/maven/scm/provider/git/jgit/command/list/JGitListCommand.java b/src/main/java/org/apache/maven/scm/provider/git/jgit/command/list/JGitListCommand.java new file mode 100644 index 0000000..0d959a3 --- /dev/null +++ b/src/main/java/org/apache/maven/scm/provider/git/jgit/command/list/JGitListCommand.java @@ -0,0 +1,68 @@ +package org.apache.maven.scm.provider.git.jgit.command.list; + +/* + * 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.util.ArrayList; +import java.util.Collection; +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.list.AbstractListCommand; +import org.apache.maven.scm.command.list.ListScmResult; +import org.apache.maven.scm.provider.ScmProviderRepository; +import org.apache.maven.scm.provider.git.command.GitCommand; +import org.apache.maven.scm.provider.git.jgit.command.JGitUtils; +import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.transport.CredentialsProvider; + +/** + * + * @author Dominik Bartholdi (imod) + */ +public class JGitListCommand extends AbstractListCommand implements GitCommand { + + @Override + protected ListScmResult executeListCommand(ScmProviderRepository repo, ScmFileSet fileSet, boolean recursive, ScmVersion scmVersion) throws ScmException { + + try { + Git git = Git.open(fileSet.getBasedir()); + CredentialsProvider credentials = JGitUtils.prepareSession(getLogger(), git, (GitScmProviderRepository) repo); + + List<ScmFile> list = new ArrayList<ScmFile>(); + Collection<Ref> lsResult = git.lsRemote().setCredentialsProvider(credentials).call(); + for (Ref ref : lsResult) { + if (getLogger().isDebugEnabled()) { + getLogger().info(ref.getObjectId().getName() + " " + ref.getTarget().getName()); + } + list.add(new ScmFile(ref.getName(), ScmFileStatus.CHECKED_IN)); + } + + return new ListScmResult("JGit ls-remote", list); + } catch (Exception e) { + throw new ScmException("JGit ls-remote failure!", e); + } + } +}