mirror of
https://github.com/Foundry376/Mailspring.git
synced 2024-11-12 12:40:08 +08:00
8133cc88d6
Summary: - We now make verbose log files continuously as you use the app - We ship the logs to LogStash via S3 when an exception occurs - We log the DatabaseStore, ActionBridge and Analytics packages - We are now on the latest version of Electron 0.26.0 - We are now on Chrome 42 and io.js 1.4.3 - We should be setup to use ASAR soon. Update atom.sh to reflect that we're now electron oniguruma was unnecessary correctly find log files that haven't been shipped yet Fix a small issue with nodeIsVisible after upgrade to Chrome 42 Delete old logs, better logging from database store, don't ship empty logs Test Plan: Run existing tests Reviewers: evan Reviewed By: evan Differential Revision: https://phab.nylas.com/D1531
158 lines
5.9 KiB
CoffeeScript
158 lines
5.9 KiB
CoffeeScript
global.shellStartTime = Date.now()
|
|
|
|
errorReporter = new (require '../error-reporter')
|
|
|
|
app = require 'app'
|
|
fs = require 'fs'
|
|
path = require 'path'
|
|
optimist = require 'optimist'
|
|
|
|
start = ->
|
|
if process.platform is 'win32'
|
|
SquirrelUpdate = require './squirrel-update'
|
|
squirrelCommand = process.argv[1]
|
|
return if SquirrelUpdate.handleStartupEvent(app, squirrelCommand)
|
|
|
|
args = parseCommandLine()
|
|
|
|
addPathToOpen = (event, pathToOpen) ->
|
|
event.preventDefault()
|
|
args.pathsToOpen.push(pathToOpen)
|
|
|
|
args.urlsToOpen = []
|
|
addUrlToOpen = (event, urlToOpen) ->
|
|
event.preventDefault()
|
|
args.urlsToOpen.push(urlToOpen)
|
|
|
|
app.on 'open-file', addPathToOpen
|
|
app.on 'open-url', addUrlToOpen
|
|
|
|
app.on 'will-finish-launching', ->
|
|
setupCrashReporter()
|
|
|
|
app.on 'ready', ->
|
|
app.removeListener 'open-file', addPathToOpen
|
|
app.removeListener 'open-url', addUrlToOpen
|
|
|
|
cwd = args.executedFrom?.toString() or process.cwd()
|
|
args.pathsToOpen = args.pathsToOpen.map (pathToOpen) ->
|
|
if cwd
|
|
path.resolve(cwd, pathToOpen.toString())
|
|
else
|
|
path.resolve(pathToOpen.toString())
|
|
|
|
setupCoffeeScript()
|
|
|
|
if args.devMode
|
|
require(path.join(args.resourcePath, 'src', 'coffee-cache')).register()
|
|
Application = require path.join(args.resourcePath, 'src', 'browser', 'application')
|
|
else
|
|
Application = require './application'
|
|
|
|
Application.open(args)
|
|
console.log("App load time: #{Date.now() - global.shellStartTime}ms") unless args.test
|
|
|
|
global.devResourcePath = process.env.EDGEHILL_PATH ? process.cwd()
|
|
# Normalize to make sure drive letter case is consistent on Windows
|
|
global.devResourcePath = path.normalize(global.devResourcePath) if global.devResourcePath
|
|
|
|
setupCrashReporter = ->
|
|
# In the future, we may want to collect actual native crash reports,
|
|
# but for now let's not send them to github.
|
|
# crashReporter.start(productName: 'Atom', companyName: 'GitHub')
|
|
|
|
setupCoffeeScript = ->
|
|
CoffeeScript = null
|
|
|
|
require.extensions['.coffee'] = (module, filePath) ->
|
|
CoffeeScript ?= require('coffee-script')
|
|
coffee = fs.readFileSync(filePath, 'utf8')
|
|
js = CoffeeScript.compile(coffee, filename: filePath)
|
|
module._compile(js, filePath)
|
|
|
|
parseCommandLine = ->
|
|
version = app.getVersion()
|
|
options = optimist(process.argv[1..])
|
|
options.usage """
|
|
Atom Editor v#{version}
|
|
|
|
Usage: atom [options] [path ...]
|
|
|
|
One or more paths to files or folders to open may be specified.
|
|
|
|
File paths will open in the current window.
|
|
|
|
Folder paths will open in an existing window if that folder has already been
|
|
opened or a new window if it hasn't.
|
|
|
|
Environment Variables:
|
|
EDGEHILL_PATH The path from which Atom loads source code in dev mode.
|
|
Defaults to `cwd`.
|
|
"""
|
|
options.alias('d', 'dev').boolean('d').describe('d', 'Run in development mode.')
|
|
options.alias('f', 'foreground').boolean('f').describe('f', 'Keep the browser process in the foreground.')
|
|
options.alias('h', 'help').boolean('h').describe('h', 'Print this usage message.')
|
|
options.alias('l', 'log-file').string('l').describe('l', 'Log all output to file.')
|
|
options.alias('n', 'new-window').boolean('n').describe('n', 'Open a new window.')
|
|
options.alias('r', 'resource-path').string('r').describe('r', 'Set the path to the Atom source directory and enable dev-mode.')
|
|
options.alias('s', 'spec-directory').string('s').describe('s', 'Set the directory from which to run package specs (default: Atom\'s spec directory).')
|
|
options.boolean('safe').describe('safe', 'Do not load packages from ~/.atom/packages or ~/.atom/dev/packages.')
|
|
options.alias('t', 'test').boolean('t').describe('t', 'Run the specified specs and exit with error code on failures.')
|
|
options.alias('v', 'version').boolean('v').describe('v', 'Print the version.')
|
|
options.alias('w', 'wait').boolean('w').describe('w', 'Wait for window to be closed before returning.')
|
|
args = options.argv
|
|
|
|
if args.help
|
|
process.stdout.write(options.help())
|
|
process.exit(0)
|
|
|
|
if args.version
|
|
process.stdout.write("#{version}\n")
|
|
process.exit(0)
|
|
|
|
executedFrom = args['executed-from']
|
|
devMode = args['dev']
|
|
safeMode = args['safe']
|
|
pathsToOpen = args._
|
|
pathsToOpen = [executedFrom] if executedFrom and pathsToOpen.length is 0
|
|
test = args['test']
|
|
specDirectory = args['spec-directory']
|
|
newWindow = args['new-window']
|
|
pidToKillWhenClosed = args['pid'] if args['wait']
|
|
logFile = args['log-file']
|
|
specFilePattern = args['file-pattern']
|
|
|
|
if args['resource-path']
|
|
devMode = true
|
|
resourcePath = args['resource-path']
|
|
else
|
|
# Set resourcePath based on the specDirectory if running specs on atom core
|
|
if specDirectory?
|
|
packageDirectoryPath = path.resolve(specDirectory, '..')
|
|
packageManifestPath = path.join(packageDirectoryPath, 'package.json')
|
|
if fs.statSyncNoException(packageManifestPath)
|
|
try
|
|
packageManifest = JSON.parse(fs.readFileSync(packageManifestPath))
|
|
resourcePath = packageDirectoryPath if packageManifest.name is 'edgehill'
|
|
else
|
|
# EDGEHILL_CORE: if test is given a name, assume that's the package we
|
|
# want to test.
|
|
if test and toString.call(test) is "[object String]"
|
|
if test is "core"
|
|
specDirectory = path.join(global.devResourcePath, "spec-nylas")
|
|
else
|
|
specDirectory = path.resolve(path.join(global.devResourcePath, "internal_packages", test))
|
|
|
|
if devMode
|
|
resourcePath ?= global.devResourcePath
|
|
|
|
unless fs.statSyncNoException(resourcePath)
|
|
resourcePath = path.dirname(path.dirname(__dirname))
|
|
|
|
# On Yosemite the $PATH is not inherited by the "open" command, so we have to
|
|
# explicitly pass it by command line, see http://git.io/YC8_Ew.
|
|
process.env.PATH = args['path-environment'] if args['path-environment']
|
|
|
|
{resourcePath, pathsToOpen, executedFrom, test, version, pidToKillWhenClosed, devMode, safeMode, newWindow, specDirectory, logFile, specFilePattern}
|
|
|
|
start()
|