From d8adce611051c37bd2be05584c541c27eff9e548 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Sat, 20 May 2017 19:50:24 +0200 Subject: [PATCH] zfs: Support foo/bar/* globs --- zfs/mapping.go | 6 +++++- zfs/mapping_test.go | 21 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/zfs/mapping.go b/zfs/mapping.go index b9feb66..f248043 100644 --- a/zfs/mapping.go +++ b/zfs/mapping.go @@ -64,7 +64,11 @@ func (m GlobMapping) Map(source DatasetPath) (target DatasetPath, err error) { for si, sc := range source { target = append(target, sc) if si < len(m.PrefixPath) { - if sc != m.PrefixPath[si] { + + compsMatch := sc == m.PrefixPath[si] + endOfPrefixPath := si == len(m.PrefixPath)-1 && m.PrefixPath[si] == "" + + if !(compsMatch || endOfPrefixPath) { err = NoMatchError return } diff --git a/zfs/mapping_test.go b/zfs/mapping_test.go index 038fbb0..93640c3 100644 --- a/zfs/mapping_test.go +++ b/zfs/mapping_test.go @@ -5,6 +5,27 @@ import ( "testing" ) +func TestGlobMappingPrefixWildcard(t *testing.T) { + + m := GlobMapping{ + PrefixPath: toDatasetPath("a/b/c/"), // TRAILING empty component! + TargetRoot: toDatasetPath("x/y"), + } + + t.Logf("PrefixPath: %#v", m.PrefixPath) + + var r DatasetPath + var err error + + r, err = m.Map(toDatasetPath("a/b/c")) + assert.NotNil(t, err) + + r, err = m.Map(toDatasetPath("a/b/c/d")) + assert.Nil(t, err) + assert.Equal(t, toDatasetPath("x/y/a/b/c/d"), r) + +} + func TestGlobMapping(t *testing.T) { m := GlobMapping{