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