diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-01-05 22:00:39 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-01-05 22:00:39 +0000 |
commit | 4538b5dcb9e9d28e67df6e1b91b97551a577da21 (patch) | |
tree | 8eeadd76bc051a58b68f5bfef82cf73b4dbffece | |
parent | 3557acfd22c53721e315f88417d3469a0d0aac83 (diff) | |
download | portage-4538b5dcb9e9d28e67df6e1b91b97551a577da21.tar.gz portage-4538b5dcb9e9d28e67df6e1b91b97551a577da21.tar.bz2 portage-4538b5dcb9e9d28e67df6e1b91b97551a577da21.zip |
Do not hardlink files unless they are in the same
directory, since otherwise tar may not be able to
extract a tarball of the resulting hardlinks due to
'Invalid cross-device link' errors (depends on layout of
mount points). Also, don't hardlink zero-byte files since
it doesn't save any space. Thanks to Daniel Robbins for
reporting these issues which were noticed by funtoo users
when attempting to extract stage tarballs.
svn path=/main/trunk/; revision=12381
-rw-r--r-- | pym/portage/dbapi/vartree.py | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 6bff93d3f..5c83f2686 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -3795,12 +3795,21 @@ class dblink(object): # whether config protection or not, we merge the new file the # same way. Unless moveme=0 (blocking directory) if moveme: - hardlink_key = (mymd5, mystat.st_size, + # Do not hardlink files unless they are in the same + # directory, since otherwise tar may not be able to + # extract a tarball of the resulting hardlinks due to + # 'Invalid cross-device link' errors (depends on layout of + # mount points). Also, don't hardlink zero-byte files since + # it doesn't save any space. + parent_dir = os.path.dirname(myrealdest) + print "parent_dir", parent_dir + hardlink_key = (parent_dir, mymd5, mystat.st_size, mystat.st_mode, mystat.st_uid, mystat.st_gid) hardlink_candidates = self._md5_merge_map.get(hardlink_key) if hardlink_candidates is None: hardlink_candidates = [] - self._md5_merge_map[hardlink_key] = hardlink_candidates + if mystat.st_size != 0: + self._md5_merge_map[hardlink_key] = hardlink_candidates mymtime = movefile(mysrc, mydest, newmtime=thismtime, sstat=mystat, mysettings=self.settings, hardlink_candidates=hardlink_candidates) |