From 2e433654c7f3db02bfd0e4dd09eb04cd8ab44bb9 Mon Sep 17 00:00:00 2001 From: Richard Kimberly Heck Date: Thu, 30 May 2019 20:32:35 -0400 Subject: [PATCH] Fix bug #11588. Check for the local file before calling kpsewhich. --- src/Buffer.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 848f1f46e3..e16ac169cc 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -2467,17 +2467,25 @@ FileName Buffer::getBibfilePath(docstring const & bibid) const map::const_iterator it = bibfileCache.find(bibid); if (it != bibfileCache.end()) { - // i.e., bibfileCache[bibid] + // i.e., return bibfileCache[bibid]; return it->second; } LYXERR(Debug::FILES, "Reading file location for " << bibid); - string texfile = changeExtension(to_utf8(bibid), "bib"); - // note that, if the filename can be found directly from the path, - // findtexfile will just return a FileName object for that path. - FileName file(findtexfile(texfile, "bib")); - if (file.empty()) - file = FileName(makeAbsPath(texfile, filePath())); + string const texfile = changeExtension(to_utf8(bibid), "bib"); + // we need to check first if this file exists where it's said to be. + // there's a weird bug that occurs otherwise: if the file is in the + // Buffer's directory but has the same name as some file that would be + // found by kpsewhich, then we find the latter, not the former. + FileName const local_file = makeAbsPath(texfile, filePath()); + FileName file = local_file; + if (!file.exists()) { + // there's no need now to check whether the file can be found + // locally + file = findtexfile(texfile, "bib", true); + if (file.empty()) + file = FileName(makeAbsPath(texfile, filePath())); + } LYXERR(Debug::FILES, "Found at: " << file); bibfileCache[bibid] = file; -- 2.39.5