func (f *KitFs) Exists(path string) (bool, error) {
	return afero.Exists(f.Fs, path)
}
Exists returns true,nil if the dir/file exists or false,nil if
the dir/file does not exist, it will return an error if something
went wrong.
package fs
import (
	"fmt"
	"os"
	"github.com/Songmu/prompter"
	"github.com/sirupsen/logrus"
	"github.com/spf13/afero"
	"github.com/spf13/viper"
)
var defaultFs *KitFs
type KitFs struct {
	Fs afero.Fs
}
func (f *KitFs) init(dir string) {
	var inFs afero.Fs
	if viper.GetBool("gk_testing") {
		inFs = afero.NewMemMapFs()
	} else {
		if viper.GetString("gk_folder") != "" {
			inFs = afero.NewBasePathFs(afero.NewOsFs(), viper.GetString("gk_folder"))
		} else {
			inFs = afero.NewOsFs()
		}
	}
	if dir != "" {
		f.Fs = afero.NewBasePathFs(inFs, dir)
	} else {
		f.Fs = inFs
	}
}
func (f *KitFs) ReadFile(path string) (string, error) {
	d, err := afero.ReadFile(f.Fs, path)
	return string(d), err
}
func (f *KitFs) WriteFile(path string, data string, force bool) error {
	if b, _ := f.Exists(path); b && !(viper.GetBool("gk_force_override") || force) {
		s, _ := f.ReadFile(path)
		if s == data {
			logrus.Warnf("`%s` exists and is identical it will be ignored", path)
			return nil
		}
		b := prompter.YN(fmt.Sprintf("`%s` already exists do you want to override it ?", path), false)
		if !b {
			return nil
		}
	}
	return afero.WriteFile(f.Fs, path, []byte(data), os.ModePerm)
}
func (f *KitFs) Mkdir(dir string) error {
	return f.Fs.Mkdir(dir, os.ModePerm)
}
func (f *KitFs) MkdirAll(path string) error {
	return f.Fs.MkdirAll(path, os.ModePerm)
}