James Moger
2011-12-17 f4759059d4c363f5bd42550c9c35dd21f4d2bf41
Fixed sendemail script to list all commits in a push.
4 files modified
111 ■■■■ changed files
groovy/sendemail.groovy 50 ●●●●● patch | view | raw | blame | history
src/com/gitblit/utils/JGitUtils.java 37 ●●●●● patch | view | raw | blame | history
tests/com/gitblit/tests/GitServletTest.java 14 ●●●●● patch | view | raw | blame | history
tests/com/gitblit/tests/JGitUtilsTest.java 10 ●●●●● 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");
        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();
        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 #" + (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"));