mirror of
https://github.com/aljazceru/pear-docs.git
synced 2025-12-17 14:34:19 +01:00
on *nix check profile files in case shell PATH is outdated
This commit is contained in:
@@ -29,14 +29,10 @@ customElements.define('system-status', class extends HTMLElement {
|
|||||||
super()
|
super()
|
||||||
this.zsh = false
|
this.zsh = false
|
||||||
this.bash = false
|
this.bash = false
|
||||||
this.paths = process.env.PATH.split(path.delimiter)
|
this.statement = `export PATH="${BIN}":$PATH`
|
||||||
this.installed = this.paths.some((bin) => {
|
this.stmtrx = new RegExp(`^export PATH="${BIN}":\\$PATH$`, 'm')
|
||||||
if (isWin === false) {
|
this.shellProfiles = null
|
||||||
if (this.zsh === false && fs.existsSync(path.join(bin, 'zsh'))) this.zsh = true
|
this.installed = this.#installed()
|
||||||
if (this.bash === false && fs.existsSync(path.join(bin, 'bash'))) this.bash = true
|
|
||||||
}
|
|
||||||
return bin === BIN && fs.existsSync(path.join(BIN, isWin ? 'pear.cmd' : 'pear'))
|
|
||||||
})
|
|
||||||
this.template = document.createElement('template')
|
this.template = document.createElement('template')
|
||||||
this.template.innerHTML = `
|
this.template.innerHTML = `
|
||||||
<div id="panel">
|
<div id="panel">
|
||||||
@@ -82,7 +78,7 @@ customElements.define('system-status', class extends HTMLElement {
|
|||||||
if (this.button) {
|
if (this.button) {
|
||||||
const listener = () => {
|
const listener = () => {
|
||||||
this.button.removeEventListener('click', listener)
|
this.button.removeEventListener('click', listener)
|
||||||
this.#installPear()
|
this.#install()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
this.replaceWith(new this.constructor())
|
this.replaceWith(new this.constructor())
|
||||||
console.log('now show version info, and a gif showing pear command line help output run through')
|
console.log('now show version info, and a gif showing pear command line help output run through')
|
||||||
@@ -97,7 +93,31 @@ customElements.define('system-status', class extends HTMLElement {
|
|||||||
console.error(err)
|
console.error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
#installPear () {
|
#installed () {
|
||||||
|
if (isWin === false) {
|
||||||
|
let hasPear = false
|
||||||
|
this.shellProfiles = {}
|
||||||
|
for (const file of ['.zshrc', '.zshenv', '.zshprofile', '.zlogin', '.profile', '.bashrc']) {
|
||||||
|
const filepath = path.join(os.homedir(), file)
|
||||||
|
let contents = null
|
||||||
|
try { contents = fs.readFileSync(filepath, { encoding: 'utf-8' }) } catch {}
|
||||||
|
if (contents !== null) {
|
||||||
|
this.shellProfiles[file] = { filepath, hasPear: this.stmtrx.test(contents) }
|
||||||
|
hasPear = hasPear || this.shellProfiles[file].hasPear
|
||||||
|
}
|
||||||
|
console.log('hi', contents, hasPear, this.stmtrx, this.shellProfiles[file])
|
||||||
|
}
|
||||||
|
if (hasPear) process.env.PATH = `${BIN}:${process.env.PATH}`
|
||||||
|
}
|
||||||
|
|
||||||
|
this.paths = process.env.PATH.split(path.delimiter)
|
||||||
|
|
||||||
|
return this.paths.some((bin) => {
|
||||||
|
return bin === BIN && fs.existsSync(path.join(BIN, isWin ? 'pear.cmd' : 'pear'))
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#install () {
|
||||||
const runtime = path.join(config.pearDir, 'current', 'by-arch', process.platform + '-' + process.arch, 'bin', 'bare', 'pear')
|
const runtime = path.join(config.pearDir, 'current', 'by-arch', process.platform + '-' + process.arch, 'bin', 'bare', 'pear')
|
||||||
fs.mkdirSync(BIN, { recursive: true })
|
fs.mkdirSync(BIN, { recursive: true })
|
||||||
if (isWin) {
|
if (isWin) {
|
||||||
@@ -127,25 +147,25 @@ customElements.define('system-status', class extends HTMLElement {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const profiles = Object.values(this.shellProfiles)
|
||||||
|
if (profiles.length > 0) {
|
||||||
|
for (const { filepath, hasPear } of profiles) {
|
||||||
|
if (hasPear === false) fs.writeFileSync(filepath, this.statement, { flags: 'a' })
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const bash = this.paths.some((bin) => fs.existsSync(path.join(bin, 'bash')))
|
||||||
|
const zsh = this.paths.some((bin) => fs.existsSync(path.join(bin, 'zsh')))
|
||||||
|
fs.writeFileSync(path.join(os.homedir(), bash ? '.bashrc' : '.profile'), this.statement + '\n')
|
||||||
|
if (zsh) fs.writeFileSync(path.join(os.homedir(), '.zshrc'), this.statement + '\n')
|
||||||
|
}
|
||||||
|
|
||||||
const pear = path.join(BIN, 'pear')
|
const pear = path.join(BIN, 'pear')
|
||||||
const tmp = path.join(BIN, Math.floor(Math.random() * 1000) + '.pear')
|
const tmp = path.join(BIN, Math.floor(Math.random() * 1000) + '.pear')
|
||||||
fs.symlinkSync(runtime, tmp)
|
fs.symlinkSync(runtime, tmp)
|
||||||
fs.renameSync(tmp, pear)
|
fs.renameSync(tmp, pear)
|
||||||
fs.chmodSync(pear, 0o755)
|
fs.chmodSync(pear, 0o755)
|
||||||
|
|
||||||
let shellProfileExists = false
|
|
||||||
const statement = `\nexport PATH="${BIN}":$PATH\n`
|
|
||||||
for (const file of ['.zshrc', '.zshenv', '.zshprofile', '.zlogin', '.profile', '.bashrc']) {
|
|
||||||
const filepath = path.join(os.homedir(), file)
|
|
||||||
if (fs.existsSync(filepath)) {
|
|
||||||
fs.writeFileSync(filepath, statement, { flag: 'a' })
|
|
||||||
shellProfileExists = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (shellProfileExists === false) {
|
|
||||||
fs.writeFileSync(path.join(os.homedir(), this.bash ? '.bashrc' : '.profile'), statement, { flag: 'a' })
|
|
||||||
if (this.zsh) fs.writeFileSync(path.join(os.homedir(), '.zshrc'), statement, { flag: 'a' })
|
|
||||||
}
|
|
||||||
process.env.PATH = `${BIN}:${process.env.PATH}`
|
process.env.PATH = `${BIN}:${process.env.PATH}`
|
||||||
return Promise.resolve()
|
return Promise.resolve()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user