You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
maestro/app/classes/state/git/CheckoutState.js

46 lines
1.3 KiB

const State = require('../State')
const Repository = require('../../git/Repository')
class CheckoutState extends State {
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.')
}
}
async _repo() {
const path = await this._host.get_path(this._config.path)
if ( !path.is_valid() ) await path.touch(true)
return new Repository(path)
}
}
module.exports = exports = CheckoutState