]> git.lyx.org Git - lyx.git/commitdiff
Handle the case of outdated chkconfig.ltx in user directory
authorJuergen Spitzmueller <spitz@lyx.org>
Sat, 20 Apr 2024 12:57:12 +0000 (14:57 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Sat, 20 Apr 2024 12:57:12 +0000 (14:57 +0200)
src/LaTeXPackages.cpp
src/LaTeXPackages.h

index e708df1dfe2b2ac0d52dcd6a2ccd44a3d0d79a47..0f4129eabe2acd488cac1f70b284ffdabce988af 100644 (file)
 #include "support/debug.h"
 #include "support/FileName.h"
 #include "support/filetools.h"
+#include "support/gettext.h"
 #include "support/lstrings.h"
 #include "support/Package.h"
 
+#include "frontends/alert.h"
+
 
 using namespace std;
 using namespace lyx::support;
@@ -35,7 +38,7 @@ namespace lyx {
 LaTeXPackages::Packages LaTeXPackages::packages_;
 
 
-void LaTeXPackages::getAvailable()
+void LaTeXPackages::getAvailable(bool retry)
 {
        Lexer lex;
        support::FileName const real_file = libFileSearch("", "packages.lst");
@@ -73,10 +76,40 @@ void LaTeXPackages::getAvailable()
                }
        }
        // Check if the pkglist has current format.
-       // Reconfigure and re-parse if not.
+       // Reconfigure once and re-parse if not.
        if (lstformat != "2") {
+               // If we have already reconfigured, check if there is an outdated config file
+               // which produces the outdated lstformat
+               if (retry) {
+                       // check if we have an outdated chkconfig.ltx file in user dir
+                       support::FileName chkconfig = fileSearch(addPath(package().user_support().absFileName(), ""),
+                                                                "chkconfig.ltx", string(), must_exist);
+                       if (chkconfig.empty()) {
+                               // nothing found. So we can only warn
+                               frontend::Alert::warning(_("Invalid package list format!"),
+                                       _("The format of your LaTeX packages list is wrong. Please file a bug report."));
+                               return;
+                       }
+                       // Found. Try to rename and warn.
+                       support::FileName chkconfig_bak;
+                       chkconfig_bak.set(chkconfig.absFileName() + ".bak");
+                       if (chkconfig.renameTo(chkconfig_bak))
+                               // renaming succeeded
+                               frontend::Alert::warning(_("Outdated configuration script detected!"),
+                                       _("We have detected an outdated script 'chkconfig.ltx' in your user directory.\n"
+                                         "The script has been renamed to 'chkconfig.ltx.bak'.\n"
+                                         "If you did not copy the script there by purpose, you can safely delete it."));
+                       else {
+                               // renaming failed
+                               frontend::Alert::warning(_("Outdated configuration script detected!"),
+                                       bformat(_("We have detected an outdated script 'chkconfig.ltx' in your user directory\n"
+                                         "(%1$s).\n"
+                                         "Please delete or update this file!"), from_utf8(chkconfig.absFileName())));
+                               return;
+                       }
+               }
                package().reconfigureUserLyXDir("");
-               getAvailable();
+               getAvailable(true);
        }
 }
 
index dba6d039f6143d63ae45f4df4777ee6d6fc5608a..12f3e4ec0b8d4a830621e01a75b34a9a09c3dbe7 100644 (file)
@@ -25,7 +25,7 @@ namespace lyx {
 class LaTeXPackages {
 public:
        /// Which of the required packages are installed?
-       static void getAvailable();
+       static void getAvailable(bool retry = false);
        /// Is the (required) package available?
        static bool isAvailable(std::string const & name);
        /// Is the (required) package available at least as of