Add git.tag state; abstract out AbstractGitState class
This commit is contained in:
parent
9dc6f9d214
commit
a6c0b5884a
@ -50,10 +50,20 @@ class Repository extends Injectable {
|
||||
await this._git_cmd(`commit -m "${message}"`)
|
||||
}
|
||||
|
||||
async tag(label) {
|
||||
async create_tag(label) {
|
||||
await this._git_cmd(`tag "${label}"`)
|
||||
}
|
||||
|
||||
async delete_tag(label) {
|
||||
await this._git_cmd(`tag --delete "${label}"`)
|
||||
}
|
||||
|
||||
async get_tag(label) {
|
||||
const cd_cmd = await this._host.get_directory_change_command(this._path)
|
||||
const cmd = `${cd_cmd} && git rev-parse "${label}"`
|
||||
return await this._host.run_line_result(cmd)
|
||||
}
|
||||
|
||||
async push(target = false, ref = false) {
|
||||
await this._git_cmd(`push${target ? ' '+target : ''}${ref ? ' '+ref : ''} --tags`)
|
||||
}
|
||||
|
14
app/classes/state/git/AbstractGitState.js
Normal file
14
app/classes/state/git/AbstractGitState.js
Normal 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
|
@ -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
|
||||
|
@ -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
|
||||
|
31
app/classes/state/git/TagState.js
Normal file
31
app/classes/state/git/TagState.js
Normal 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
|
@ -25,6 +25,7 @@ class StatesService extends Service {
|
||||
|
||||
'git.clone': require('../classes/state/git/CloneState'),
|
||||
'git.checkout': require('../classes/state/git/CheckoutState'),
|
||||
'git.tag': require('../classes/state/git/TagState'),
|
||||
|
||||
'os.cmd': require('../classes/state/os/CommandState'),
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user