Browse Source

Fixed sendemail script to list all commits in a push.

tags/v0.8.0
James Moger 12 years ago
parent
commit
f4759059d4

+ 34
- 16
groovy/sendemail.groovy View File

@@ -93,20 +93,42 @@ switch(repository.name) {
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 @@ if (gitblit.getBoolean(Keys.web.mountParameters, true))
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)

+ 37
- 0
src/com/gitblit/utils/JGitUtils.java View File

@@ -964,6 +964,43 @@ public class JGitUtils {
return list;
}
/**
* 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

+ 8
- 6
tests/com/gitblit/tests/GitServletTest.java View File

@@ -97,12 +97,14 @@ public class GitServletTest {
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();
}

+ 10
- 0
tests/com/gitblit/tests/JGitUtilsTest.java View File

@@ -332,6 +332,16 @@ public class JGitUtilsTest {
repository.close();
}
@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"));

Loading…
Cancel
Save