summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-01-05 22:00:39 +0000
committerZac Medico <zmedico@gentoo.org>2009-01-05 22:00:39 +0000
commit4538b5dcb9e9d28e67df6e1b91b97551a577da21 (patch)
tree8eeadd76bc051a58b68f5bfef82cf73b4dbffece /pym
parent3557acfd22c53721e315f88417d3469a0d0aac83 (diff)
downloadportage-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
Diffstat (limited to 'pym')
-rw-r--r--pym/portage/dbapi/vartree.py13
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)