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