src/commands/apps/rename.js
'use strict'
const co = require('co')
const cli = require('heroku-cli-util')
function * run (context, heroku) {
const _ = require('lodash')
let git = require('../../git')(context)
let oldApp = context.app
let newApp = context.args.newname
let request = heroku.request({
method: 'PATCH',
path: `/apps/${oldApp}`,
body: {name: newApp}
})
let app = yield cli.action(`Renaming ${cli.color.cyan(oldApp)} to ${cli.color.green(newApp)}`, request)
let gitUrl = context.flags['ssh-git'] ? git.sshGitHurl(app.name) : git.gitUrl(app.name)
cli.log(`${app.web_url} | ${gitUrl}`)
if (git.inGitRepo()) {
// delete git remotes pointing to this app
yield _(yield git.listRemotes())
.filter((r) => git.gitUrl(oldApp) === r[1] || git.sshGitUrl(oldApp) === r[1])
.map((r) => r[0])
.uniq()
.map((r) => {
return git.rmRemote(r)
.then(() => git.createRemote(r, gitUrl))
.then(() => cli.log(`Git remote ${r} updated`))
}).value()
}
cli.warn("Don't forget to update git remotes for all other local checkouts of the app.")
}
let cmd = {
description: 'rename an app',
help: 'This will locally update the git remote if it is set to the old app.',
examples: `$ heroku apps:rename --app oldname newname
https://newname.herokuapp.com/ | https://git.heroku.com/newname.git
Git remote heroku updated`,
needsAuth: true,
needsApp: true,
args: [{name: 'newname'}],
flags: [
{name: 'ssh-git', description: 'use ssh git protocol instead of https'}
],
run: cli.command(co.wrap(run))
}
module.exports = [
Object.assign({topic: 'apps', command: 'rename'}, cmd),
Object.assign({topic: 'rename', hidden: true}, cmd)
]