/* | |
* Copyright 2011 Wolfgang Gassler gassler.org | |
* | |
* 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. | |
*/ | |
import com.gitblit.GitBlit | |
import com.gitblit.Keys | |
import com.gitblit.models.RepositoryModel | |
import com.gitblit.models.TeamModel | |
import com.gitblit.models.UserModel | |
import com.gitblit.utils.JGitUtils | |
import java.text.SimpleDateFormat | |
import org.eclipse.jgit.lib.Repository | |
import org.eclipse.jgit.lib.Config | |
import org.eclipse.jgit.revwalk.RevCommit | |
import org.eclipse.jgit.transport.ReceiveCommand | |
import org.eclipse.jgit.transport.ReceiveCommand.Result | |
import org.slf4j.Logger | |
import org.eclipse.jgit.lib.IndexDiff | |
import org.eclipse.jgit.lib.Constants | |
import com.gitblit.utils.DiffUtils | |
/** | |
* Gitblit Post-Receive Hook: thebuggenie | |
* www.thebuggenie.com | |
* | |
* Submit the commit information to thebuggenie bug tracker by calling thebuggenie client tool | |
* | |
* Config of the Script: | |
* | |
* Setup a custom gitblit field in the proprties file of gitblit by adding the following line | |
* groovy.customFields = "thebuggenieProjectId=TheBugGennie project id (used for thebuggenie hoocks)" | |
* This field allows to specify the project id of thebuggenie project in the edit section of gitblit | |
* | |
* Furthermore you need to set the path to thebuggenie client tool by adding the following property to | |
* the gitblit properties file | |
* thebuggenie.tbg_cli = /var/www/thebuggenie_root/tbg_cli | |
*/ | |
// Indicate we have started the script | |
logger.info("thebuggenie hook triggered by ${user.username} for ${repository.name}") | |
//fetch the repository data | |
Repository r = gitblit.getRepository(repository.name) | |
//get project id which is defined in the git repo metadata | |
def tbgProjectId = repository.customFields.thebuggenieProjectId | |
//get path to the thebuggenie client tool which is defined in the gitblit proprties files | |
def tbgCliPath = gitblit.getString('thebuggenie.tbg_cli', '/var/www/thebuggenie/tbg_cli') | |
def tbgCliDirPath = new File(tbgCliPath).getParent() | |
for(command in commands) { | |
//fetch all pushed commits | |
def commits = JGitUtils.getRevLog(r, command.oldId.name, command.newId.name).reverse() | |
for (commit in commits) { | |
//get hashes and author data of commit | |
def oldhash = commit.getParent(0).getId().getName() | |
def newhash = commit.getId().getName() | |
def authorIdent = commit.getAuthorIdent() | |
def author = "${authorIdent.name} <${authorIdent.emailAddress}>" | |
//fetch all changed files of the commit | |
def files = JGitUtils.getFilesInCommit(r,commit) | |
def changedFiles = "" | |
for (f in files) { | |
//transform file data to the format which is needed by thebuggenie | |
changedFiles += f.changeType.toString().substring(0,1)+"\t${f.path}\n" | |
} | |
//ok let's submit all information to thebuggenie by calling the client tool | |
// def shc = "$tbgCliPath vcs_integration:report_commit $tbgProjectId \"$author\" $newhash \"${commit.fullMessage}\" \"$changedFiles\" $oldhash ${commit.commitTime}" | |
def shc = [tbgCliPath, "vcs_integration:report_commit", tbgProjectId, author, newhash, commit.getFullMessage(), changedFiles, oldhash, commit.getCommitTime()]; | |
logger.info("executing in path " + tbgCliDirPath + ": "+shc) | |
shc.execute(null, new File(tbgCliDirPath)) | |
} | |
} | |
// close the repository reference | |
r.close() |