[archive] Do not open file unless the data is required.
This commit is contained in:
parent
d779f6093a
commit
d2701d06c9
1 changed files with 25 additions and 10 deletions
|
@ -65,20 +65,11 @@ type context struct {
|
||||||
|
|
||||||
func archiveFile (_context *context, _pathResolved string, _pathInArchive string, _name string) (error) {
|
func archiveFile (_context *context, _pathResolved string, _pathInArchive string, _name string) (error) {
|
||||||
|
|
||||||
var _file *os.File
|
|
||||||
if _file_0, _error := os.Open (_pathResolved); _error == nil {
|
|
||||||
_file = _file_0
|
|
||||||
} else {
|
|
||||||
return _error
|
|
||||||
}
|
|
||||||
|
|
||||||
defer _file.Close ()
|
|
||||||
|
|
||||||
var _fileDev uint64
|
var _fileDev uint64
|
||||||
var _fileInode uint64
|
var _fileInode uint64
|
||||||
var _fileSize uint64
|
var _fileSize uint64
|
||||||
var _fileTimestamp [2]uint64
|
var _fileTimestamp [2]uint64
|
||||||
if _stat, _error := _file.Stat (); _error == nil {
|
if _stat, _error := os.Stat (_pathResolved); _error == nil {
|
||||||
_stat := _stat.Sys()
|
_stat := _stat.Sys()
|
||||||
if _stat, _ok := _stat.(*syscall.Stat_t); _ok {
|
if _stat, _ok := _stat.(*syscall.Stat_t); _ok {
|
||||||
_fileDev = uint64 (_stat.Dev)
|
_fileDev = uint64 (_stat.Dev)
|
||||||
|
@ -115,6 +106,30 @@ func archiveFile (_context *context, _pathResolved string, _pathInArchive string
|
||||||
if _context.debug {
|
if _context.debug {
|
||||||
log.Printf ("[dd] [30ef6c2f] file <= `%s`\n", _pathInArchive)
|
log.Printf ("[dd] [30ef6c2f] file <= `%s`\n", _pathInArchive)
|
||||||
}
|
}
|
||||||
|
var _file *os.File
|
||||||
|
if _file_0, _error := os.Open (_pathResolved); _error == nil {
|
||||||
|
_file = _file_0
|
||||||
|
} else {
|
||||||
|
return nil, _error
|
||||||
|
}
|
||||||
|
defer _file.Close ()
|
||||||
|
if _stat, _error := _file.Stat (); _error == nil {
|
||||||
|
_stat := _stat.Sys()
|
||||||
|
if _stat, _ok := _stat.(*syscall.Stat_t); _ok {
|
||||||
|
if (
|
||||||
|
(_fileDev != uint64 (_stat.Dev)) ||
|
||||||
|
(_fileInode != uint64 (_stat.Ino)) ||
|
||||||
|
(_fileSize != uint64 (_stat.Size)) ||
|
||||||
|
(_fileTimestamp[0] != uint64 (_stat.Mtim.Sec)) ||
|
||||||
|
(_fileTimestamp[1] != uint64 (_stat.Mtim.Nsec))) {
|
||||||
|
return nil, fmt.Errorf ("[3a07643b] file changed while reading: `%s`!", _pathResolved)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return nil, fmt.Errorf ("[4daf593a] failed `stat`-ing: `%s`!", _pathResolved)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return nil, _error
|
||||||
|
}
|
||||||
var _data []byte
|
var _data []byte
|
||||||
if _data_0, _error := ioutil.ReadAll (_file); _error == nil {
|
if _data_0, _error := ioutil.ReadAll (_file); _error == nil {
|
||||||
_data = _data_0
|
_data = _data_0
|
||||||
|
|
Loading…
Reference in a new issue