func Diff(ctx context.Context, a, b string) io.ReadCloser {
	r, w := io.Pipe()
	go func() {
		err := WriteDiff(ctx, w, a, b)
		if err = w.CloseWithError(err); err != nil {
			log.G(ctx).WithError(err).Debugf("closing tar pipe failed")
		}
	}()
	return r
}
Diff returns a tar stream of the computed filesystem
difference between the provided directories.

Produces a tar using OCI style file markers for deletions. Deleted
files will be prepended with the prefix ".wh.". This style is
based off AUFS whiteouts.
See https://github.com/opencontainers/image-spec/blob/master/layer.md
package archive
import (
	"archive/tar"
	"context"
	"io"
	"os"
	"path/filepath"
	"runtime"
	"strings"
	"sync"
	"syscall"
	"time"
	"github.com/containerd/containerd/log"
	"github.com/containerd/continuity/fs"
	"github.com/pkg/errors"
)
var bufPool = &sync.Pool{
	New: func() interface{} {
		buffer := make([]byte, 32*1024)
		return &buffer
	},
}
var errInvalidArchive = errors.New("invalid archive")