From d820a6831d5b5409e4d1786927d64f4b79cec5a3 Mon Sep 17 00:00:00 2001
From: Thomas Schouten <hollandpirates@gmail.com>
Date: Mon, 27 Jan 2025 19:17:03 +0100
Subject: [PATCH] Fix package update cache

---
 .../inspections/latex/probablebugs/packages.xml   |  2 +-
 .../packages/LatexPackageUpdateInspection.kt      | 15 ++++++++++-----
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/resources/META-INF/extensions/inspections/latex/probablebugs/packages.xml b/resources/META-INF/extensions/inspections/latex/probablebugs/packages.xml
index db654fe87..9a011ebcd 100644
--- a/resources/META-INF/extensions/inspections/latex/probablebugs/packages.xml
+++ b/resources/META-INF/extensions/inspections/latex/probablebugs/packages.xml
@@ -10,7 +10,7 @@
                          level="WARNING" />
         <localInspection language="Latex" implementationClass="nl.hannahsten.texifyidea.inspections.latex.probablebugs.packages.LatexPackageUpdateInspection"
                          groupPath="LaTeX" groupName="Probable bugs" displayName="Package has an update available"
-                         enabledByDefault="true"
+                         enabledByDefault="false"
                          level="WARNING" />
         <localInspection language="Latex" implementationClass="nl.hannahsten.texifyidea.inspections.latex.probablebugs.packages.LatexPackageNameDoesNotMatchFileNameInspection"
                          groupPath="LaTeX" groupName="Probable bugs" displayName="Package name does not match file name"
diff --git a/src/nl/hannahsten/texifyidea/inspections/latex/probablebugs/packages/LatexPackageUpdateInspection.kt b/src/nl/hannahsten/texifyidea/inspections/latex/probablebugs/packages/LatexPackageUpdateInspection.kt
index 10bfc761d..9a5e46c9c 100644
--- a/src/nl/hannahsten/texifyidea/inspections/latex/probablebugs/packages/LatexPackageUpdateInspection.kt
+++ b/src/nl/hannahsten/texifyidea/inspections/latex/probablebugs/packages/LatexPackageUpdateInspection.kt
@@ -34,7 +34,7 @@ class LatexPackageUpdateInspection : TexifyInspectionBase() {
 
     object Cache {
         /** Map package name to old and new revision number */
-        var availablePackageUpdates = mapOf<String, Pair<String?, String?>>()
+        var availablePackageUpdates: Map<String, Pair<String?, String?>>? = null
     }
 
     override val inspectionGroup = InsightGroup.LATEX
@@ -46,9 +46,14 @@ class LatexPackageUpdateInspection : TexifyInspectionBase() {
     override fun inspectFile(file: PsiFile, manager: InspectionManager, isOntheFly: Boolean): List<ProblemDescriptor> {
         if (!LatexSdkUtil.isTlmgrAvailable(file.project) || !TexliveSdk.Cache.isAvailable) return emptyList()
 
-        if (Cache.availablePackageUpdates.isEmpty()) {
+        if (Cache.availablePackageUpdates == null) {
             val tlmgrExecutable = LatexSdkUtil.getExecutableName("tlmgr", file.project)
-            val result = runCommand(tlmgrExecutable, "update", "--list") ?: return emptyList()
+            val result = runCommand(tlmgrExecutable, "update", "--list")
+            // Try to fill the cache only once
+            if (result == null) {
+                Cache.availablePackageUpdates = mapOf()
+                return emptyList()
+            }
             Cache.availablePackageUpdates = """update:\s*(?<package>[^ ]+).*local:\s*(?<local>\d+), source:\s*(?<source>\d+)""".toRegex()
                 .findAll(result)
                 .mapNotNull { Pair(it.groups["package"]?.value ?: return@mapNotNull null, Pair(it.groups["local"]?.value, it.groups["source"]?.value)) }
@@ -57,10 +62,10 @@ class LatexPackageUpdateInspection : TexifyInspectionBase() {
 
         return file.childrenOfType<LatexCommands>()
             .filter { it.name in CommandMagic.packageInclusionCommands }
-            .filter { it.requiredParameter(0) in Cache.availablePackageUpdates.keys }
+            .filter { it.requiredParameter(0) in Cache.availablePackageUpdates!!.keys }
             .mapNotNull {
                 val packageName = it.requiredParameter(0) ?: return@mapNotNull null
-                val packageVersions = Cache.availablePackageUpdates[packageName] ?: return@mapNotNull null
+                val packageVersions = Cache.availablePackageUpdates!![packageName] ?: return@mapNotNull null
                 manager.createProblemDescriptor(
                     it,
                     "Update available for package $packageName",