common/collections: Fix type checking in Append - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 535755e4f80d96b42a9be05fa85c7827a5e1dbc7
 (DIR) parent 3583dd6d713c243808b5e8724b32565ceaf66104
 (HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Thu, 11 Oct 2018 11:05:30 +0200
       
       common/collections: Fix type checking in Append
       
       The fix introduced in Hugo `0.49.1` had an unintended side-effect in the `Append` func used in both `append` and `.Scratch.Add`.
       
       This commit fixes that by loosen/fixing the type checking so concrete types can be appended to interface slices.
       
       Fixes #5303
       
       Diffstat:
         M common/collections/append.go        |       2 +-
         M common/collections/append_test.go   |       6 ++++++
       
       2 files changed, 7 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/common/collections/append.go b/common/collections/append.go
       @@ -59,7 +59,7 @@ func Append(to interface{}, from ...interface{}) (interface{}, error) {
        
                for _, f := range from {
                        fv := reflect.ValueOf(f)
       -                if tot != fv.Type() {
       +                if !fv.Type().AssignableTo(tot) {
                                return nil, fmt.Errorf("append element type mismatch: expected %v, got %v", tot, fv.Type())
                        }
                        tov = reflect.Append(tov, fv)
 (DIR) diff --git a/common/collections/append_test.go b/common/collections/append_test.go
       @@ -43,7 +43,13 @@ func TestAppend(t *testing.T) {
                                tstSlicers{&tstSlicer{"a"},
                                        &tstSlicer{"b"},
                                        &tstSlicer{"c"}}},
       +                {testSlicerInterfaces{&tstSlicerIn1{"a"}, &tstSlicerIn1{"b"}},
       +                        []interface{}{&tstSlicerIn1{"c"}},
       +                        testSlicerInterfaces{&tstSlicerIn1{"a"}, &tstSlicerIn1{"b"}, &tstSlicerIn1{"c"}}},
                        // Errors
       +                {testSlicerInterfaces{&tstSlicerIn1{"a"}, &tstSlicerIn1{"b"}},
       +                        []interface{}{"c"},
       +                        false},
                        {"", []interface{}{[]string{"a", "b"}}, false},
                        // No string concatenation.
                        {"ab",