groovy/sendemail.groovy | ●●●●● patch | view | raw | blame | history | |
src/com/gitblit/utils/JGitUtils.java | ●●●●● patch | view | raw | blame | history | |
tests/com/gitblit/tests/GitServletTest.java | ●●●●● patch | view | raw | blame | history | |
tests/com/gitblit/tests/JGitUtilsTest.java | ●●●●● patch | view | raw | blame | history |
groovy/sendemail.groovy
@@ -93,20 +93,42 @@ toAddresses.add "dev-team@somewhere.com" toAddresses.add "qa-team@somewhere.com" break default: break } // get the create/update commits from the repository to build message content def commits = [] for (ReceiveCommand command:commands) { // construct a simple text summary of the changes contained in the push def commitCount = 0 def changes = "" def table = { it.id.name[0..8] + " " + it.authorIdent.name.padRight(20, " ") + it.shortMessage } for (command in commands) { switch (command.type) { case ReceiveCommand.Type.UPDATE: case ReceiveCommand.Type.CREATE: RevCommit commit = JGitUtils.getCommit(r, command.newId.name) commits.add(commit) def commits = JGitUtils.getRevLog(r, command.oldId.name, command.newId.name) commitCount += commits.size() // new branch commits table changes += "created ${command.refName}\n\n" changes += commits.collect(table).join("\n") changes += "\n" break case ReceiveCommand.Type.UPDATE: def commits = JGitUtils.getRevLog(r, command.oldId.name, command.newId.name) commitCount += commits.size() // fast-forward branch commits table changes += "updated ${command.refName}\n\n" changes += commits.collect(table).join("\n") changes += "\n" break case ReceiveCommand.Type.UPDATE_NONFASTFORWARD: def commits = JGitUtils.getRevLog(r, command.oldId.name, command.newId.name) commitCount += commits.size() // non-fast-forward branch commits table changes += "updated ${command.refName} (NON fast-forward)\n\n" changes += commits.collect(table).join("\n") changes += "\n" break case ReceiveCommand.Type.DELETE: // deleted branch changes += "deleted ${command.refName}\n\n" break default: break } @@ -121,14 +143,10 @@ else summaryUrl = url + "/summary?r=" + repository.name // create a simple commits table def table = commits.collect { it.id.name[0..8] + " " + it.authorIdent.name.padRight(20, " ") + it.shortMessage }.join("\n") // create the message body def msg = """${user.username} pushed ${commits.size} commits to ${repository.name} ${summaryUrl} def msg = """${summaryUrl} ${table}""" ${changes}""" // tell Gitblit to send the message (Gitblit filters duplicate addresses) gitblit.notifyUsers("${emailprefix} ${user.username} pushed ${commits.size} commits => ${repository.name}", msg, toAddresses) gitblit.notifyUsers("${emailprefix} ${user.username} pushed ${commitCount} commits => ${repository.name}", msg, toAddresses) src/com/gitblit/utils/JGitUtils.java
@@ -965,6 +965,43 @@ } /** * Returns a list of commits for the repository within the range specified * by startRangeId and endRangeId. If the repository does not exist or is * empty, an empty list is returned. * * @param repository * @param startRangeId * the first commit (not included in results) * @param endRangeId * the end commit (included in results) * @return a list of commits */ public static List<RevCommit> getRevLog(Repository repository, String startRangeId, String endRangeId) { List<RevCommit> list = new ArrayList<RevCommit>(); if (!hasCommits(repository)) { return list; } try { ObjectId endRange = repository.resolve(endRangeId); ObjectId startRange = repository.resolve(startRangeId); RevWalk rw = new RevWalk(repository); rw.markStart(rw.parseCommit(endRange)); rw.markUninteresting(rw.parseCommit(startRange)); Iterable<RevCommit> revlog = rw; for (RevCommit rev : revlog) { list.add(rev); } rw.dispose(); } catch (Throwable t) { error(t, repository, "{0} failed to get revlog for {1}..{2}", startRangeId, endRangeId); } return list; } /** * Search the commit history for a case-insensitive match to the value. * Search results require a specified SearchType of AUTHOR, COMMITTER, or * COMMIT. Results may be paginated using offset and maxCount. If the tests/com/gitblit/tests/GitServletTest.java
@@ -97,12 +97,14 @@ public void testAnonymousCommit() throws Exception { Git git = Git.open(folder); File file = new File(folder, "TODO"); for (int i = 0; i < 3; i++) { OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream(file, true)); BufferedWriter w = new BufferedWriter(os); w.write("// " + new Date().toString() + "\n"); w.close(); git.add().addFilepattern(file.getName()).call(); git.commit().setMessage("test commit").call(); git.commit().setMessage("test commit #" + (i + 1)).call(); } git.push().setPushAll().call(); git.getRepository().close(); } tests/com/gitblit/tests/JGitUtilsTest.java
@@ -333,6 +333,16 @@ } @Test public void testRevLogRange() throws Exception { Repository repository = GitBlitSuite.getHelloworldRepository(); List<RevCommit> commits = JGitUtils.getRevLog(repository, "fbd14fa6d1a01d4aefa1fca725792683800fc67e", "85a0e4087b8439c0aa6b1f4f9e08c26052ab7e87"); repository.close(); assertEquals(14, commits.size()); } @Test public void testSearchTypes() throws Exception { assertEquals(SearchType.COMMIT, SearchType.forName("commit")); assertEquals(SearchType.COMMITTER, SearchType.forName("committer"));