46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
const AbstractGitState = require('./AbstractGitState')
|
|
|
|
class CheckoutState extends AbstractGitState {
|
|
static get services() {
|
|
return [...super.services, 'output']
|
|
}
|
|
|
|
async apply() {
|
|
if ( !(await this.check()) ) {
|
|
const repo = await this._repo()
|
|
await repo.checkout(this._config.target)
|
|
}
|
|
}
|
|
|
|
async check() {
|
|
const repo = await this._repo()
|
|
const target = await this._config.target
|
|
try {
|
|
if ( (await repo.current_branch()) === target ) return true
|
|
if ( (await repo.current_ref()) === target ) return true
|
|
} catch (e) {}
|
|
return false
|
|
}
|
|
|
|
async reverse() {
|
|
if ( this._config.revert_to ) {
|
|
if ( await this.check() ) {
|
|
const repo = await this._repo()
|
|
await repo.checkout(this._config.revert_to)
|
|
}
|
|
} else {
|
|
this.output.warn('Checkout state does not currently support automatic reversal. Specify the revert_to config key to enable.')
|
|
}
|
|
}
|
|
|
|
failure_message() {
|
|
return `The Git repo at "${this._config.path}" on host "${this._host.name}" is not checked out to the correct ref (${this._config.target}).`
|
|
}
|
|
|
|
check_message() {
|
|
return this.failure_message()
|
|
}
|
|
}
|
|
|
|
module.exports = exports = CheckoutState
|