@cocalc/project
Version:
CoCalc: project daemon
52 lines (46 loc) • 2.31 kB
text/coffeescript
#########################################################################
# This file is part of CoCalc: Copyright © 2020 Sagemath, Inc.
# License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
#########################################################################
###
CoCalc: Collaborative web-based SageMath, Jupyter, LaTeX and Terminals.
Copyright 2015, SageMath, Inc., GPL v3.
Execute a command line or block of BASH code
###
#winston = require('./logger').getLogger('exec-shell-code')
misc = require('@cocalc/util/misc')
misc_node = require('@cocalc/backend/misc_node')
message = require('@cocalc/util/message')
exports.exec_shell_code = (socket, mesg) ->
#winston.debug("project_exec: #{misc.to_json(mesg)} in #{process.cwd()}")
if mesg.command == "smc-jupyter"
socket.write_mesg("json", message.error(id:mesg.id, error:"do not run smc-jupyter directly"))
return
misc_node.execute_code
command : mesg.command
args : mesg.args
path : misc_node.abspath(mesg.path ? "")
timeout : mesg.timeout
err_on_exit : mesg.err_on_exit
max_output : mesg.max_output
aggregate : mesg.aggregate
bash : mesg.bash
cb : (err, out) ->
if err
error = "Error executing command '#{mesg.command}' with args '#{mesg.args}' -- #{err}, #{out?.stdout}, #{out?.stderr}"
if error.indexOf("Connection refused") != -1
error += "-- Email help@cocalc.com if you need full internet access, which is disabled by default."
# Too annoying and doesn't work.
#if error.indexOf("=") != -1
# error += "-- This is a BASH terminal, not a Sage worksheet. For Sage, use +New and create a Sage worksheet."
err_mesg = message.error
id : mesg.id
error : error
socket.write_mesg('json', err_mesg)
else
#winston.debug(json(out))
socket.write_mesg 'json', message.project_exec_output
id : mesg.id
stdout : out.stdout
stderr : out.stderr
exit_code : out.exit_code