| package org.apache.maven.scm.provider.git.jgit.command.untag; |
| |
| /* |
| * 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.Collection; |
| |
| import org.apache.maven.scm.ScmException; |
| import org.apache.maven.scm.ScmFileSet; |
| import org.apache.maven.scm.ScmResult; |
| import org.apache.maven.scm.command.untag.AbstractUntagCommand; |
| import org.apache.maven.scm.command.untag.UntagScmResult; |
| import org.apache.maven.scm.log.ScmLogger; |
| 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.codehaus.plexus.util.StringUtils; |
| import org.eclipse.jgit.api.Git; |
| import org.eclipse.jgit.lib.Constants; |
| import org.eclipse.jgit.transport.PushResult; |
| import org.eclipse.jgit.transport.RefSpec; |
| import org.eclipse.jgit.transport.RemoteRefUpdate; |
| |
| /** {@inheritDoc} */ |
| public class JGitUntagCommand extends AbstractUntagCommand implements GitCommand |
| { |
| |
| @Override |
| protected ScmResult executeUntagCommand( ScmProviderRepository repository, ScmFileSet fileSet, |
| String tagName ) throws ScmException |
| { |
| if ( tagName == null || StringUtils.isEmpty( tagName.trim() ) ) |
| { |
| throw new ScmException( "tag name must be specified" ); |
| } |
| String escapedTagName = tagName.trim().replace( ' ', '_' ); |
| |
| Git git = null; |
| try |
| { |
| git = JGitUtils.openRepo( fileSet.getBasedir() ); |
| |
| // delete the tag |
| if ( git.tagDelete().setTags( escapedTagName ).call().isEmpty() ) |
| { |
| return new UntagScmResult( "JGit tagDelete", "Failed to delete tag", "", false ); |
| } |
| |
| if ( repository.isPushChanges() ) |
| { |
| // From https://stackoverflow.com/q/11892766/696632 |
| RefSpec refSpec = new RefSpec() |
| .setSource( null ) |
| .setDestination( Constants.R_TAGS + escapedTagName ); |
| |
| getLogger().info( "push delete tag [" + escapedTagName + "] to remote..." ); |
| ScmLogger logger = getLogger(); |
| |
| Iterable<PushResult> pushResultList |
| = JGitUtils.push( logger, git, (GitScmProviderRepository) repository, refSpec ); |
| if ( logger.isInfoEnabled() ) |
| { |
| for ( PushResult pushResult : pushResultList ) |
| { |
| Collection<RemoteRefUpdate> ru = pushResult.getRemoteUpdates(); |
| for ( RemoteRefUpdate remoteRefUpdate : ru ) |
| { |
| logger.info( remoteRefUpdate.getStatus() + " - " + remoteRefUpdate ); |
| } |
| } |
| } |
| } |
| |
| return new UntagScmResult( "JGit tagDelete" ); |
| } |
| catch ( Exception e ) |
| { |
| throw new ScmException( "JGit tagDelete failure!", e ); |
| } |
| finally |
| { |
| JGitUtils.closeRepo( git ); |
| } |
| } |
| } |