mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-06-27 19:53:36 +00:00
dirty working snapshot
This commit is contained in:
parent
06389e35f9
commit
860840c367
@ -1,5 +1,5 @@
|
||||
const SimpleGit = require("simple-git");
|
||||
const simpleGits = [];
|
||||
const { exec } = require("child_process");
|
||||
const gitRepos = [];
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
const defaultModules = require(__dirname + "/../defaultmodules.js");
|
||||
@ -18,7 +18,7 @@ module.exports = NodeHelper.create({
|
||||
// Push MagicMirror itself , biggest chance it'll show up last in UI and isn't overwritten
|
||||
// others will be added in front
|
||||
// this method returns promises so we can't wait for every one to resolve before continuing
|
||||
simpleGits.push({ module: "default", git: this.createGit(path.normalize(__dirname + "/../../../")) });
|
||||
gitRepos.push({ module: "default", folder: path.normalize(__dirname + "/../../../") });
|
||||
|
||||
for (let moduleName in modules) {
|
||||
if (!this.ignoreUpdateChecking(moduleName)) {
|
||||
@ -30,9 +30,10 @@ module.exports = NodeHelper.create({
|
||||
// Throws error if file doesn't exist
|
||||
fs.statSync(path.join(moduleFolder, ".git"));
|
||||
// Fetch the git or throw error if no remotes
|
||||
let git = await this.resolveRemote(moduleFolder);
|
||||
if (this.isGitRepo(moduleFolder)) {
|
||||
// Folder has .git and has at least one git remote, watch this folder
|
||||
simpleGits.unshift({ module: moduleName, git: git });
|
||||
gitRepos.unshift({ module: moduleName, folder: moduleFolder });
|
||||
}
|
||||
} catch (err) {
|
||||
// Error when directory .git doesn't exist or doesn't have any remotes
|
||||
// This module is not managed with git, skip
|
||||
@ -54,36 +55,89 @@ module.exports = NodeHelper.create({
|
||||
}
|
||||
},
|
||||
|
||||
resolveRemote: async function (moduleFolder) {
|
||||
let git = this.createGit(moduleFolder);
|
||||
let remotes = await git.getRemotes(true);
|
||||
|
||||
if (remotes.length < 1 || remotes[0].name.length < 1) {
|
||||
throw new Error("No valid remote for folder " + moduleFolder);
|
||||
isGitRepo: function (moduleFolder) {
|
||||
exec("cd " + moduleFolder + " && git remote -v", (err, stdout, stderr) => {
|
||||
if (err) {
|
||||
Log.error("Failed to fetch git data for " + moduleFolder + ": " + err);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
return git;
|
||||
return true;
|
||||
},
|
||||
|
||||
performFetch: async function () {
|
||||
for (let sg of simpleGits) {
|
||||
try {
|
||||
let fetchData = await sg.git.fetch(["--dry-run"]).status();
|
||||
let logData = await sg.git.log({ "-1": null });
|
||||
|
||||
if (logData.latest && "hash" in logData.latest) {
|
||||
this.sendSocketNotification("STATUS", {
|
||||
module: sg.module,
|
||||
behind: fetchData.behind,
|
||||
current: fetchData.current,
|
||||
hash: logData.latest.hash,
|
||||
tracking: fetchData.tracking
|
||||
performFetch: function () {
|
||||
for (let repo of gitRepos) {
|
||||
let gitInfo = {
|
||||
module: repo.module,
|
||||
// commits behind:
|
||||
behind: 0,
|
||||
// branch name:
|
||||
current: "",
|
||||
// current hash:
|
||||
hash: "",
|
||||
// remote branch:
|
||||
tracking: ""
|
||||
};
|
||||
exec("cd " + repo.folder + " && git rev-parse HEAD", (err, stdout, stderr) => {
|
||||
if (err) {
|
||||
Log.error("Failed to get current commit hash for " + repo.module + ": " + err + " " + stderr);
|
||||
} else {
|
||||
// console.log(stdout);
|
||||
gitInfo.hash = stdout;
|
||||
// console.log("hash: " + gitInfo.hash);
|
||||
exec("cd " + repo.folder + " && git status -sb", (err, stdout, stderr) => {
|
||||
if (err) {
|
||||
Log.error("Failed to get git status for " + repo.module + ": " + err + " " + stderr);
|
||||
} else {
|
||||
let status = stdout.split("\n")[0];
|
||||
// console.log(repo.module);
|
||||
status = status.match(/(?![.#])([^.]*)/g);
|
||||
gitInfo.current = status[0].trim();
|
||||
// console.log("current: " + gitInfo.current);
|
||||
status = status[1].split(" ");
|
||||
gitInfo.tracking = status[0].trim();
|
||||
// console.log("tracking: " + gitInfo.tracking);
|
||||
if (status[2]) {
|
||||
gitInfo.behind = parseInt(status[2].substring(0, status[2].length - 1));
|
||||
// console.log("behind: " + gitInfo.behind);
|
||||
this.sendSocketNotification("STATUS", gitInfo);
|
||||
} else {
|
||||
exec("cd " + repo.folder + " && git fetch --dry-run", (err, stdout, stderr) => {
|
||||
if (err) {
|
||||
Log.error("Failed to fetch git data for " + repo.module + ": " + err);
|
||||
} else {
|
||||
// console.log(repo.module);
|
||||
// console.dir(stderr);
|
||||
if (stderr !== "") {
|
||||
// get behind
|
||||
gitInfo.behind = 1;
|
||||
let refs = stderr.split('\n')[1].match(/s*([a-z,0-9]+[\.]+[a-z,0-9]+)s*/g)[0];
|
||||
// console.dir(refs);
|
||||
if (refs === "") {
|
||||
this.sendSocketNotification("STATUS", gitInfo);
|
||||
} else {
|
||||
exec("cd " + repo.folder + " && git rev-list --ancestry-path --count " + refs, (err, stdout, stderr) => {
|
||||
gitInfo.behind = parseInt(stdout);
|
||||
// console.log("behind: " + gitInfo.behind);
|
||||
this.sendSocketNotification("STATUS", gitInfo);
|
||||
});
|
||||
}
|
||||
} catch (err) {
|
||||
Log.error("Failed to fetch git data for " + sg.module + ": " + err);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
// let gitInfo = await this.getGitData(repo);
|
||||
// if (gitInfo) {
|
||||
// console.dir(gitInfo);
|
||||
// this.sendSocketNotification("STATUS", gitInfo);
|
||||
// }
|
||||
}
|
||||
|
||||
this.scheduleNextFetch(this.config.updateInterval);
|
||||
},
|
||||
@ -100,10 +154,6 @@ module.exports = NodeHelper.create({
|
||||
}, delay);
|
||||
},
|
||||
|
||||
createGit: function (folder) {
|
||||
return SimpleGit({ baseDir: folder, timeout: { block: this.config.timeout } });
|
||||
},
|
||||
|
||||
ignoreUpdateChecking: function (moduleName) {
|
||||
// Should not check for updates for default modules
|
||||
if (defaultModules.indexOf(moduleName) >= 0) {
|
||||
@ -119,3 +169,9 @@ module.exports = NodeHelper.create({
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// [03.09.2021 23:02.36.382] [LOG] hash: e19a42879896d2d8e2406fcb3fd4fdcf15d2ed6b
|
||||
// [03.09.2021 23:02.36.382] [LOG] trackingorigin/master
|
||||
// [03.09.2021 23:02.36.714] [LOG] hash: e40ddd4b69424349768b7e451d9c4f52ac4efe45
|
||||
// [03.09.2021 23:02.36.714] [LOG] trackingorigin/develop
|
||||
|
Loading…
x
Reference in New Issue
Block a user