All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.rimerosolutions.ant.git.tasks.CommitTask Maven / Gradle / Ivy

There is a newer version: 1.3.2
Show newest version
/*
 * Copyright 2013 Rimero Solutions
 *
 * Licensed 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.
 */
package com.rimerosolutions.ant.git.tasks;

import java.io.IOException;

import com.rimerosolutions.ant.git.AbstractGitRepoAwareTask;
import com.rimerosolutions.ant.git.GitBuildException;
import com.rimerosolutions.ant.git.GitSettings;
import com.rimerosolutions.ant.git.GitTaskUtils;
import com.rimerosolutions.ant.git.MissingRequiredGitSettingsException;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.resources.Union;
import org.eclipse.jgit.api.CommitCommand;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.revwalk.RevCommit;

/**
 * Commits all local changes.
 *
 * 
{@code
 *  
 *   
 *  }
* *

Git documentation about commit

*

JGit CommitCommand

* * @author Yves Zoundi */ public class CommitTask extends AbstractGitRepoAwareTask { private static final String TASK_NAME = "git-commit"; private static final String MESSAGE_COMMIT_FAILED = "Cannot commit to Git repository"; private String message = "Commit message"; private boolean amend = false; private String reflogComment; private String revCommitIdProperty; private String only; private boolean brandedMessage = true; private Union path; @Override public String getName() { return TASK_NAME; } /** * Commit dedicated path only This method can be called several times to add multiple paths. * * @antdoc.notrequired * @param only A dedicated path to commit */ public void setOnly(String only) { this.only = only; } /** * Prefix commit message with [ant-git-tasks} brand. * @param brandedMessage Flag to use branded message */ public void setBrandedMessage(boolean brandedMessage) { this.brandedMessage = brandedMessage; } /** * Configure the fileset(s) of files to add to revision control * * @param fileset The fileset to add */ public void addFileset(FileSet fileset) { getPath().add(fileset); } private synchronized Union getPath() { if (path == null) { path = new Union(); path.setProject(getProject()); } return path; } /** * Assign the commit revision id to a property * * @antdoc.notrequired * @param revCommitIdProperty The property to set the commit id value to */ public void setRevCommitIdProperty(String revCommitIdProperty) { this.revCommitIdProperty = revCommitIdProperty; } @Override protected void doExecute() throws BuildException { try { setFailOnError(true); CommitCommand cmd = git.commit(); if (!GitTaskUtils.isNullOrBlankString(message)) { cmd.setMessage(brandedMessage?GitTaskUtils.BRANDING_MESSAGE + " ":"" + message); } else { cmd.setMessage(GitTaskUtils.BRANDING_MESSAGE); } String prefix = getDirectory().getCanonicalPath(); String[] allFiles = getPath().list(); if (!GitTaskUtils.isNullOrBlankString(only)) { cmd.setOnly(only); } else if (allFiles.length > 0) { for (String file : allFiles) { String modifiedFile = translateFilePathUsingPrefix(file, prefix); log("Will commit " + modifiedFile); cmd.setOnly(modifiedFile); } } else { cmd.setAll(true); } GitSettings gitSettings = lookupSettings(); if (gitSettings == null) { throw new MissingRequiredGitSettingsException(); } cmd.setAmend(amend).setAuthor(gitSettings.getIdentity()).setCommitter(gitSettings.getIdentity()); if (reflogComment != null) { cmd.setReflogComment(reflogComment); } RevCommit revCommit = cmd.call(); if (revCommitIdProperty != null) { String revisionId = ObjectId.toString(revCommit.getId()); getProject().setProperty(revCommitIdProperty, revisionId); } log(revCommit.getFullMessage()); } catch (IOException ioe) { throw new GitBuildException(MESSAGE_COMMIT_FAILED, ioe); } catch (GitAPIException ex) { throw new GitBuildException(MESSAGE_COMMIT_FAILED, ex); } } /** * Used to amend the tip of the current branch. * * @antdoc.notrequired * @param amend Whether or not to amend the tip for the current branch */ public void setAmend(boolean amend) { this.amend = amend; } /** * Override the default reflogComment * * @antdoc.notrequired * @param reflogComment the reflogComment to set */ public void setReflogComment(String reflogComment) { this.reflogComment = reflogComment; } /** * Sets the commit message * * @antdoc.notrequired * @param message The commit message */ public void setMessage(String message) { this.message = message; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy