/**
 * Copyright 2017 The AMP HTML Authors. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS-IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
'use strict';

/**
 * @fileoverview Provides functions for executing tasks in a child process.
 */

const childProcess = require('child_process');

/**
 * Spawns the given command in a child process with the given options.
 *
 * @param {string} cmd
 * @param {<Object>} options
 * @return {<Object>} Process info.
 */
function spawnProcess(cmd, options) {
  return childProcess.spawnSync('/bin/sh', ['-c', cmd], options);
}

/**
 * Executes the provided command.
 *
 * @param {string} cmd Command line to execute.
 */
exports.exec = function(cmd) {
  spawnProcess(cmd, {'stdio': 'inherit'});
};

/**
 * Executes the provided command, and terminates the program in case of failure.
 *
 * @param {string} cmd Command line to execute.
 */
exports.execOrDie = function(cmd) {
  const p = spawnProcess(cmd, {'stdio': 'inherit'});
  if (p.status != 0) {
    process.exit(p.status);
  }
};

/**
 * Executes the provided command, returning the process object.
 * This will throw an exception if something goes wrong.
 * @param {string} cmd
 * @return {!Object}
 */
function getOutput(cmd) {
  const p = spawnProcess(
      cmd,
      {
        'cwd': process.cwd(),
        'env': process.env,
        'stdio': 'pipe',
        'encoding': 'utf-8',
      });
  return p;
}

/**
 * Executes the provided command, returning its stdout.
 * @param {string} cmd
 * @return {string}
 */
exports.getStdout = function(cmd) {
  return getOutput(cmd).stdout;
};

/**
 * Executes the provided command, returning its stderr.
 * @param {string} cmd
 * @return {string}
 */
exports.getStderr = function(cmd) {
  return getOutput(cmd).stderr;
};

@@ -769,16 +769,148 @@
 ess');%0A%0A
+const shellCmd = (process.platform == 'win32') ? 'cmd' : '/bin/sh';%0Aconst shellFlag = (process.platform == 'win32') ? '/C' : '-c';%0A%0A
 /**%0A * S
@@ -1145,24 +1145,28 @@
 ync(
-'/bin/sh', %5B'-c'
+shellCmd, %5BshellFlag
 , cm

Make exec.spawnProcess work across platforms (#13156)