| @@ -84,7 +84,7 @@ function nodeShellExec() { | |||
| } | |||
| else { | |||
| // console.log( messages.join('') ) | |||
| process.stdout.write( messages.join('') ) | |||
| // process.stdout.write( JSON.stringify(logEntry) ) | |||
| } | |||
| } | |||
| else if(opts.evaluateResult) { | |||
| @@ -132,14 +132,14 @@ catch(e) { | |||
| a.WriteLine("set PATH=%PATH%;" + python2path ) | |||
| // a.WriteLine("set LAUNCHEDWITHENV=YES" ) | |||
| var __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b' | |||
| var __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b' | |||
| var currentIsExlr = function() { | |||
| if(fs.FileExists('./' + __ALIAS__STAMP__)) return true | |||
| } | |||
| var runningInExlr = currentIsExlr() | |||
| if(cfn === sfn && runningInExlr) { | |||
| a.WriteLine("cd .."); | |||
| a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+cfn+" /all:true") // PB : TODO -- Retain all script args... | |||
| a.WriteLine("cd .."); | |||
| a.WriteLine("SET LAUNCHEDWITHENV=YES && cscript "+cfn+" /all:true") // PB : TODO -- Retain all script args... | |||
| } | |||
| else { | |||
| var guesselxr = fs.FileExists(cd + './elxr/' + __ALIAS__STAMP__) | |||
| @@ -1308,9 +1308,9 @@ function __main( selectedinstance ){ | |||
| return any(steps) | |||
| // return any([any(steps), any(prompts)]) | |||
| } | |||
| , install : install | |||
| , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||
| , exists : exists | |||
| , install : install | |||
| , postinstallsteps : function() { return sysAddPathVar('%USERPROFILE%\\AppData/Local\\Microsoft\\WindowsApps') } | |||
| , exists : exists | |||
| } | |||
| , { | |||
| shellcmd: 'code' | |||
| @@ -1454,9 +1454,9 @@ function __main( selectedinstance ){ | |||
| url: 'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.30.0.msi' //'https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.29.0.msi' | |||
| , installer: 'mysql-installer-community-8.0.30.0.msi' | |||
| , installcmd: ['MSIEXEC.exe', ['/i' | |||
| , path.normalize(downloadsdir + '/' + 'mysql-installer-community-8.0.30.0.msi') | |||
| , path.normalize(downloadsdir + '/' + 'mysql-installer-community-8.0.30.0.msi') | |||
| //, 'ACCEPT=YES', '/passive' | |||
| ]] | |||
| ]] | |||
| , install : install | |||
| , exists : exists | |||
| , preinstallsteps: function() { | |||
| @@ -1516,23 +1516,23 @@ function __main( selectedinstance ){ | |||
| ['git', ['clone', chessRepo + '/chess/elxr'] ] | |||
| ] | |||
| if(existsSyncFolder( selectedinstance.root + '\\elxr')) { | |||
| if(existsSyncFolder( selectedinstance.root + '\\elxr\\.git')) { | |||
| // PB : TODO -- use a elxr guid signature to detect more reliably folders named the same that is not us. | |||
| ifns = [ ['git', ['pull'], { cwd : selectedinstance.root + '\\elxr' } ] ] | |||
| } | |||
| else { | |||
| throw 'elxr subfolder not recognized as a git repository. Please cleanup and continue.' | |||
| } | |||
| if(existsSyncFolder( selectedinstance.root + '\\elxr')) { | |||
| if(existsSyncFolder( selectedinstance.root + '\\elxr\\.git')) { | |||
| // PB : TODO -- use a elxr guid signature to detect more reliably folders named the same that is not us. | |||
| ifns = [ ['git', ['pull'], { cwd : selectedinstance.root + '\\elxr' } ] ] | |||
| } | |||
| else console.log(selectedinstance.root + '\\elxr' + ' NOT FOUND ') | |||
| else { | |||
| throw 'elxr subfolder not recognized as a git repository. Please cleanup and continue.' | |||
| } | |||
| } | |||
| else console.log(selectedinstance.root + '\\elxr' + ' NOT FOUND ') | |||
| ifns.push(['npm', ['i'], { cwd : '.\\elxr' } ]) | |||
| if(!ifns.map) ifns.map = map; | |||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||
| if(e.code === 1602) { | |||
| console.warn("Installation was probably cancelled.") | |||
| } | |||
| else throw e | |||
| if(!ifns.map) ifns.map = map; | |||
| return any(ifns.map(callsheltask))['catch'](function(e){ | |||
| if(e.code === 1602) { | |||
| console.warn("Installation was probably cancelled.") | |||
| } | |||
| else throw e | |||
| }) | |||
| }) | |||
| } | |||
| @@ -1554,6 +1554,10 @@ function __main( selectedinstance ){ | |||
| , nodeShellExec('start', ['""', '"C:\\Program Files\\Git\\bin\\sh.exe"', '-c', '"node ' + (selectedinstance.root + '\\elxr\\index.js').replace(/\\/g, '/') + ' i elixir"']) | |||
| // , nodeShellExec('node', [selectedinstance.root + 'elxr\\index.js']) | |||
| ]) | |||
| // return any([ /*self.preinstallsteps,*/ function(){ return self.installsteps() } | |||
| // , nodeShellExec('node', [selectedinstance.root + '\\elxr\\index.js', 'init']) | |||
| // // , nodeShellExec('node', [selectedinstance.root + 'elxr\\index.js']) | |||
| // ]) | |||
| } | |||
| // , exists : function(){ | |||
| // console.log('Elxr PreInstallsteps called') | |||
| @@ -135,14 +135,21 @@ var shell_verse = { | |||
| return Promise.resolve(false).then(( elevationstate ) => { | |||
| __isElevated ? console.log('Elevated') : console.log('Not Elevated') | |||
| __isElevated = elevationstate; | |||
| shell_verse.acquireElevationState = ()=> Promise.resolve(__isElevated); | |||
| shell_verse.isElevated = () => { return Promise.resolve(__isElevated)} | |||
| return __isElevated | |||
| }).catch(() => { | |||
| __isElevated = false; | |||
| console.log('Not Elevated'); | |||
| }).finally(()=>{ | |||
| shell_verse.acquireElevationState = ()=> Promise.resolve(__isElevated); | |||
| shell_verse.isElevated = () => { return Promise.resolve(__isElevated)} | |||
| return __isElevated; | |||
| console.log('Not Elevated'); | |||
| return __isElevated | |||
| }) | |||
| // .finally(()=>{ | |||
| // shell_verse.acquireElevationState = ()=> Promise.resolve(__isElevated); | |||
| // shell_verse.isElevated = () => { return Promise.resolve(__isElevated)} | |||
| // return __isElevated; // Value returned from finally is not supported by node. | |||
| // }) | |||
| } | |||
| , getTaskCheckExists : cli.createTask('getTaskCheckExists', 'which') | |||
| @@ -1,6 +1,6 @@ | |||
| module.exports = ((name, options)=>{ | |||
| options = options || { username : ``, reposerver : `https://git.bbh.org.in` } | |||
| options = options || { username : `guest`, reposerver : `https://git.bbh.org.in`, password : `noneforguest` } | |||
| utils = options.utils | |||
| // Default set of users in main repos. | |||
| @@ -19,32 +19,40 @@ module.exports = ((name, options)=>{ | |||
| 'chess' : { | |||
| priority : 0, | |||
| // PB : TODO -- Handle cases where a repository url can be accessed by multiple users... | |||
| server : `${options.reposerver}`, user : options.username || '', path : `` | |||
| , get url(){ return `${this.server}/chess/${this.path}`} // fetch | |||
| server : `${options.reposerver}`, user : { username : options.username || ''}, path : `` | |||
| , get url(){ return `${this.server}/${this.owner}`} // fetch | |||
| , push : 'no-pushing' | |||
| , title : 'chess' | |||
| , get username(){ return this.user.username } | |||
| , owner : 'chess' | |||
| } | |||
| , 'chess-public' : { priority : 1, | |||
| server : `https://git.bbh.org.in`, user : options.username || '', path : `` | |||
| , get url(){ return `${this.server}/chess/${this.path}`} | |||
| server : `https://git.bbh.org.in`, user : { username : options.username || ''}, path : `` | |||
| , get url(){ return `${this.server}/${this.owner}`} | |||
| , title : 'chess-public' // PB : TODO -- rename... | |||
| , accessibility : ['public'] | |||
| , push : 'no-pushing' | |||
| , get username(){ return this.user.username } | |||
| , owner : 'chess' | |||
| } | |||
| // PB : TODO -- Load private repositories from private config... | |||
| , 'chess-private' : { priority : 2, | |||
| server : `http://git.bbh`, user : options.username || '', path : `` | |||
| , get url(){ return `${this.server}/chess/${this.path}`} | |||
| server : `http://git.bbh`, user : { username : options.username || ''}, path : `` | |||
| , get url(){ return `${this.server}/${this.owner}`} | |||
| , title : 'chess-private' | |||
| , accessibility : ['private'] | |||
| , push : 'no-pushing', private : true | |||
| } | |||
| , get username(){ return this.user.username } | |||
| , owner : 'chess' | |||
| } | |||
| , 'chess-github' : { priority : 3, | |||
| server : `https://github.com`, user : 'baptistdev', path : `` | |||
| , get url(){ return `${this.server}/${this.user}/${this.path}`} // fetch | |||
| server : `https://github.com`, user : { username : 'baptistdev'}, path : `` | |||
| , get url(){ return `${this.server}/${this.owner}`} // fetch | |||
| , title : 'chess-github' | |||
| , accessibility : ['public'] | |||
| , push : 'no-pushing' //, external : true, public : true | |||
| , push : 'no-pushing' //, external : true, public : true | |||
| , get username(){ return this.user.username } | |||
| , owner : 'chess' | |||
| } | |||
| } | |||
| @@ -57,34 +65,45 @@ module.exports = ((name, options)=>{ | |||
| utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION } | |||
| , remotes | |||
| , { 'userfork' : { | |||
| priority : 1, | |||
| server : `${options.reposerver}`, user : `${options.username}`, path : `` | |||
| , get url(){ return `${this.server}/${this.user}/${this.path}`} // fetch | |||
| , title : 'userfork' | |||
| priority : 1, | |||
| server : `${options.reposerver}`, user : { username : `${options.username}`}, path : `` | |||
| , get url(){ return `${this.server}/${this.user.username}`} // fetch | |||
| , title : 'userfork' | |||
| , get username(){ return this.user.username } | |||
| , get owner(){ return this.username } | |||
| , pushable : true | |||
| } | |||
| , 'userfork-public' : { | |||
| priority : 1, | |||
| server : `https://git.bbh.org.in`, user : `${options.username}`, path : `` | |||
| , get url(){ return `${this.server}/${this.user}/${this.path}`} | |||
| server : `https://git.bbh.org.in`, user : {username : `${options.username}`}, path : `` | |||
| , get url(){ return `${this.server}/${this.user.username}`} | |||
| // PB : TODO - Other users may have access to this users repo. However that needs to be defined as a new remote | |||
| , title : 'userfork-public' | |||
| , accessibility : ['public'] /*public : true, external: true */ | |||
| , get username(){ return this.user.username } | |||
| , get owner(){ return this.username } | |||
| , pushable : true | |||
| } | |||
| // PB : TODO -- Load private repositories from private config... | |||
| , 'userfork-private' : { priority : 2, | |||
| server : `http://git.bbh`, user : options.username || '', path : `` | |||
| , get url(){ return `${this.server}/${options.username}/${this.path}`} | |||
| server : `http://git.bbh`, user : { username : options.username || ''}, path : `` | |||
| , get url(){ return `${this.server}/${this.user.username}`} | |||
| , title : 'userfork-private' | |||
| , accessibility : ['private'] | |||
| } | |||
| , get username(){ return this.user.username } | |||
| , get owner(){ return this.username } | |||
| } | |||
| , 'userfork-unc' : { | |||
| priority : 3, | |||
| server : `//172.16.0.27/repos`, user : `${options.username}`, path : `` | |||
| , get url(){ return `${this.server}/${this.user}/${this.path}`} // fetch | |||
| server : `//172.16.0.27/repos`, user : { username : `${options.username}`}, path : `` | |||
| , get url(){ return `${this.server}/${this.user.username}`} // fetch | |||
| , title : 'userfork-unc' | |||
| , accessibility : ['unc'] | |||
| // , unc : true, private : true | |||
| } | |||
| , get username(){ return this.user.username } | |||
| , get owner(){ return this.username } | |||
| , pushable : true | |||
| } | |||
| } | |||
| ) | |||
| } | |||
| @@ -142,12 +161,6 @@ module.exports = ((name, options)=>{ | |||
| reposervers : Object.keys(reposerverinstances) | |||
| , reposerverinstances | |||
| , remotes | |||
| , get reposindexed(){ | |||
| // PB : TODO -- Implement -- One time gettor and then cached... | |||
| var indexed = {} | |||
| this.repos.forEach(r => { indexed[r.repo] = r }) | |||
| return indexed; | |||
| } | |||
| , repos : [ | |||
| { repo : 'elxr' } | |||
| ] | |||
| @@ -1,5 +1,6 @@ | |||
| const { any } = require('bbhverse'); | |||
| const fs = require('fs') | |||
| var path = require('path'); | |||
| var cli = require('./cliverse') | |||
| var nodeShellExec = cli.nodeShellExec; | |||
| @@ -25,12 +26,12 @@ var shell_verse = { | |||
| var __runasresult = null; | |||
| return taskToRun().then((r)=>{ | |||
| // PB : TODO -- Every elevation should have its own messaging file. Async writes from multiple processes are a problem here... | |||
| elevatedRunIPCWriteMessage( runlogjson, { info : taskToRun.info, success: true } ) | |||
| elevatedRunIPCWriteMessage( runlogjson, ', ' + JSON.stringify( { info : taskToRun.info, success: true }) ) | |||
| if(!inBatch) fs.writeFileSync('run.done', 'success') // PB : TODO -- This should be done conditionally if we are running inproc. | |||
| return __runasresult = r; | |||
| }) | |||
| .catch((e) => { | |||
| elevatedRunIPCWriteMessage( runlogjson, e ) | |||
| elevatedRunIPCWriteMessage( runlogjson, ', ' + JSON.stringify(e ) ) | |||
| if(!inBatch)fs.writeFileSync('run.done', 'failure') | |||
| console.error(e) | |||
| }) | |||
| @@ -138,14 +139,21 @@ var shell_verse = { | |||
| }).then((exitcode) => { | |||
| console.log('Elevated') | |||
| __isElevated = true; | |||
| }).catch(() => { | |||
| shell_verse.acquireElevationState = ()=> Promise.resolve(__isElevated); | |||
| shell_verse.isElevated = () => { return Promise.resolve(__isElevated)} | |||
| return __isElevated | |||
| }).catch((e) => { | |||
| __isElevated = false; | |||
| console.log('Not Elevated'); | |||
| }).finally(()=>{ | |||
| shell_verse.acquireElevationState = ()=> Promise.resolve(__isElevated); | |||
| shell_verse.isElevated = () => { return Promise.resolve(__isElevated)} | |||
| return __isElevated; | |||
| console.log('Not Elevated'); | |||
| return __isElevated | |||
| }) | |||
| // .finally(()=>{ | |||
| // shell_verse.acquireElevationState = ()=> Promise.resolve(__isElevated); | |||
| // shell_verse.isElevated = () => { return Promise.resolve(__isElevated)} | |||
| // // return __isElevated; // Value returned from finally is not supported by node. | |||
| // }) | |||
| } | |||
| , getTaskCheckExists : cli.createTask('getTaskCheckExists', 'where') | |||
| @@ -175,7 +183,7 @@ var shell_verse = { | |||
| console.log('result : ' + JSON.stringify(r)) | |||
| Object.keys(processedArgs).forEach((v) => { v != '_' ? namedArgs.push('--' + v + '=' + processedArgs[v]) : null; }) | |||
| // PB : TODO -- Convert all the cli args back to string. | |||
| var args = [`${selectedinstance.root}/.elxr/run-${taskToRun.runtimestamp}/windowselevate.hta`].concat(processedArgs._) | |||
| var args = [ path.normalize(`${selectedinstance.root}/.elxr/run-${taskToRun.runtimestamp}/windowselevate.hta`) ].concat(processedArgs._) | |||
| namedArgs.length > 0 ? args = args.concat(namedArgs.join(' ')) : null; | |||
| args.push('--runas=self'); | |||
| var elevatedruntimestamp = (new Date()).getTime() | |||