Skip to content

Commit 93da8e1

Browse files
authored
fix(gatsby-source-filesystem): fix extension guessing on warm cache (#24613)
1 parent 565895b commit 93da8e1

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

packages/gatsby-source-filesystem/src/create-remote-file-node.js

+15-7
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ const {
1414
getRemoteFileName,
1515
createFilePath,
1616
} = require(`./utils`)
17-
const cacheId = url => `create-remote-file-node-${url}`
17+
const cacheIdForHeaders = url => `create-remote-file-node-headers-${url}`
18+
const cacheIdForExtensions = url => `create-remote-file-node-extension-${url}`
1819

1920
let bar
2021
// Keep track of the total number of jobs we push in the queue
@@ -208,7 +209,7 @@ async function processRemoteNode({
208209
const pluginCacheDir = cache.directory
209210
// See if there's response headers for this url
210211
// from a previous request.
211-
const cachedHeaders = await cache.get(cacheId(url))
212+
const cachedHeaders = await cache.get(cacheIdForHeaders(url))
212213

213214
const headers = { ...httpHeaders }
214215
if (cachedHeaders && cachedHeaders.etag) {
@@ -238,15 +239,22 @@ async function processRemoteNode({
238239

239240
if (response.statusCode == 200) {
240241
// Save the response headers for future requests.
241-
await cache.set(cacheId(url), response.headers)
242+
await cache.set(cacheIdForHeaders(url), response.headers)
242243
}
243244

244245
// If the user did not provide an extension and we couldn't get one from remote file, try and guess one
245246
if (ext === ``) {
246-
const buffer = readChunk.sync(tmpFilename, 0, fileType.minimumBytes)
247-
const filetype = fileType(buffer)
248-
if (filetype) {
249-
ext = `.${filetype.ext}`
247+
if (response.statusCode === 200) {
248+
// if this is fresh response - try to guess extension and cache result for future
249+
const buffer = readChunk.sync(tmpFilename, 0, fileType.minimumBytes)
250+
const filetype = fileType(buffer)
251+
if (filetype) {
252+
ext = `.${filetype.ext}`
253+
await cache.set(cacheIdForExtensions(url), ext)
254+
}
255+
} else if (response.statusCode === 304) {
256+
// if file on server didn't change - grab cached extension
257+
ext = await cache.get(cacheIdForExtensions(url))
250258
}
251259
}
252260

0 commit comments

Comments
 (0)