added possibility to ignore MagicMirror repo in updatenotification (#3002)

was [requested in the
forum](https://forum.magicmirror.builders/topic/17519/updatenotification).

- added possibility to exclude MagicMirror Repo and renamed it from
`default` to `MagicMirror`
- improved getting `behind` in case a hard `git fetch` was already done
- removed test "excludes repo if refs don't match regex" because of
above improvement this case is obsolete
- improved `git fetch --dry-run` with `-n` option to exclude tags (noise
reduction)
This commit is contained in:
Karsten Hassel
2023-01-12 09:14:20 +01:00
committed by GitHub
parent 877f8ad380
commit 29e3ec06cb
7 changed files with 22 additions and 24 deletions

View File

@@ -13,6 +13,7 @@ _This release is scheduled to be released on 2023-04-01._
- Added increments for hourly forecasts in weather module (#2996)
- Added tests for hourly weather forecast
- Added possibility to ignore MagicMirror repo in updatenotification module
### Removed

View File

@@ -36,7 +36,7 @@ class GitHelper {
async add(moduleName) {
let moduleFolder = BASE_DIR;
if (moduleName !== "default") {
if (moduleName !== "MagicMirror") {
moduleFolder = `${moduleFolder}modules/${moduleName}`;
}
@@ -68,7 +68,7 @@ class GitHelper {
isBehindInStatus: false
};
if (repo.module === "default") {
if (repo.module === "MagicMirror") {
// the hash is only needed for the mm repo
const { stderr, stdout } = await this.execShell(`cd ${repo.folder} && git rev-parse HEAD`);
@@ -121,7 +121,7 @@ class GitHelper {
return gitInfo;
}
const { stderr } = await this.execShell(`cd ${repo.folder} && git fetch --dry-run`);
const { stderr } = await this.execShell(`cd ${repo.folder} && git fetch -n --dry-run`);
// example output:
// From https://github.com/MichMich/MagicMirror
@@ -129,14 +129,16 @@ class GitHelper {
// here the result is in stderr (this is a git default, don't ask why ...)
const matches = stderr.match(this.getRefRegex(gitInfo.current));
if (!matches || !matches[0]) {
// no refs found, nothing to do
return;
// this is the default if there was no match from "git fetch -n --dry-run".
// Its a fallback because if there was a real "git fetch", the above "git fetch -n --dry-run" would deliver nothing.
let refDiff = gitInfo.current + "..origin/" + gitInfo.current;
if (matches && matches[0]) {
refDiff = matches[0];
}
// get behind with refs
try {
const { stdout } = await this.execShell(`cd ${repo.folder} && git rev-list --ancestry-path --count ${matches[0]}`);
const { stdout } = await this.execShell(`cd ${repo.folder} && git rev-list --ancestry-path --count ${refDiff}`);
gitInfo.behind = parseInt(stdout);
return gitInfo;

View File

@@ -19,7 +19,9 @@ module.exports = NodeHelper.create({
}
}
await this.gitHelper.add("default");
if (!this.ignoreUpdateChecking("MagicMirror")) {
await this.gitHelper.add("MagicMirror");
}
},
async socketNotificationReceived(notification, payload) {

View File

@@ -77,7 +77,7 @@ Module.register("updatenotification", {
addFilters() {
this.nunjucksEnvironment().addFilter("diffLink", (text, status) => {
if (status.module !== "default") {
if (status.module !== "MagicMirror") {
return text;
}

View File

@@ -3,7 +3,7 @@
<div class="small bright">
<i class="fas fa-exclamation-circle"></i>
<span>
{% set mainTextLabel = "UPDATE_NOTIFICATION" if name === "default" else "UPDATE_NOTIFICATION_MODULE" %}
{% set mainTextLabel = "UPDATE_NOTIFICATION" if name === "MagicMirror" else "UPDATE_NOTIFICATION_MODULE" %}
{{ mainTextLabel | translate({MODULE_NAME: name}) }}
</span>
</div>

View File

@@ -11,24 +11,24 @@ exports[`Updatenotification custom module returns status information without has
}
`;
exports[`Updatenotification default returns status information 1`] = `
exports[`Updatenotification MagicMirror returns status information 1`] = `
{
"behind": 5,
"current": "develop",
"hash": "332e429a41f1a2339afd4f0ae96dd125da6beada",
"isBehindInStatus": false,
"module": "default",
"module": "MagicMirror",
"tracking": "origin/develop",
}
`;
exports[`Updatenotification default returns status information early if isBehindInStatus 1`] = `
exports[`Updatenotification MagicMirror returns status information early if isBehindInStatus 1`] = `
{
"behind": 5,
"current": "develop",
"hash": "332e429a41f1a2339afd4f0ae96dd125da6beada",
"isBehindInStatus": true,
"module": "default",
"module": "MagicMirror",
"tracking": "origin/develop",
}
`;

View File

@@ -57,7 +57,7 @@ describe("Updatenotification", () => {
return { stdout: gitRevParseOut, stderr: gitRevParseErr };
} else if (command.includes("git status -sb")) {
return { stdout: gitStatusOut, stderr: gitStatusErr };
} else if (command.includes("git fetch --dry-run")) {
} else if (command.includes("git fetch -n --dry-run")) {
return { stdout: gitFetchOut, stderr: gitFetchErr };
} else if (command.includes("git rev-list --ancestry-path --count")) {
return { stdout: gitRevListOut, stderr: gitRevListErr };
@@ -71,8 +71,8 @@ describe("Updatenotification", () => {
jest.clearAllMocks();
});
describe("default", () => {
const moduleName = "default";
describe("MagicMirror", () => {
const moduleName = "MagicMirror";
beforeEach(async () => {
gitRemoteOut = "origin\tgit@github.com:MichMich/MagicMirror.git (fetch)\norigin\tgit@github.com:MichMich/MagicMirror.git (push)\n";
@@ -108,13 +108,6 @@ describe("Updatenotification", () => {
const { error } = require("logger");
expect(error).toHaveBeenCalledWith(`Failed to retrieve repo info for ${moduleName}: Failed to retrieve status`);
});
it("excludes repo if refs don't match regex", async () => {
gitFetchErr = "";
const repos = await gitHelper.getRepos();
expect(repos.length).toBe(0);
});
});
describe("custom module", () => {