/*
|
* 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()
|