Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package dyff for openSUSE:Factory checked in at 2026-04-30 20:28:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/dyff (Old) and /work/SRC/openSUSE:Factory/.dyff.new.30200 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "dyff" Thu Apr 30 20:28:38 2026 rev:20 rq:1350133 version:1.12.0 Changes: -------- --- /work/SRC/openSUSE:Factory/dyff/dyff.changes 2026-03-18 16:52:24.337775429 +0100 +++ /work/SRC/openSUSE:Factory/.dyff.new.30200/dyff.changes 2026-04-30 20:28:39.602553602 +0200 @@ -1,0 +2,21 @@ +Thu Apr 30 05:06:16 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 1.12.0: + * Omit YAML document start marker for single-document output +- Update to version 1.11.4: + * Bump `github.com/gonvenience/ytbx` to `v1.5.0` + * build(deps): bump dependabot/fetch-metadata from 3.0.0 to 3.1.0 + * build(deps): bump golang.org/x/tools from 0.43.0 to 0.44.0 + * build(deps): bump golang.org/x/net from 0.52.0 to 0.53.0 + * build(deps): bump golang.org/x/text from 0.35.0 to 0.36.0 + * build(deps): bump golang.org/x/term from 0.41.0 to 0.42.0 + * build(deps): bump golang.org/x/mod from 0.34.0 to 0.35.0 + * build(deps): bump golang.org/x/sys from 0.42.0 to 0.43.0 + * build(deps): bump github.com/mattn/go-isatty from 0.0.20 to + 0.0.21 + * build(deps): bump dependabot/fetch-metadata from 2.5.0 to 3.0.0 + * build(deps): bump codecov/codecov-action from 5 to 6 + * build(deps): bump github.com/lucasb-eyer/go-colorful from 1.3.0 + to 1.4.0 + +------------------------------------------------------------------- Old: ---- dyff-1.11.3.obscpio New: ---- dyff-1.12.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ dyff.spec ++++++ --- /var/tmp/diff_new_pack.7kPV3A/_old 2026-04-30 20:28:40.826603311 +0200 +++ /var/tmp/diff_new_pack.7kPV3A/_new 2026-04-30 20:28:40.826603311 +0200 @@ -17,7 +17,7 @@ Name: dyff -Version: 1.11.3 +Version: 1.12.0 Release: 0 Summary: Diff tool for YAML files, and sometimes JSON License: MIT ++++++ _service ++++++ --- /var/tmp/diff_new_pack.7kPV3A/_old 2026-04-30 20:28:40.882605585 +0200 +++ /var/tmp/diff_new_pack.7kPV3A/_new 2026-04-30 20:28:40.890605910 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/homeport/dyff</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.11.3</param> + <param name="revision">v1.12.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.7kPV3A/_old 2026-04-30 20:28:40.922607209 +0200 +++ /var/tmp/diff_new_pack.7kPV3A/_new 2026-04-30 20:28:40.926607372 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/homeport/dyff</param> - <param name="changesrevision">4512053136bcd17cc8784b386f6c75bda7e01ec2</param></service></servicedata> + <param name="changesrevision">ea5d770b575967f1bc21eefcae08712d8f755e04</param></service></servicedata> (No newline at EOF) ++++++ dyff-1.11.3.obscpio -> dyff-1.12.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dyff-1.11.3/assets/kubernetes/multi-docs-file-level/expected-dyff.human new/dyff-1.12.0/assets/kubernetes/multi-docs-file-level/expected-dyff.human --- old/dyff-1.11.3/assets/kubernetes/multi-docs-file-level/expected-dyff.human 2026-03-17 14:28:35.000000000 +0100 +++ new/dyff-1.12.0/assets/kubernetes/multi-docs-file-level/expected-dyff.human 2026-04-26 22:39:02.000000000 +0200 @@ -6,7 +6,6 @@ (root level) (v1/Service/foo-2) - one document removed: - --- apiVersion: v1 kind: Service metadata: @@ -17,7 +16,6 @@ (root level) (v1/Service/bar) + one document added: - --- apiVersion: v1 kind: Service metadata: @@ -28,7 +26,6 @@ (root level) (v1/Service/baz) + one document added: - --- apiVersion: v1 kind: Service metadata: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dyff-1.11.3/assets/multidocs/simple/file.yaml new/dyff-1.12.0/assets/multidocs/simple/file.yaml --- old/dyff-1.11.3/assets/multidocs/simple/file.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/dyff-1.12.0/assets/multidocs/simple/file.yaml 2026-04-26 22:39:02.000000000 +0200 @@ -0,0 +1,5 @@ +--- +foo: bar + +--- +bar: foo diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dyff-1.11.3/go.mod new/dyff-1.12.0/go.mod --- old/dyff-1.11.3/go.mod 2026-03-17 14:28:35.000000000 +0100 +++ new/dyff-1.12.0/go.mod 2026-04-26 22:39:02.000000000 +0200 @@ -6,11 +6,11 @@ github.com/caarlos0/env/v11 v11.4.0 github.com/gonvenience/bunt v1.4.3 github.com/gonvenience/idem v0.0.3 - github.com/gonvenience/neat v1.3.18 + github.com/gonvenience/neat v1.3.20 github.com/gonvenience/term v1.0.5 github.com/gonvenience/text v1.0.10 - github.com/gonvenience/ytbx v1.4.9 - github.com/lucasb-eyer/go-colorful v1.3.0 + github.com/gonvenience/ytbx v1.5.0 + github.com/lucasb-eyer/go-colorful v1.4.0 github.com/mitchellh/hashstructure/v2 v2.0.2 github.com/onsi/ginkgo/v2 v2.28.1 github.com/onsi/gomega v1.39.1 @@ -32,17 +32,17 @@ github.com/google/pprof v0.0.0-20260202012954-cb029daf43ef // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-isatty v0.0.21 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/virtuald/go-ordered-json v0.0.0-20170621173500-b18e6e673d74 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect - golang.org/x/mod v0.34.0 // indirect - golang.org/x/net v0.52.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.53.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/term v0.41.0 // indirect - golang.org/x/text v0.35.0 // indirect - golang.org/x/tools v0.43.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/term v0.42.0 // indirect + golang.org/x/text v0.36.0 // indirect + golang.org/x/tools v0.44.0 // indirect ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dyff-1.11.3/go.sum new/dyff-1.12.0/go.sum --- old/dyff-1.11.3/go.sum 2026-03-17 14:28:35.000000000 +0100 +++ new/dyff-1.12.0/go.sum 2026-04-26 22:39:02.000000000 +0200 @@ -27,16 +27,14 @@ github.com/gonvenience/bunt v1.4.3/go.mod h1:ggA6odP6FNOh50mGxxytSSJTs2Ghy5Veq9wIVSbuoAw= github.com/gonvenience/idem v0.0.3 h1:rZ2f17JU5GHa3b5M5R2fClz0dYN3EFGhHHGo3AZz/1U= github.com/gonvenience/idem v0.0.3/go.mod h1:ChZ+RP8e30+uCBcCIzN/0di6lTO2PucjemgKfzQUQEw= -github.com/gonvenience/neat v1.3.18 h1:WxWoXhsTHA6CStNrGgSEjGTt5MwIm+7Xs+VZmQIuXZA= -github.com/gonvenience/neat v1.3.18/go.mod h1:DTaEyHIOjSkMa066EoZZl3k5KCG/rFGE67n0cjm/9qk= +github.com/gonvenience/neat v1.3.20 h1:KdevSy5GLb3h1U5AYGw3NwW9FAAU2MWfrtsDHzYaKOg= +github.com/gonvenience/neat v1.3.20/go.mod h1:GbVes855L3QYFkDg9pnxHe/FQVsr1Tl+ME0fyOZO4Lg= github.com/gonvenience/term v1.0.5 h1:PYfBH7FB1V+tuuJl4KYrqG/tzAOUnvTy8IFa9YqYrJY= github.com/gonvenience/term v1.0.5/go.mod h1:CYvcU7H3nE6eOP0gvGfYz4BjGJzM1GeNp+fx4IBWKLs= github.com/gonvenience/text v1.0.10 h1:QRqtC/KMk57K7y4jHi4HjLxf8u+tg+/tIRCS5afywNE= github.com/gonvenience/text v1.0.10/go.mod h1:qO4aTZGAXbeW7eJXK+94nIc5Uumz8Q5DphOFZex6JHI= -github.com/gonvenience/ytbx v1.4.8 h1:V7oea89gLUN1C0rGDHxnt1YMAd7wHau9LC80Ng2QauA= -github.com/gonvenience/ytbx v1.4.8/go.mod h1:DVrIUZAiVv/bzOU3esvEvhGWED4YbyhSAuFru5nlzD4= -github.com/gonvenience/ytbx v1.4.9 h1:8n9kmCTrS0dna863abBI50fQT6/2397jpsSZr6ZsnHo= -github.com/gonvenience/ytbx v1.4.9/go.mod h1:5+Gl5Y0OxrO7Kp0qmrH8vTCAlY3whwBHN26KOReIe5o= +github.com/gonvenience/ytbx v1.5.0 h1:6AbxnAWwyY+tMLEBENXC4m1j71Ubcv2+UaQmEA7rYv4= +github.com/gonvenience/ytbx v1.5.0/go.mod h1:zxRSqmJ2sHOH+XyYFAPhyb7y+xjnRSRHLcNta5Ybcws= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/pprof v0.0.0-20260202012954-cb029daf43ef h1:xpF9fUHpoIrrjX24DURVKiwHcFpw19ndIs+FwTSMbno= @@ -54,14 +52,14 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag= -github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lucasb-eyer/go-colorful v1.4.0 h1:UtrWVfLdarDgc44HcS7pYloGHJUjHV/4FwW4TvVgFr4= +github.com/lucasb-eyer/go-colorful v1.4.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/maruel/natural v1.1.1 h1:Hja7XhhmvEFhcByqDoHz9QZbkWey+COd9xWfCfn1ioo= github.com/maruel/natural v1.1.1/go.mod h1:v+Rfd79xlw1AgVBjbO0BEQmptqb5HvL/k9GRHB7ZKEg= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3 h1:BXxTozrOU8zgC5dkpn3J6NTRdoP+hjok/e+ACr4Hibk= github.com/mattn/go-ciede2000 v0.0.0-20170301095244-782e8c62fec3/go.mod h1:x1uk6vxTiVuNt6S5R2UYgdhpj3oKojXvOXauHZ7dEnI= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs= +github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= github.com/mfridman/tparse v0.18.0 h1:wh6dzOKaIwkUGyKgOntDW4liXSo37qg5AXbIhkMV3vE= github.com/mfridman/tparse v0.18.0/go.mod h1:gEvqZTuCgEhPbYk/2lS3Kcxg1GmTxxU7kTC8DvP0i/A= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= @@ -108,21 +106,20 @@ go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= -golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= -golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2A= google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dyff-1.11.3/internal/cmd/cmds_test.go new/dyff-1.12.0/internal/cmd/cmds_test.go --- old/dyff-1.11.3/internal/cmd/cmds_test.go 2026-03-17 14:28:35.000000000 +0100 +++ new/dyff-1.12.0/internal/cmd/cmds_test.go 2026-04-26 22:39:02.000000000 +0200 @@ -51,96 +51,6 @@ }) }) - Context("yaml command", func() { - Context("creating yaml output", func() { - It("should not create YAML output that is not valid", func() { - filename := createTestFile(`{"a": ",", "foo": {"bar": "*", "dash": "-"}}`) - defer os.Remove(filename) - - out, err := dyff("yaml", filename) - Expect(err).ToNot(HaveOccurred()) - Expect(out).To(BeEquivalentTo(`--- -a: "," -foo: - bar: "*" - dash: "-" - -`)) - }) - }) - - Context("using restructure", func() { - Context("to write the file to STDOUT", func() { - It("should write a YAML file to STDOUT using restructure feature", func() { - filename := createTestFile(`--- -list: -- aaa: bbb - name: one -`) - defer os.Remove(filename) - - out, err := dyff("yaml", "--restructure", filename) - Expect(err).ToNot(HaveOccurred()) - Expect(out).To(BeEquivalentTo(`--- -list: -- name: one - aaa: bbb - -`)) - }) - - It("should write a YAML file with multiple documents to STDOUT using restructure feature", func() { - out, err := dyff("yaml", "--plain", "--restructure", assets("issues", "issue-133", "input.yml")) - Expect(err).ToNot(HaveOccurred()) - Expect(out).To(BeEquivalentTo(`--- -name: one -bar: foo -foo: bar ---- -name: two -Foo: Bar -Bar: Foo ---- -name: three -foobar: foobar -`)) - }) - }) - - Context("to write the file in-place", func() { - It("should write a YAML file in place using restructure feature", func() { - filename := createTestFile(`--- -list: -- aaa: bbb - name: one -`) - defer os.Remove(filename) - - out, err := dyff("yaml", "--restructure", "--in-place", filename) - Expect(err).ToNot(HaveOccurred()) - Expect(out).To(BeEmpty()) - - data, err := os.ReadFile(filename) - Expect(err).To(BeNil()) - Expect(string(data)).To(BeEquivalentTo(`--- -list: - - name: one - aaa: bbb -`)) - - }) - }) - - Context("incorrect usage", func() { - It("should fail to write a YAML when in place and STDIN are used at the same time", func() { - _, err := dyff("yaml", "--in-place", "-") - Expect(err).To(HaveOccurred()) - Expect(err.Error()).To(ContainSubstring("incompatible flags: cannot use in-place flag in combination with input")) - }) - }) - }) - }) - Context("json command", func() { It("should write a JSON file in place using restructure feature", func() { filename := createTestFile(`{"list":[{"aaa":"bbb","name":"one"}]}`) @@ -554,8 +464,8 @@ Expect(out).To(BeEquivalentTo(` (root level) + four map entries added: - kind: ConfigMap apiVersion: v1 + kind: ConfigMap metadata: name: atlantis-repo-config namespace: default @@ -596,7 +506,6 @@ expected := ` (root level) (v1/Namespace/test) - one document removed: - --- apiVersion: v1 kind: Namespace metadata: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dyff-1.11.3/internal/cmd/common.go new/dyff-1.12.0/internal/cmd/common.go --- old/dyff-1.11.3/internal/cmd/common.go 2026-03-17 14:28:35.000000000 +0100 +++ new/dyff-1.12.0/internal/cmd/common.go 2026-04-26 22:39:02.000000000 +0200 @@ -133,10 +133,11 @@ // OutputWriter encapsulates the required fields to define the look and feel of // the output type OutputWriter struct { - PlainMode bool - Restructure bool - OmitIndentHelper bool - OutputStyle string + PlainMode bool + Restructure bool + OmitIndentHelper bool + EnforceDocumentStartMarker bool + OutputStyle string } func humanReadableFilename(filename string) string { @@ -191,14 +192,20 @@ switch { case w.PlainMode && w.OutputStyle == "json": - output, err := neat.NewOutputProcessor(false, false, &neat.DefaultColorSchema).ToCompactJSON(document) + outputProcessor := neat.NewOutputProcessorWithDefaults() + + output, err := outputProcessor.ToCompactJSON(document) if err != nil { return err } + _, _ = fmt.Fprintln(writer, output) case w.PlainMode && w.OutputStyle == "yaml": - _, _ = fmt.Fprintln(writer, "---") + if len(inputFile.Documents) != 1 || w.EnforceDocumentStartMarker { + _, _ = fmt.Fprintln(writer, "---") + } + encoder := yamlv3.NewEncoder(writer) encoder.SetIndent(2) @@ -211,17 +218,30 @@ } case w.OutputStyle == "json": - output, err := neat.NewOutputProcessor(!w.OmitIndentHelper, true, &neat.DefaultColorSchema).ToJSON(document) + outputProcessor := neat.NewOutputProcessorWithDefaults(). + UseIndentLines(!w.OmitIndentHelper). + BoldKeys(true). + ColorSchema(neat.DefaultColorSchema) + + output, err := outputProcessor.ToJSON(document) if err != nil { return err } + _, _ = fmt.Fprintln(writer, output) case w.OutputStyle == "yaml": - output, err := neat.NewOutputProcessor(!w.OmitIndentHelper, true, &neat.DefaultColorSchema).ToYAML(document) + outputProcessor := neat.NewOutputProcessorWithDefaults(). + UseIndentLines(!w.OmitIndentHelper). + BoldKeys(true). + EnforceDocumentStartMarker(len(inputFile.Documents) > 1). + ColorSchema(neat.DefaultColorSchema) + + output, err := outputProcessor.ToYAML(document) if err != nil { return err } + _, _ = fmt.Fprintln(writer, output) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dyff-1.11.3/internal/cmd/yaml.go new/dyff-1.12.0/internal/cmd/yaml.go --- old/dyff-1.11.3/internal/cmd/yaml.go 2026-03-17 14:28:35.000000000 +0100 +++ new/dyff-1.12.0/internal/cmd/yaml.go 2026-04-26 22:39:02.000000000 +0200 @@ -30,10 +30,12 @@ ) type yamlCmdOptions struct { - plainMode bool - restructure bool - omitIndentHelper bool - inplace bool + restructure bool + inplace bool + + plainMode bool + omitIndentHelper bool + enforceDocumentStartMarker bool } var yamlCmdSettings yamlCmdOptions @@ -50,10 +52,11 @@ RunE: func(cmd *cobra.Command, args []string) error { writer := &OutputWriter{ - OutputStyle: "yaml", - PlainMode: yamlCmdSettings.plainMode, - Restructure: yamlCmdSettings.restructure, - OmitIndentHelper: yamlCmdSettings.omitIndentHelper, + OutputStyle: "yaml", + PlainMode: yamlCmdSettings.plainMode, + Restructure: yamlCmdSettings.restructure, + OmitIndentHelper: yamlCmdSettings.omitIndentHelper, + EnforceDocumentStartMarker: yamlCmdSettings.enforceDocumentStartMarker, } var errs []error @@ -88,6 +91,8 @@ yamlCmd.Flags().BoolVarP(&yamlCmdSettings.plainMode, "plain", "p", false, "output in plain style without any highlighting") yamlCmd.Flags().BoolVarP(&yamlCmdSettings.restructure, "restructure", "r", false, "restructure map keys in reasonable order") - yamlCmd.Flags().BoolVarP(&yamlCmdSettings.omitIndentHelper, "omit-indent-helper", "O", false, "omit indent helper lines in highlighted output") yamlCmd.Flags().BoolVarP(&yamlCmdSettings.inplace, "in-place", "i", false, "overwrite input file with output of this command") + + yamlCmd.Flags().BoolVarP(&yamlCmdSettings.omitIndentHelper, "omit-indent-helper", "O", false, "omit indent helper lines in highlighted output") + yamlCmd.Flags().BoolVar(&yamlCmdSettings.enforceDocumentStartMarker, "enforce-document-start-marker", false, "print YAML document start marker even when not necessarily required") } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dyff-1.11.3/internal/cmd/yaml_test.go new/dyff-1.12.0/internal/cmd/yaml_test.go --- old/dyff-1.11.3/internal/cmd/yaml_test.go 1970-01-01 01:00:00.000000000 +0100 +++ new/dyff-1.12.0/internal/cmd/yaml_test.go 2026-04-26 22:39:02.000000000 +0200 @@ -0,0 +1,164 @@ +// Copyright © 2019 The Homeport Team +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package cmd_test + +import ( + "os" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + + "github.com/gonvenience/term" +) + +var _ = Describe("using dyff yaml", func() { + BeforeEach(func() { + term.FixedTerminalWidth = 250 + term.FixedTerminalHeight = 40 + }) + + AfterEach(func() { + term.FixedTerminalWidth = -1 + term.FixedTerminalHeight = -1 + }) + + Context("streaming to StdOut", func() { + It("should write single document without document start marker in default mode", func() { + filename := createTestFile(`{"foo": "bar"}`) + defer os.Remove(filename) + + out, err := dyff("yaml", filename) + Expect(err).ToNot(HaveOccurred()) + Expect(out).To(BeEquivalentTo(`foo: bar + +`)) + }) + + It("should write single document without document start marker in plain mode", func() { + filename := createTestFile(`{"foo": "bar"}`) + defer os.Remove(filename) + + out, err := dyff("yaml", "--plain", filename) + Expect(err).ToNot(HaveOccurred()) + Expect(out).To(BeEquivalentTo(`foo: bar +`)) + }) + + It("should write multi document with document start marker in default mode", func() { + out, err := dyff("yaml", assets("multidocs/simple/file.yaml")) + Expect(err).ToNot(HaveOccurred()) + Expect(out).To(BeEquivalentTo(`--- +foo: bar + +--- +bar: foo + +`)) + }) + + It("should write multi document with document start marker in plain mode", func() { + out, err := dyff("yaml", "--plain", assets("multidocs/simple/file.yaml")) + Expect(err).ToNot(HaveOccurred()) + Expect(out).To(BeEquivalentTo(`--- +foo: bar +--- +bar: foo +`)) + }) + + It("should quote all string that have special meaning in YAML", func() { + filename := createTestFile(`{"a": ",", "foo": {"bar": "*", "dash": "-"}}`) + defer os.Remove(filename) + + out, err := dyff("yaml", filename) + Expect(err).ToNot(HaveOccurred()) + Expect(out).To(BeEquivalentTo(`a: "," +foo: + bar: "*" + dash: "-" + +`)) + }) + + It("should restructure (reorder) fields", func() { + filename := createTestFile(`--- +list: +- aaa: bbb + name: one +`) + defer os.Remove(filename) + + out, err := dyff("yaml", "--restructure", filename) + Expect(err).ToNot(HaveOccurred()) + Expect(out).To(BeEquivalentTo(`list: +- name: one + aaa: bbb + +`)) + }) + + It("should restructure (reorder) fields in multi-document YAML", func() { + out, err := dyff("yaml", "--plain", "--restructure", assets("issues", "issue-133", "input.yml")) + Expect(err).ToNot(HaveOccurred()) + Expect(out).To(BeEquivalentTo(`--- +name: one +bar: foo +foo: bar +--- +name: two +Foo: Bar +Bar: Foo +--- +name: three +foobar: foobar +`)) + }) + }) + + Context("writing in-place", func() { + It("should write a YAML file in place using restructure feature", func() { + filename := createTestFile(`--- +list: +- aaa: bbb + name: one +`) + defer os.Remove(filename) + + out, err := dyff("yaml", "--restructure", "--in-place", filename) + Expect(err).ToNot(HaveOccurred()) + Expect(out).To(BeEmpty()) + + data, err := os.ReadFile(filename) + Expect(err).To(BeNil()) + Expect(string(data)).To(BeEquivalentTo(`list: + - name: one + aaa: bbb +`)) + + }) + }) + + It("should fail to write a YAML when in place and STDIN are used at the same time", func() { + _, err := dyff("yaml", "--in-place", "-") + Expect(err).To(HaveOccurred()) + Expect(err.Error()).To(ContainSubstring("incompatible flags: cannot use in-place flag in combination with input")) + }) +}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dyff-1.11.3/pkg/dyff/colors.go new/dyff-1.12.0/pkg/dyff/colors.go --- old/dyff-1.11.3/pkg/dyff/colors.go 2026-03-17 14:28:35.000000000 +0100 +++ new/dyff-1.12.0/pkg/dyff/colors.go 2026-04-26 22:39:02.000000000 +0200 @@ -160,31 +160,41 @@ } func (c *BuntColorizer) YAMLInRedishColors(input interface{}, useIndentLines bool) (string, error) { - return neat.NewOutputProcessor(useIndentLines, true, &map[string]colorful.Color{ - "keyColor": bunt.FireBrick, - "indentLineColor": {R: 0.2, G: 0, B: 0}, - "scalarDefaultColor": bunt.LightCoral, - "boolColor": bunt.LightCoral, - "floatColor": bunt.LightCoral, - "intColor": bunt.LightCoral, - "multiLineTextColor": bunt.DarkSalmon, - "nullColor": bunt.Salmon, - "emptyStructures": bunt.LightSalmon, - "dashColor": bunt.FireBrick, - }).ToYAML(input) + return neat.NewOutputProcessorWithDefaults(). + BoldKeys(true). + UseIndentLines(useIndentLines). + EnforceDocumentStartMarker(false). + ColorSchema(map[string]colorful.Color{ + "keyColor": bunt.FireBrick, + "indentLineColor": {R: 0.2, G: 0, B: 0}, + "scalarDefaultColor": bunt.LightCoral, + "boolColor": bunt.LightCoral, + "floatColor": bunt.LightCoral, + "intColor": bunt.LightCoral, + "multiLineTextColor": bunt.DarkSalmon, + "nullColor": bunt.Salmon, + "emptyStructures": bunt.LightSalmon, + "dashColor": bunt.FireBrick, + }). + ToYAML(input) } func (c *BuntColorizer) YAMLInGreenishColors(input interface{}, useIndentLines bool) (string, error) { - return neat.NewOutputProcessor(useIndentLines, true, &map[string]colorful.Color{ - "keyColor": bunt.Green, - "indentLineColor": {R: 0, G: 0.2, B: 0}, - "scalarDefaultColor": bunt.LimeGreen, - "boolColor": bunt.LimeGreen, - "floatColor": bunt.LimeGreen, - "intColor": bunt.LimeGreen, - "multiLineTextColor": bunt.OliveDrab, - "nullColor": bunt.Olive, - "emptyStructures": bunt.DarkOliveGreen, - "dashColor": bunt.Green, - }).ToYAML(input) + return neat.NewOutputProcessorWithDefaults(). + BoldKeys(true). + UseIndentLines(useIndentLines). + EnforceDocumentStartMarker(false). + ColorSchema(map[string]colorful.Color{ + "keyColor": bunt.Green, + "indentLineColor": {R: 0, G: 0.2, B: 0}, + "scalarDefaultColor": bunt.LimeGreen, + "boolColor": bunt.LimeGreen, + "floatColor": bunt.LimeGreen, + "intColor": bunt.LimeGreen, + "multiLineTextColor": bunt.OliveDrab, + "nullColor": bunt.Olive, + "emptyStructures": bunt.DarkOliveGreen, + "dashColor": bunt.Green, + }). + ToYAML(input) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/dyff-1.11.3/pkg/dyff/output_human.go new/dyff-1.12.0/pkg/dyff/output_human.go --- old/dyff-1.11.3/pkg/dyff/output_human.go 2026-03-17 14:28:35.000000000 +0100 +++ new/dyff-1.12.0/pkg/dyff/output_human.go 2026-04-26 22:39:02.000000000 +0200 @@ -619,7 +619,10 @@ } } - return neat.NewOutputProcessor(false, true, nil).ToYAML(input) + return neat.NewOutputProcessorWithDefaults(). + UseIndentLines(false). + BoldKeys(true). + ToYAML(input) } func isMinorChange(from string, to string, minorChangeThreshold float64) bool { ++++++ dyff.obsinfo ++++++ --- /var/tmp/diff_new_pack.7kPV3A/_old 2026-04-30 20:28:41.446628490 +0200 +++ /var/tmp/diff_new_pack.7kPV3A/_new 2026-04-30 20:28:41.450628652 +0200 @@ -1,5 +1,5 @@ name: dyff -version: 1.11.3 -mtime: 1773754115 -commit: 4512053136bcd17cc8784b386f6c75bda7e01ec2 +version: 1.12.0 +mtime: 1777235942 +commit: ea5d770b575967f1bc21eefcae08712d8f755e04 ++++++ vendor.tar.gz ++++++ ++++ 2423 lines of diff (skipped)
