Handle the case of outdated chkconfig.ltx in user directory

This commit is contained in:
Juergen Spitzmueller 2024-04-20 14:57:12 +02:00
parent c8b32ebe72
commit b8ff824a4f
2 changed files with 37 additions and 4 deletions

View File

@ -22,9 +22,12 @@
#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);
}
}

View 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