1/* 2 * Copyright (C) 2011 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 26var checkout = checkout || {}; 27 28(function() { 29 30var g_haveSeenCheckoutAvailable = false; 31 32function callIfCheckoutAvailable(callback, checkoutUnavailable) 33{ 34 if (g_haveSeenCheckoutAvailable) { 35 callback(); 36 return; 37 } 38 checkout.isAvailable(function(isAvailable) { 39 if (isAvailable) { 40 g_haveSeenCheckoutAvailable = true; 41 callback(); 42 return; 43 } 44 if (checkoutUnavailable) 45 checkoutUnavailable(); 46 }); 47} 48 49checkout.isAvailable = function(callback) 50{ 51 net.ajax({ 52 url: '/ping', 53 success: function() { 54 callback(true); 55 }, 56 error: function() { 57 callback(false); 58 }, 59 }); 60}; 61 62checkout.lastBlinkRollRevision = function(callback, checkoutUnavailable) 63{ 64 callIfCheckoutAvailable(function() { 65 net.get('/lastroll', callback); 66 }, checkoutUnavailable); 67} 68 69checkout.rollout = function(revision, reason, callback, checkoutUnavailable) 70{ 71 callIfCheckoutAvailable(function() { 72 net.post('/rollout?' + $.param({ 73 'revision': revision, 74 'reason': reason 75 }), function() { 76 callback(); 77 }); 78 }, checkoutUnavailable); 79}; 80 81checkout.rebaseline = function(failureInfoList, callback, progressCallback, checkoutUnavailable, debugBotsCallback) 82{ 83 callIfCheckoutAvailable(function() { 84 var tests = {}; 85 for (var i = 0; i < failureInfoList.length; i++) { 86 var failureInfo = failureInfoList[i]; 87 if (failureInfo.builderName.indexOf('dbg') != -1) { 88 debugBotsCallback(failureInfo); 89 continue; 90 } 91 tests[failureInfo.testName] = tests[failureInfo.testName] || {}; 92 tests[failureInfo.testName][failureInfo.builderName] = 93 base.uniquifyArray(base.flattenArray(failureInfo.failureTypeList.map(results.failureTypeToExtensionList))); 94 } 95 net.post('/rebaselineall', JSON.stringify(tests), function() { callback() }); 96 }, checkoutUnavailable); 97}; 98 99})(); 100