func computeLegacyHashBasedPlaceholderPropertyValue(p *DatasetPath) string {
	ps := []byte(p.ToString())
	sum := sha512.Sum512_256(ps)
	return hex.EncodeToString(sum[:])
}
computeLegacyPlaceholderPropertyValue is a legacy-compatibility function.

In the 0.0.x series, the value stored in the PlaceholderPropertyName user property
was a hash value of the dataset path.
A simple `on|off` value could not be used at the time because `zfs list` was used to
list all filesystems and their placeholder state with a single command: due to property
inheritance, `zfs list` would print the placeholder state for all (non-placeholder) children
of a dataset, so the hash value was used to distinguish whether the property was local or
inherited.

One of the drawbacks of the above approach is that `zfs rename` renders a placeholder filesystem
a non-placeholder filesystem if any of the parent path components change.

We `zfs get` nowadays, which returns the property source, making the hash value no longer
necessary. However, we want to keep legacy compatibility.
package zfs
import (
	"context"
	"crypto/sha512"
	"encoding/hex"
	"fmt"
	"github.com/pkg/errors"
	"github.com/zrepl/zrepl/zfs/zfscmd"
)
const (
	PlaceholderPropertyName string = "zrepl:placeholder"
	placeholderPropertyOn   string = "on"
	placeholderPropertyOff  string = "off"
)