Add git.tag state; abstract out AbstractGitState class

This commit is contained in:
garrettmills
2020-03-05 12:15:00 -06:00
parent 9dc6f9d214
commit a6c0b5884a
6 changed files with 61 additions and 19 deletions

View File

@@ -0,0 +1,14 @@
const State = require('../State')
const Repository = require('../../git/Repository')
class AbstractGitState extends State {
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 = AbstractGitState

View File

@@ -1,7 +1,6 @@
const State = require('../State')
const Repository = require('../../git/Repository')
const AbstractGitState = require('./AbstractGitState')
class CheckoutState extends State {
class CheckoutState extends AbstractGitState {
static get services() {
return [...super.services, 'output']
}
@@ -34,12 +33,6 @@ class CheckoutState extends State {
}
}
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

View File

@@ -1,7 +1,6 @@
const State = require('../State')
const Repository = require('../../git/Repository')
const AbstractGitState = require('./AbstractGitState')
class CloneState extends State {
class CloneState extends AbstractGitState {
async apply() {
if ( !(await this.check()) ) {
@@ -22,12 +21,6 @@ class CloneState extends State {
}
}
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 = CloneState

View File

@@ -0,0 +1,31 @@
const AbstractGitState = require('./AbstractGitState')
class TagState extends AbstractGitState {
async apply() {
if ( !(await this.check()) ) {
const repo = await this._repo()
await repo.create_tag(this._config.tag)
}
}
async check() {
const repo = await this._repo()
try {
await repo.get_tag(this._config.tag)
return true
} catch (e) {
return false
}
}
async reverse() {
if ( await this.check() ) {
const repo = await this._repo()
await repo.delete_tag(this._config.tag)
}
}
}
module.exports = exports = TagState