diff options
Diffstat (limited to 'src/main/distrib/data/groovy/thebuggenie.groovy')
-rw-r--r-- | src/main/distrib/data/groovy/thebuggenie.groovy | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/main/distrib/data/groovy/thebuggenie.groovy b/src/main/distrib/data/groovy/thebuggenie.groovy new file mode 100644 index 00000000..b4385a26 --- /dev/null +++ b/src/main/distrib/data/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()
|