diff options
-rw-r--r-- | src/nvim/os/job.c | 6 | ||||
-rw-r--r-- | test/functional/job/job_spec.lua | 14 | ||||
-rw-r--r-- | third-party/CMakeLists.txt | 12 | ||||
-rw-r--r-- | third-party/cmake/DownloadAndExtractFile.cmake | 12 |
4 files changed, 34 insertions, 10 deletions
diff --git a/src/nvim/os/job.c b/src/nvim/os/job.c index 2f610cb51f..7ae2a86fc2 100644 --- a/src/nvim/os/job.c +++ b/src/nvim/os/job.c @@ -270,10 +270,10 @@ void job_stop(Job *job) } job->stopped_time = os_hrtime(); - // Close the standard streams of the job + // Close the job's stdin. If the job doesn't close it's own stdout/stderr, + // they will be closed when the job exits(possibly due to being terminated + // after a timeout) close_job_in(job); - close_job_out(job); - close_job_err(job); if (!stop_requests++) { // When there's at least one stop request pending, start a timer that diff --git a/test/functional/job/job_spec.lua b/test/functional/job/job_spec.lua index b2a65f8269..9046d85f10 100644 --- a/test/functional/job/job_spec.lua +++ b/test/functional/job/job_spec.lua @@ -15,6 +15,10 @@ describe('jobs', function() return "au! JobActivity xxx call rpcnotify("..channel..", "..expr..")" end + local notify_job = function() + return "au! JobActivity xxx call rpcnotify("..channel..", 'j', v:job_data)" + end + it('returns 0 when it fails to start', function() local status, rv = pcall(eval, "jobstart('', '')") eq(false, status) @@ -56,4 +60,14 @@ describe('jobs', function() it('will not cause a memory leak if we leave a job running', function() nvim('command', "call jobstart('xxx', 'cat', ['-'])") end) + + it('will only emit the "exit" event after "stdout" and "stderr"', function() + nvim('command', notify_job()) + nvim('command', "let j = jobstart('xxx', 'cat', ['-'])") + local jobid = nvim('eval', 'j') + nvim('eval', 'jobsend(j, "abc\ndef")') + nvim('eval', 'jobstop(j)') + eq({'notification', 'j', {{jobid, 'stdout', 'abc\ndef'}}}, next_message()) + eq({'notification', 'j', {{jobid, 'exit'}}}, next_message()) + end) end) diff --git a/third-party/CMakeLists.txt b/third-party/CMakeLists.txt index 6a3148c2b6..166d48785a 100644 --- a/third-party/CMakeLists.txt +++ b/third-party/CMakeLists.txt @@ -52,27 +52,31 @@ endif() include(ExternalProject) set(LIBUV_URL https://github.com/joyent/libuv/archive/v0.11.28.tar.gz) +set(LIBUV_SHA1 3b70b65467ee693228b8b8385665a52690d74092) set(LIBUV_MD5 1a849ba4fc571d531482ed74bc7aabc4) set(MSGPACK_URL https://github.com/msgpack/msgpack-c/archive/ecf4b09acd29746829b6a02939db91dfdec635b4.tar.gz) +set(MSGPACK_SHA1 c160ff99f20d9d0a25bea0a57f4452f1c9bde370) set(MSGPACK_MD5 3599eaf904b8ba0c36cea7ed80973364) set(LUAJIT_URL http://luajit.org/download/LuaJIT-2.0.3.tar.gz) +set(LUAJIT_SHA1 2db39e7d1264918c2266b0436c313fbd12da4ceb) set(LUAJIT_MD5 f14e9104be513913810cd59c8c658dc0) set(LUAROCKS_URL https://github.com/keplerproject/luarocks/archive/0587afbb5fe8ceb2f2eea16f486bd6183bf02f29.tar.gz) +set(LUAROCKS_SHA1 61a894fd5d61987bf7e7f9c3e0c5de16ba4b68c4) set(LUAROCKS_MD5 0f53f42909fbcd2c88be303e8f970516) if(USE_BUNDLED_LIBUV) ExternalProject_Add(libuv PREFIX ${DEPS_BUILD_DIR} URL ${LIBUV_URL} - URL_MD5 ${LIBUV_MD5} DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/libuv DOWNLOAD_COMMAND ${CMAKE_COMMAND} -DPREFIX=${DEPS_BUILD_DIR} -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/libuv -DURL=${LIBUV_URL} + -DEXPECTED_SHA1=${LIBUV_SHA1} -DEXPECTED_MD5=${LIBUV_MD5} -DTARGET=libuv -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake @@ -87,12 +91,12 @@ if(USE_BUNDLED_MSGPACK) ExternalProject_Add(msgpack PREFIX ${DEPS_BUILD_DIR} URL ${MSGPACK_URL} - URL_MD5 ${MSGPACK_MD5} DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/msgpack DOWNLOAD_COMMAND ${CMAKE_COMMAND} -DPREFIX=${DEPS_BUILD_DIR} -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/msgpack -DURL=${MSGPACK_URL} + -DEXPECTED_SHA1=${MSGPACK_SHA1} -DEXPECTED_MD5=${MSGPACK_MD5} -DTARGET=msgpack -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake @@ -114,12 +118,12 @@ if(USE_BUNDLED_LUAJIT) ExternalProject_Add(luajit PREFIX ${DEPS_BUILD_DIR} URL ${LUAJIT_URL} - URL_MD5 ${LUAJIT_MD5} DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luajit DOWNLOAD_COMMAND ${CMAKE_COMMAND} -DPREFIX=${DEPS_BUILD_DIR} -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luajit -DURL=${LUAJIT_URL} + -DEXPECTED_SHA1=${LUAJIT_SHA1} -DEXPECTED_MD5=${LUAJIT_MD5} -DTARGET=luajit -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake @@ -143,12 +147,12 @@ if(USE_BUNDLED_LUAROCKS) ExternalProject_Add(luarocks PREFIX ${DEPS_BUILD_DIR} URL ${LUAROCKS_URL} - URL_MD5 ${LUAROCKS_MD5} DOWNLOAD_DIR ${DEPS_DOWNLOAD_DIR}/luarocks DOWNLOAD_COMMAND ${CMAKE_COMMAND} -DPREFIX=${DEPS_BUILD_DIR} -DDOWNLOAD_DIR=${DEPS_DOWNLOAD_DIR}/luarocks -DURL=${LUAROCKS_URL} + -DEXPECTED_SHA1=${LUAROCKS_SHA1} -DEXPECTED_MD5=${LUAROCKS_MD5} -DTARGET=luarocks -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/DownloadAndExtractFile.cmake diff --git a/third-party/cmake/DownloadAndExtractFile.cmake b/third-party/cmake/DownloadAndExtractFile.cmake index ec9c6db3b4..43100c0431 100644 --- a/third-party/cmake/DownloadAndExtractFile.cmake +++ b/third-party/cmake/DownloadAndExtractFile.cmake @@ -10,8 +10,8 @@ if(NOT DEFINED DOWNLOAD_DIR) message(FATAL_ERROR "DOWNLOAD_DIR must be defined.") endif() -if(NOT DEFINED EXPECTED_MD5) - message(FATAL_ERROR "EXPECTED_MD5 must be defined.") +if((NOT DEFINED EXPECTED_SHA1) OR (NOT DEFINED EXPECTED_MD5)) + message(FATAL_ERROR "EXPECTED_SHA1 or EXPECTED_MD5 must be defined.") endif() if(NOT DEFINED TARGET) @@ -55,9 +55,15 @@ message(STATUS "downloading... dst='${file}' timeout='${timeout_msg}'") +if((DEFINED EXPECTED_SHA1) AND (${CMAKE_VERSION} VERSION_GREATER 2.8.10)) + set(hash_args EXPECTED_HASH SHA1=${EXPECTED_SHA1}) +else() + set(hash_args EXPECTED_MD5 ${EXPECTED_MD5}) +endif() + file(DOWNLOAD ${URL} ${file} ${timeout_args} - EXPECTED_MD5 ${EXPECTED_MD5} + ${hash_args} STATUS status LOG log) |