diff --git a/src/apptask.js b/src/apptask.js index 876b60464..cf6225c41 100644 --- a/src/apptask.js +++ b/src/apptask.js @@ -147,11 +147,12 @@ function createVolume(app, callback) { shell.sudo('createVolume', [ CREATEAPPDIR_CMD, app.id ], callback); } -function deleteVolume(app, callback) { +function deleteVolume(app, options, callback) { assert.strictEqual(typeof app, 'object'); + assert.strictEqual(typeof options, 'object'); assert.strictEqual(typeof callback, 'function'); - shell.sudo('deleteVolume', [ RMAPPDIR_CMD, app.id ], callback); + shell.sudo('deleteVolume', [ RMAPPDIR_CMD, app.id, !!options.removeDirectory ], callback); } function addCollectdProfile(app, callback) { @@ -397,7 +398,7 @@ function install(app, callback) { deleteContainers.bind(null, app), // oldConfig can be null during upgrades addons.teardownAddons.bind(null, app, app.oldConfig ? app.oldConfig.manifest.addons : app.manifest.addons), - deleteVolume.bind(null, app), + deleteVolume.bind(null, app, { removeDirectory: false }), // do not remove any symlinked volume // for restore case function deleteImageIfChanged(done) { @@ -663,7 +664,7 @@ function uninstall(app, callback) { addons.teardownAddons.bind(null, app, app.manifest.addons), updateApp.bind(null, app, { installationProgress: '40, Deleting volume' }), - deleteVolume.bind(null, app), + deleteVolume.bind(null, app, { removeDirectory: true }), updateApp.bind(null, app, { installationProgress: '50, Deleting image' }), docker.deleteImage.bind(null, app.manifest), diff --git a/src/scripts/rmappdir.sh b/src/scripts/rmappdir.sh index 4ace439c4..28cc93b60 100755 --- a/src/scripts/rmappdir.sh +++ b/src/scripts/rmappdir.sh @@ -17,10 +17,17 @@ if [[ "$1" == "--check" ]]; then exit 0 fi +appid="$1" +rmdir="$2" + if [[ "${BOX_ENV}" == "cloudron" ]]; then - readonly app_data_dir="${HOME}/appsdata/$1" + readonly app_data_dir="${HOME}/appsdata/${appid}" +else + readonly app_data_dir="${HOME}/.cloudron_test/appsdata/${appid}" +fi + +if [[ "${rmdir}" == "true" ]]; then rm -rf "${app_data_dir}" else - readonly app_data_dir="${HOME}/.cloudron_test/appsdata/$1" - rm -rf "${app_data_dir}" + find "${app_data_dir}" -mindepth 1 -delete fi diff --git a/src/test/apptask-test.js b/src/test/apptask-test.js index a46fd59e7..dc3e43c49 100644 --- a/src/test/apptask-test.js +++ b/src/test/apptask-test.js @@ -138,9 +138,19 @@ describe('apptask', function () { }); }); - it('delete volume', function (done) { - apptask._deleteVolume(APP, function (error) { + it('delete volume - removeDirectory (false) ', function (done) { + apptask._deleteVolume(APP, { removeDirectory: false }, function (error) { expect(!fs.existsSync(paths.APPS_DATA_DIR + '/' + APP.id + '/data')).to.be(true); + expect(fs.existsSync(paths.APPS_DATA_DIR + '/' + APP.id)).to.be(true); + expect(fs.readdirSync(paths.APPS_DATA_DIR + '/' + APP.id).length).to.be(0); // empty + expect(error).to.be(null); + done(); + }); + }); + + it('delete volume - removeDirectory (true) ', function (done) { + apptask._deleteVolume(APP, { removeDirectory: true }, function (error) { + expect(!fs.existsSync(paths.APPS_DATA_DIR + '/' + APP.id)).to.be(true); expect(error).to.be(null); done(); });