diff options
author | Lars Wirzenius <liw@liw.fi> | 2010-07-04 10:07:58 +1200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2010-07-04 10:07:58 +1200 |
commit | 8ab2b8cd78654a39c63ce8e32867a413e098740b (patch) | |
tree | b14b911a6a194dd4cfd1768dbe95c6563b33a8ee | |
parent | a590603a4f244b5d8ce32dabf5573188718c08c3 (diff) | |
download | obnam-8ab2b8cd78654a39c63ce8e32867a413e098740b.tar.gz |
Read metadata for a file only once.
-rw-r--r-- | obnamlib/plugins/backup_plugin.py | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/obnamlib/plugins/backup_plugin.py b/obnamlib/plugins/backup_plugin.py index c046f0f3..52f1d895 100644 --- a/obnamlib/plugins/backup_plugin.py +++ b/obnamlib/plugins/backup_plugin.py @@ -62,10 +62,10 @@ class BackupPlugin(obnamlib.ObnamPlugin): else: self.fs.reinit(root) absroot = self.fs.abspath('.') - for pathname in self.find_files(absroot): + for pathname, metadata in self.find_files(absroot): logging.debug('backing up %s' % pathname) try: - metadata = self.backup_metadata(pathname) + self.backup_metadata(pathname, metadata) if stat.S_ISDIR(metadata.st_mode): self.backup_dir_contents(pathname) elif stat.S_ISREG(metadata.st_mode): @@ -98,13 +98,15 @@ class BackupPlugin(obnamlib.ObnamPlugin): needed = False for basename in basenames: pathname = os.path.join(dirname, basename) - if self.needs_backup(pathname): - yield pathname + metadata = obnamlib.read_metadata(self.fs, pathname) + if self.needs_backup(pathname, metadata): + yield pathname, metadata needed = True - if needed or self.needs_backup(dirname): - yield dirname + metadata = obnamlib.read_metadata(self.fs, dirname) + if needed or self.needs_backup(dirname, metadata): + yield dirname, metadata - def needs_backup(self, pathname): + def needs_backup(self, pathname, current): '''Does a given file need to be backed up?''' try: @@ -113,7 +115,6 @@ class BackupPlugin(obnamlib.ObnamPlugin): # File does not exist in the previous generation, so it # does need to be backed up. return True - current = obnamlib.read_metadata(self.fs, pathname) return (current.st_mtime != old.st_mtime or current.st_mode != old.st_mode or current.st_nlink != old.st_nlink or @@ -133,14 +134,12 @@ class BackupPlugin(obnamlib.ObnamPlugin): break root = parent - def backup_metadata(self, pathname): + def backup_metadata(self, pathname, metadata): '''Back up metadata for a filesystem object''' logging.debug('backup_metadata: %s' % pathname) - metadata = obnamlib.read_metadata(self.fs, pathname) self.app.hooks.call('progress-found-file', pathname, metadata.st_size) self.store.create(pathname, metadata) - return metadata def backup_file_contents(self, filename): '''Back up contents of a regular file.''' |