diff options
author | Zac Medico <zmedico@gentoo.org> | 2006-04-29 00:40:43 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2006-04-29 00:40:43 +0000 |
commit | 367042c0eddb16adde0b7b559cde4e8c48d3c3a5 (patch) | |
tree | ab6efd1f39f0b469e3d33e9ef1a46fbada421d04 /pym/portage_manifest.py | |
parent | ab46658189ea0daddc6d9da43f312a3df1db2e09 (diff) | |
download | portage-367042c0eddb16adde0b7b559cde4e8c48d3c3a5.tar.gz portage-367042c0eddb16adde0b7b559cde4e8c48d3c3a5.tar.bz2 portage-367042c0eddb16adde0b7b559cde4e8c48d3c3a5.zip |
Catch Permission Denied errors during manifest/digest generation for bug #131073.
svn path=/main/trunk/; revision=3263
Diffstat (limited to 'pym/portage_manifest.py')
-rw-r--r-- | pym/portage_manifest.py | 61 |
1 files changed, 33 insertions, 28 deletions
diff --git a/pym/portage_manifest.py b/pym/portage_manifest.py index 1a6780a51..856ba6fbc 100644 --- a/pym/portage_manifest.py +++ b/pym/portage_manifest.py @@ -332,34 +332,39 @@ class Manifest(object): def write(self, sign=False, force=False): """ Write Manifest instance to disk, optionally signing it """ - if self.compat: - self._writeDigests() - myentries = list(self._createManifestEntries()) - update_manifest = True - if not force: - try: - f = open(self.getFullname(), "r") - oldentries = list(self._parseManifestLines(f)) - f.close() - if len(oldentries) == len(myentries): - update_manifest = False - for i in xrange(len(oldentries)): - if oldentries[i] != myentries[i]: - update_manifest = True - break - except (IOError, OSError), e: - if e.errno == errno.ENOENT: - pass - else: - raise - if update_manifest: - fd = open(self.getFullname(), "w") - for myentry in myentries: - fd.write("%s\n" % str(myentry)) - fd.close() - if sign: - self.sign() - + try: + if self.compat: + self._writeDigests() + myentries = list(self._createManifestEntries()) + update_manifest = True + if not force: + try: + f = open(self.getFullname(), "r") + oldentries = list(self._parseManifestLines(f)) + f.close() + if len(oldentries) == len(myentries): + update_manifest = False + for i in xrange(len(oldentries)): + if oldentries[i] != myentries[i]: + update_manifest = True + break + except (IOError, OSError), e: + if e.errno == errno.ENOENT: + pass + else: + raise + if update_manifest: + fd = open(self.getFullname(), "w") + for myentry in myentries: + fd.write("%s\n" % str(myentry)) + fd.close() + if sign: + self.sign() + except (IOError, OSError), e: + if e.errno == errno.EACCES: + raise PermissionDenied(str(e)) + raise + def sign(self): """ Sign the Manifest """ raise NotImplementedError() |