1717package fs
1818
1919import (
20+ "fmt"
2021 "io/ioutil"
2122 "os"
2223 "path/filepath"
2324 "sync"
24-
25- "github.com/pkg/errors"
2625)
2726
2827var bufferPool = & sync.Pool {
@@ -92,35 +91,35 @@ func CopyDir(dst, src string, opts ...CopyDirOpt) error {
9291func copyDirectory (dst , src string , inodes map [uint64 ]string , o * copyDirOpts ) error {
9392 stat , err := os .Stat (src )
9493 if err != nil {
95- return errors . Wrapf ( err , "failed to stat %s" , src )
94+ return fmt . Errorf ( "failed to stat %s: %w " , src , err )
9695 }
9796 if ! stat .IsDir () {
98- return errors .Errorf ("source %s is not directory" , src )
97+ return fmt .Errorf ("source %s is not directory" , src )
9998 }
10099
101100 if st , err := os .Stat (dst ); err != nil {
102101 if err := os .Mkdir (dst , stat .Mode ()); err != nil {
103- return errors . Wrapf ( err , "failed to mkdir %s" , dst )
102+ return fmt . Errorf ( "failed to mkdir %s: %w " , dst , err )
104103 }
105104 } else if ! st .IsDir () {
106- return errors .Errorf ("cannot copy to non-directory: %s" , dst )
105+ return fmt .Errorf ("cannot copy to non-directory: %s" , dst )
107106 } else {
108107 if err := os .Chmod (dst , stat .Mode ()); err != nil {
109- return errors . Wrapf ( err , "failed to chmod on %s" , dst )
108+ return fmt . Errorf ( "failed to chmod on %s: %w " , dst , err )
110109 }
111110 }
112111
113112 fis , err := ioutil .ReadDir (src )
114113 if err != nil {
115- return errors . Wrapf ( err , "failed to read %s" , src )
114+ return fmt . Errorf ( "failed to read %s: %w " , src , err )
116115 }
117116
118117 if err := copyFileInfo (stat , dst ); err != nil {
119- return errors . Wrapf ( err , "failed to copy file info for %s" , dst )
118+ return fmt . Errorf ( "failed to copy file info for %s: %w " , dst , err )
120119 }
121120
122121 if err := copyXAttrs (dst , src , o .xex , o .xeh ); err != nil {
123- return errors . Wrap ( err , "failed to copy xattrs" )
122+ return fmt . Errorf ( "failed to copy xattrs: %w" , err )
124123 }
125124
126125 for _ , fi := range fis {
@@ -136,37 +135,37 @@ func copyDirectory(dst, src string, inodes map[uint64]string, o *copyDirOpts) er
136135 case (fi .Mode () & os .ModeType ) == 0 :
137136 link , err := getLinkSource (target , fi , inodes )
138137 if err != nil {
139- return errors . Wrap ( err , "failed to get hardlink" )
138+ return fmt . Errorf ( "failed to get hardlink: %w" , err )
140139 }
141140 if link != "" {
142141 if err := os .Link (link , target ); err != nil {
143- return errors . Wrap ( err , "failed to create hard link" )
142+ return fmt . Errorf ( "failed to create hard link: %w" , err )
144143 }
145144 } else if err := CopyFile (target , source ); err != nil {
146- return errors . Wrap ( err , "failed to copy files" )
145+ return fmt . Errorf ( "failed to copy files: %w" , err )
147146 }
148147 case (fi .Mode () & os .ModeSymlink ) == os .ModeSymlink :
149148 link , err := os .Readlink (source )
150149 if err != nil {
151- return errors . Wrapf ( err , "failed to read link: %s" , source )
150+ return fmt . Errorf ( "failed to read link: %s: %w " , source , err )
152151 }
153152 if err := os .Symlink (link , target ); err != nil {
154- return errors . Wrapf ( err , "failed to create symlink: %s" , target )
153+ return fmt . Errorf ( "failed to create symlink: %s: %w " , target , err )
155154 }
156155 case (fi .Mode () & os .ModeDevice ) == os .ModeDevice :
157156 if err := copyDevice (target , fi ); err != nil {
158- return errors . Wrapf ( err , "failed to create device" )
157+ return fmt . Errorf ( "failed to create device: %w" , err )
159158 }
160159 default :
161160 // TODO: Support pipes and sockets
162- return errors . Wrapf ( err , "unsupported mode %s" , fi .Mode ())
161+ return fmt . Errorf ( "unsupported mode %s: %w " , fi .Mode (), err )
163162 }
164163 if err := copyFileInfo (fi , target ); err != nil {
165- return errors . Wrap ( err , "failed to copy file info" )
164+ return fmt . Errorf ( "failed to copy file info: %w" , err )
166165 }
167166
168167 if err := copyXAttrs (target , source , o .xex , o .xeh ); err != nil {
169- return errors . Wrap ( err , "failed to copy xattrs" )
168+ return fmt . Errorf ( "failed to copy xattrs: %w" , err )
170169 }
171170 }
172171
@@ -178,12 +177,12 @@ func copyDirectory(dst, src string, inodes map[uint64]string, o *copyDirOpts) er
178177func CopyFile (target , source string ) error {
179178 src , err := os .Open (source )
180179 if err != nil {
181- return errors . Wrapf ( err , "failed to open source %s" , source )
180+ return fmt . Errorf ( "failed to open source %s: %w " , source , err )
182181 }
183182 defer src .Close ()
184183 tgt , err := os .Create (target )
185184 if err != nil {
186- return errors . Wrapf ( err , "failed to open target %s" , target )
185+ return fmt . Errorf ( "failed to open target %s: %w " , target , err )
187186 }
188187 defer tgt .Close ()
189188
0 commit comments