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}"`)
|
await this._git_cmd(`commit -m "${message}"`)
|
||||||
}
|
}
|
||||||
|
|
||||||
async tag(label) {
|
async create_tag(label) {
|
||||||
await this._git_cmd(`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) {
|
async push(target = false, ref = false) {
|
||||||
await this._git_cmd(`push${target ? ' '+target : ''}${ref ? ' '+ref : ''} --tags`)
|
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 AbstractGitState = require('./AbstractGitState')
|
||||||
const Repository = require('../../git/Repository')
|
|
||||||
|
|
||||||
class CheckoutState extends State {
|
class CheckoutState extends AbstractGitState {
|
||||||
static get services() {
|
static get services() {
|
||||||
return [...super.services, 'output']
|
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
|
module.exports = exports = CheckoutState
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
const State = require('../State')
|
const AbstractGitState = require('./AbstractGitState')
|
||||||
const Repository = require('../../git/Repository')
|
|
||||||
|
|
||||||
class CloneState extends State {
|
class CloneState extends AbstractGitState {
|
||||||
|
|
||||||
async apply() {
|
async apply() {
|
||||||
if ( !(await this.check()) ) {
|
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
|
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.clone': require('../classes/state/git/CloneState'),
|
||||||
'git.checkout': require('../classes/state/git/CheckoutState'),
|
'git.checkout': require('../classes/state/git/CheckoutState'),
|
||||||
|
'git.tag': require('../classes/state/git/TagState'),
|
||||||
|
|
||||||
'os.cmd': require('../classes/state/os/CommandState'),
|
'os.cmd': require('../classes/state/os/CommandState'),
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user