From 80699aa7c56462a70ee0f6fdf217ed700c4e12ae Mon Sep 17 00:00:00 2001 From: s2 Date: Fri, 18 May 2018 12:57:15 +0200 Subject: [PATCH] ! --- .jscsrc | 78 ++++++++++++++++++++++ app/index.html | 7 +- app/js/index.js | 7 +- app/js/templates.js | 21 ++++-- app/main.js | 92 +++++++++++++++++++++++++- app/node_modules/minimist/package.json | 16 +++-- app/package-lock.json | 3 +- app/package.json | 3 +- 8 files changed, 202 insertions(+), 25 deletions(-) create mode 100644 .jscsrc diff --git a/.jscsrc b/.jscsrc new file mode 100644 index 00000000..5f97e000 --- /dev/null +++ b/.jscsrc @@ -0,0 +1,78 @@ +{ + "requireCurlyBraces": [ + "if", + "else", + "for", + "while", + "do", + "try", + "catch" + ], + "requireSpaceAfterKeywords": [ + "if", + "else", + "for", + "while", + "do", + "switch", + "case", + "return", + "try" + ], + "requireSpaceBeforeKeywords": [ + "else", + "catch" + ], + "disallowSpaceAfterKeywords": [ + "catch" + ], + "requireSpaceBeforeBlockStatements": true, + "requireParenthesesAroundIIFE": true, + "requireSpacesInConditionalExpression": true, + "disallowSpacesInNamedFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInFunctionDeclaration": { + "beforeOpeningRoundBrace": true + }, + "disallowSpacesInFunctionExpression": { + "beforeOpeningRoundBrace": true + }, + "requireSpaceBetweenArguments": true, + "disallowMultipleVarDecl": true, + "requireVarDeclFirst": false, + "requireBlocksOnNewline": false, + "disallowEmptyBlocks": true, + "disallowSpacesInsideArrayBrackets": true, + "disallowSpacesInsideObjectBrackets": true, + "disallowSpacesInsideParentheses": true, + "disallowDanglingUnderscores": false, + "requireCommaBeforeLineBreak": true, + "disallowSpaceAfterPrefixUnaryOperators": true, + "disallowSpaceBeforePostfixUnaryOperators": true, + "disallowSpaceBeforeBinaryOperators": [ + "," + ], + "requireSpacesInForStatement": true, + "requireSpacesInAnonymousFunctionExpression": { + "beforeOpeningCurlyBrace": true + }, + "requireSpaceBeforeBinaryOperators": true, + "requireSpaceAfterBinaryOperators": true, + "disallowKeywords": [ + "with" + ], + "validateIndentation": "\t", + "disallowMixedSpacesAndTabs": true, + "disallowTrailingWhitespace": true, + "disallowTrailingComma": true, + "disallowKeywordsOnNewLine": [ + "else" + ], + "requireLineFeedAtFileEnd": true, + "requireCapitalizedConstructors": true, + "requireDotNotation": false, + "disallowNewlineBeforeBlockStatements": true, + "disallowMultipleLineStrings": true, + "requireSpaceBeforeObjectValues": true +} diff --git a/app/index.html b/app/index.html index 67f6fbc0..9927d51b 100644 --- a/app/index.html +++ b/app/index.html @@ -14,9 +14,8 @@ - - + diff --git a/app/js/index.js b/app/js/index.js index 4da328e2..f2c1330c 100644 --- a/app/js/index.js +++ b/app/js/index.js @@ -1,5 +1,6 @@ (function($) { - require('electron').ipcRenderer.on('ping', (event, message) => { - console.log(message) // Prints 'whoooooooh!' - }) + let ipcRenderer = require('electron').ipcRenderer; + ipcRenderer.on('fileList', (event, files) => { + $('body').html(gitlit.templates.main({files: files})); + }); })(jQuery); diff --git a/app/js/templates.js b/app/js/templates.js index dd09fe2d..b05be8ed 100644 --- a/app/js/templates.js +++ b/app/js/templates.js @@ -1,17 +1,26 @@ window.gitlit = window.gitlit || {}; gitlit.templates = { main: ejs.compile(` - +
- - - - - + + <% files.forEach((file) => { %> + + + + + + <% }); %> +
file status action
ciccio.txtlocked
<%= file.file %><%= file.lockedBy ? file.lockedBy + ' (id: ' + file.id + ')' : 'not locked' %> + + <%= file.lockedBy ? 'Unlock' : 'Lock' %> + +
`) }; diff --git a/app/main.js b/app/main.js index a6afee68..0d0a218b 100644 --- a/app/main.js +++ b/app/main.js @@ -2,9 +2,79 @@ const {app, BrowserWindow} = require('electron'); const path = require('path'); const url = require('url'); const electronLocalshortcut = require('electron-localshortcut'); +const exec = require('child_process').exec; +const args = require('minimist')(process.argv.slice(2), { + default: { + _: process.cwd() + } +}); -function createWindow () { +function getLfsFileList(dir, cb) { + exec('git lfs ls-files', { + cwd: dir + }, + (error, stdout, stderr) => { + if (error) { + cb(error); + return; + } + if (stdout) { + let files = stdout.split('\n'); + let parsedFiles = []; + files.forEach((file) => { + file = file.split(' * '); + if (file[1]) { + parsedFiles.push(file[1].trim()); + } + }); + + cb(null, parsedFiles); + } + }); +}; + +function getLfsLocks(dir, cb) { + exec('git lfs locks', { + cwd: dir + }, + (error, stdout, stderr) => { + if (error) { + cb(error); + return; + } + if (stdout) { + let files = stdout.split('\n'); + let parsedFiles = []; + files.forEach((file) => { + if (file) { + let fileName = file.split('\t')[0].trim(); + let lockedBy = file.split('\t')[1].trim(); + let id = file.split('ID:')[1].trim(); + parsedFiles.push({ + file: fileName, + lockedBy: lockedBy, + id: id + }); + } + }); + + cb(null, parsedFiles); + } + }); +}; + +function getArrayObjectByKey(array, key, value, defaultKeyValue) { + let o = array.filter((e) => { + return e[key] === value; + }); + if (o.length > 0) { + return defaultKeyValue ? o[0][defaultKeyValue] : o[0]; + } + return undefined; +} + +function createWindow() { // Create the browser window. win = new BrowserWindow({width: 800, height: 600}); win.setMenu(null); @@ -21,7 +91,25 @@ function createWindow () { }); win.webContents.on('did-finish-load', () => { - win.webContents.send('ping', 'whoooooooh!') + console.log('getting file list and lock status...'); + + getLfsFileList(args._.join(' '), (err, files) => { + getLfsLocks(args._.join(' '), (err, lockedFiles) => { + let allFiles = []; + + files.forEach((file) => { + const t = { + file: file, + lockedBy: getArrayObjectByKey(lockedFiles, 'file', file, 'lockedBy'), + id: getArrayObjectByKey(lockedFiles, 'file', file, 'id') + }; + + allFiles.push(t); + }); + + win.webContents.send('fileList', allFiles); + }); + }); }); } diff --git a/app/node_modules/minimist/package.json b/app/node_modules/minimist/package.json index 3d57ae80..61dc9999 100644 --- a/app/node_modules/minimist/package.json +++ b/app/node_modules/minimist/package.json @@ -1,21 +1,23 @@ { - "_from": "minimist@^1.2.0", + "_from": "minimist", "_id": "minimist@1.2.0", "_inBundle": false, "_integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "_location": "/minimist", "_phantomChildren": {}, "_requested": { - "type": "range", + "type": "tag", "registry": true, - "raw": "minimist@^1.2.0", + "raw": "minimist", "name": "minimist", "escapedName": "minimist", - "rawSpec": "^1.2.0", + "rawSpec": "", "saveSpec": null, - "fetchSpec": "^1.2.0" + "fetchSpec": "latest" }, "_requiredBy": [ + "#USER", + "/", "/electron-download", "/meow", "/nugget", @@ -23,8 +25,8 @@ ], "_resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "_shasum": "a35008b20f41383eec1fb914f4cd5df79a264284", - "_spec": "minimist@^1.2.0", - "_where": "E:\\projects\\p\\gitlit\\app\\node_modules\\electron-download", + "_spec": "minimist", + "_where": "E:\\projects\\p\\gitlit\\app", "author": { "name": "James Halliday", "email": "mail@substack.net", diff --git a/app/package-lock.json b/app/package-lock.json index 3695b373..ce8f62fc 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -761,8 +761,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, "mkdirp": { "version": "0.5.0", diff --git a/app/package.json b/app/package.json index 3c531083..fbd6437e 100644 --- a/app/package.json +++ b/app/package.json @@ -7,7 +7,8 @@ "bootstrap": "^4.1.1", "ejs": "^2.6.1", "electron-localshortcut": "^3.1.0", - "jquery": "^3.3.1" + "jquery": "^3.3.1", + "minimist": "^1.2.0" }, "devDependencies": { "electron": "^2.0.1"