package org.freecode.irc.votebot.modules.admin; import org.freecode.irc.Privmsg; import org.freecode.irc.votebot.api.AdminModule; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; /** * Created with IntelliJ IDEA. * User: Deprecated * Date: 11/22/13 * Time: 10:52 PM */ public class RebuildModule extends AdminModule { private String idAbbrev; private String idDescribe; public static final String LAST_ID = "pre-rebuild.commit.id.abbrev"; public void init() { String last = readString(LAST_ID); if (idAbbrev.equalsIgnoreCase(last)) return; int commits = countCommitsSince(last); getFvb().sendMsg("Running " + idDescribe + ", " + commits + " new commits since last run (" + last + ")"); store(LAST_ID, idAbbrev); } @Override public void processMessage(Privmsg privmsg) { try (BufferedWriter writer = privmsg.getIrcConnection().getWriter()) { writer.write("QUIT :Rebuilding!\r\n"); writer.flush(); } catch (IOException e) { e.printStackTrace(); } try (BufferedReader reader = executeRebuild()) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } private static int countCommitsSince(String idAbbrev) { try { Process p = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "git rev-list " + idAbbrev + "..HEAD | wc -l" }); String line = new BufferedReader(new InputStreamReader(p.getInputStream())).readLine(); return Integer.parseInt(line); } catch (IOException | NumberFormatException e) { e.printStackTrace(); } return -1; } private static BufferedReader executeRebuild() throws IOException { Process p = Runtime.getRuntime().exec("./run.sh &"); return new BufferedReader(new InputStreamReader(p.getInputStream())); } @Override public String getName() { return "rebuild"; } protected Right[] getRights() { return new Right[]{Right.FOUNDER}; } public void setIdAbbrev(String idAbbrev) { this.idAbbrev = idAbbrev; } public void setIdDescribe(String idDescribe) { this.idDescribe = idDescribe; } }