mirror of
https://github.com/mikefarah/yq.git
synced 2026-09-07 02:48:27 +08:00
fix: preserve original filename when using --front-matter (#2613)
When using --front-matter, yq creates a temporary file for the extracted YAML content but replaces the original filename in args with the temp file path. This caused the 'filename' operator to return the temp file path instead of the original filename. Added a filename alias mechanism: when front matter processing replaces the file path, it registers the original filename as an alias. The readDocuments and stream evaluator functions resolve aliases before setting candidateNode.filename. Fixes #2538 Co-authored-by: cobyfrombrooklyn-bot <cobyfrombrooklyn@gmail.com>
This commit is contained in:
co-authored by
cobyfrombrooklyn-bot
parent
c5cbf9760b
commit
b151522485
@@ -108,6 +108,55 @@ yaml: doc
|
||||
fmHandler.CleanUp()
|
||||
}
|
||||
|
||||
func TestFrontMatterFilenamePreserved(t *testing.T) {
|
||||
// Regression test for https://github.com/mikefarah/yq/issues/2538
|
||||
// When using --front-matter, the filename operator should return
|
||||
// the original filename, not the path to the temporary file.
|
||||
file := createTestFile(`---
|
||||
name: john
|
||||
---
|
||||
Some content
|
||||
`)
|
||||
originalFilename := "/path/to/original/file.md"
|
||||
|
||||
fmHandler := NewFrontMatterHandler(file)
|
||||
err := fmHandler.Split()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
tempFilename := fmHandler.GetYamlFrontMatterFilename()
|
||||
|
||||
// Register the alias (as the command code does)
|
||||
SetFilenameAlias(tempFilename, originalFilename)
|
||||
defer ClearFilenameAliases()
|
||||
|
||||
// Verify resolveFilename returns the original name
|
||||
resolved := resolveFilename(tempFilename)
|
||||
test.AssertResult(t, originalFilename, resolved)
|
||||
|
||||
// Read documents using the temp file, verify they get the original filename
|
||||
reader, err := readStream(tempFilename)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
decoder := NewYamlDecoder(ConfiguredYamlPreferences)
|
||||
docs, err := readDocuments(reader, tempFilename, 0, decoder)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if docs.Len() == 0 {
|
||||
t.Fatal("expected at least one document")
|
||||
}
|
||||
|
||||
firstDoc := docs.Front().Value.(*CandidateNode)
|
||||
test.AssertResult(t, originalFilename, firstDoc.filename)
|
||||
|
||||
tryRemoveTempFile(file)
|
||||
fmHandler.CleanUp()
|
||||
}
|
||||
|
||||
func TestFrontMatterSplitWithArray(t *testing.T) {
|
||||
file := createTestFile(`[1,2,3]
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user