restore.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // This work is subject to the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
  2. // license. Its contents can be found at:
  3. // http://creativecommons.org/publicdomain/zero/1.0/
  4. package bindata
  5. import (
  6. "fmt"
  7. "io"
  8. )
  9. func writeRestore(w io.Writer) error {
  10. _, err := fmt.Fprintf(w, `
  11. // RestoreAsset restores an asset under the given directory
  12. func RestoreAsset(dir, name string) error {
  13. data, err := Asset(name)
  14. if err != nil {
  15. return err
  16. }
  17. info, err := AssetInfo(name)
  18. if err != nil {
  19. return err
  20. }
  21. err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755))
  22. if err != nil {
  23. return err
  24. }
  25. err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode())
  26. if err != nil {
  27. return err
  28. }
  29. err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime())
  30. if err != nil {
  31. return err
  32. }
  33. return nil
  34. }
  35. // RestoreAssets restores an asset under the given directory recursively
  36. func RestoreAssets(dir, name string) error {
  37. children, err := AssetDir(name)
  38. // File
  39. if err != nil {
  40. return RestoreAsset(dir, name)
  41. }
  42. // Dir
  43. for _, child := range children {
  44. err = RestoreAssets(dir, filepath.Join(name, child))
  45. if err != nil {
  46. return err
  47. }
  48. }
  49. return nil
  50. }
  51. func _filePath(dir, name string) string {
  52. cannonicalName := strings.Replace(name, "\\", "/", -1)
  53. return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...)
  54. }
  55. `)
  56. return err
  57. }