From 53952358491f093e1e40fce4f30b1c034d9c98a9 Mon Sep 17 00:00:00 2001 From: Wolfgang Date: Mon, 22 Oct 2012 15:01:51 +0200 Subject: [PATCH] first running hook to send pushed file to the bug tracker thebuggenie --- groovy/thebuggenie.groovy | 88 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 groovy/thebuggenie.groovy diff --git a/groovy/thebuggenie.groovy b/groovy/thebuggenie.groovy new file mode 100644 index 00000000..b4385a26 --- /dev/null +++ b/groovy/thebuggenie.groovy @@ -0,0 +1,88 @@ +/* + * 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() -- 2.39.5