1 | 'use strict'
|
2 |
|
3 | const co = require('co')
|
4 | const cli = require('heroku-cli-util')
|
5 |
|
6 | function * run (context, heroku) {
|
7 | const pgbackups = require('../../lib/pgbackups')(context, heroku)
|
8 | const host = require('../../lib/host')()
|
9 | const sortBy = require('lodash.sortby')
|
10 |
|
11 | const {app, args} = context
|
12 |
|
13 | let transfer
|
14 | if (args.backup_id) {
|
15 | let num = yield pgbackups.transfer.num(args.backup_id)
|
16 | if (!num) throw new Error(`Invalid backup: ${args.backup_id}`)
|
17 | transfer = yield heroku.get(`/client/v11/apps/${app}/transfers/${num}`, {host})
|
18 | } else {
|
19 | let transfers = yield heroku.get(`/client/v11/apps/${app}/transfers`, {host})
|
20 | transfer = sortBy(transfers, 'created_at').reverse().find(t => !t.finished_at)
|
21 | if (!transfer) throw new Error('No active backups/transfers')
|
22 | }
|
23 |
|
24 | return cli.action(`Cancelling ${pgbackups.transfer.name(transfer)}`,
|
25 | heroku.post(`/client/v11/apps/${app}/transfers/${transfer.uuid}/actions/cancel`, {host}))
|
26 | }
|
27 |
|
28 | module.exports = {
|
29 | topic: 'pg',
|
30 | command: 'backups:cancel',
|
31 | description: 'cancel an in-progress backup or restore (default newest)',
|
32 | needsApp: true,
|
33 | needsAuth: true,
|
34 | args: [{name: 'backup_id', optional: true}],
|
35 | run: cli.command({preauth: true}, co.wrap(run))
|
36 | }
|