commit 2e433654c7f3db02bfd0e4dd09eb04cd8ab44bb9
Author: Richard Kimberly Heck <[email protected]>
Date: Thu May 30 20:32:35 2019 -0400
Fix bug #11588.
Check for the local file before calling kpsewhich.
---
src/Buffer.cpp | 22 +++++++++++++++-------
1 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index 848f1f4..e16ac16 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -2467,17 +2467,25 @@ FileName Buffer::getBibfilePath(docstring const &
bibid) const
map<docstring, FileName>::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;