1 /* 2 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 var rollbot = rollbot || {}; 27 28 (function() { 29 30 // FIXME: This will need to change once we have a real account for the rollbot. 31 var rollBotAccount = "eseidel (at) chromium.org"; 32 var issueSearchURL = config.kRietveldURL + "/search?" + $.param({ 33 "owner": rollBotAccount, 34 "closed": 3, // Only open issues. 35 "with_messages": "true", 36 "format": "json", 37 }); 38 39 var rollSubjectRegexp = /Blink roll (\d+):(\d+)/; 40 41 function findRollIssue(results) { 42 var results = results['results']; 43 for (var i = 0; i < results.length; i++) { 44 var result = results[i]; 45 if (result['subject'].match(rollSubjectRegexp)) 46 return result; 47 } 48 return null; 49 } 50 51 function isRollbotStopped(issue) { 52 // Ignore the first message as it always contains "STOP" 53 return issue.messages.slice(1).some(function(message) { return message.text.match(/STOP/); }); 54 } 55 56 rollbot.fetchCurrentRoll = function(callback) { 57 net.get(issueSearchURL, function(searchJSON) { 58 var issue = findRollIssue(searchJSON); 59 if (!issue) { 60 callback(null); 61 return; 62 } 63 64 var issueNumber = issue['issue']; 65 var subjectMatch = issue['subject'].match(rollSubjectRegexp); 66 callback({ 67 'issue': issueNumber, 68 'url': config.kRietveldURL + "/" + issueNumber, 69 'isStopped': isRollbotStopped(issue), 70 'fromRevision': subjectMatch[1], 71 'toRevision': subjectMatch[2], 72 }); 73 }); 74 }; 75 76 // Exposed for unittesting. 77 rollbot._isRollbotStopped = isRollbotStopped; 78 79 })(); 80