fix: cleanup step shows what would be deleted in dry-run

pull/356/head
Romain 5 months ago
parent f009a31e3e
commit 812a063b3f

@ -43,9 +43,8 @@ exports.build = function (opts, done) {
{
title: 'Cleaning up',
enabled: (ctx) => opts.cleanup,
skip: () => opts.dryRun,
task: (ctx) => {
return steps.cleanup(ctx.files, opts.output)
return steps.cleanup(ctx.files, opts.output, opts.dryRun)
}
},
{

@ -1,10 +1,11 @@
const _ = require('lodash')
const fs = require('fs')
const debug = require('debug')('thumbsup:debug')
const Observable = require('zen-observable')
const path = require('path')
const readdir = require('fs-readdir-recursive')
exports.run = function (fileCollection, outputRoot) {
exports.run = function (fileCollection, outputRoot, dryRun) {
return new Observable(observer => {
const mediaRoot = path.join(outputRoot, 'media')
const diskFiles = readdir(mediaRoot).map(f => path.join(mediaRoot, f))
@ -18,8 +19,13 @@ exports.run = function (fileCollection, outputRoot) {
const useless = _.difference(diskFiles, requiredFiles)
if (useless.length) {
useless.forEach(f => {
observer.next(path.relative(outputRoot, f))
fs.unlinkSync(f)
const relativePath = path.relative(outputRoot, f)
if (dryRun) {
debug(`Dry run, would delete: ${relativePath}`)
} else {
observer.next(relativePath)
fs.unlinkSync(f)
}
})
}
observer.complete()

@ -1,5 +1,6 @@
const fs = require('fs')
const sinon = require('sinon')
const debug = require('debug')
const should = require('should/as-function')
const cleanup = require('../../src/steps/step-cleanup')
const fixtures = require('../fixtures')
@ -33,10 +34,10 @@ describe('Steps: cleanup', () => {
'output/media/large/paris/IMG_0001.jpg': '',
'output/media/large/london/IMG_0002.jpg': ''
})
const obs = cleanup.run(input, 'output')
const obs = cleanup.run(input, 'output', false)
obs.reduce(toArray, []).subscribe(deletedFiles => {
should(deletedFiles).deepEqual([])
should(fs.unlinkSync.args).deepEqual([])
should(fs.unlinkSync.called).equal(false)
testEnd()
})
})
@ -51,14 +52,34 @@ describe('Steps: cleanup', () => {
'output/media/large/london/IMG_0002.jpg': '',
'output/media/large/newyork/IMG_0003.jpg': ''
})
const obs = cleanup.run(input, 'output')
const obs = cleanup.run(input, 'output', false)
const extraFile = 'media/large/newyork/IMG_0003.jpg'
obs.reduce(toArray, []).subscribe(deletedFiles => {
should(deletedFiles).deepEqual([ospath(extraFile)])
should(fs.unlinkSync.called).equal(true)
should(fs.unlinkSync.args).deepEqual([[ospath(`output/${extraFile}`)]])
testEnd()
})
})
it('prints the name but does not delete in dry-run mode', testEnd => {
const input = [
fixtures.file({ path: 'paris/IMG_0001.jpg' }),
fixtures.file({ path: 'london/IMG_0002.jpg' })
]
mock({
'output/media/large/paris/IMG_0001.jpg': '',
'output/media/large/london/IMG_0002.jpg': '',
'output/media/large/newyork/IMG_0003.jpg': ''
})
const obs = cleanup.run(input, 'output', true)
obs.reduce(toArray, []).subscribe(deletedFiles => {
should(deletedFiles).deepEqual([])
should(fs.unlinkSync.called).equal(false)
debug.assertContains('would delete: media/large/newyork/IMG_0003.jpg')
testEnd()
})
})
})
function toArray (list, item) {

Loading…
Cancel
Save