done
# Do not chmod '.' since it's probably ${WORKDIR} and PORTAGE_WORKDIR_MODE
# should be preserved.
- find . -mindepth 1 -print0 | ${XARGS} -0 chmod -f a+rX,u+w,g-w,o-w
+ find . -mindepth 1 ! -type l -print0 | ${XARGS} -0 chmod -f a+rX,u+w,g-w,o-w
}
strip_duplicate_slashes() {
for inforoot in regen_infodirs:
if inforoot=='':
continue
- for filename in ("dir", "dir.gz"):
+ for filename in ("dir", "dir.gz", "dir.bz2"):
file_path = os.path.join(inforoot, filename)
try:
os.rename(file_path, file_path + ".old")
Defines the location of your Portage tree.
.br
Defaults to /usr/portage.
+.br
+\fB***Warning***\fR
+.br
+Storing data such as distfiles and binary packages in PORTDIR can
+be potentially dangerous. The default emerge configuration defaults to this
+behavior (which will work fine), however if you deviate from the default
+configuration by changing PKGDIR or DISTDIR, emerge \-\-sync may inadvertedly
+delete all your distfiles/binary packages. Please make sure to set
+\fBPORTAGE_EXTRA_RSYNC_OPTS\fR properly to insure the safety of files in PORTDIR.
.TP
\fBPORTDIR_OVERLAY\fR = \fI"[path] [different\-path] [etc...]"\fR
Defines the directories in which user made ebuilds may be stored and not
sys.stderr.write(" "+str(e)+"\n\n");
raise
-try:
- # XXX: This should get renamed to bsd_chflags, I think.
- import chflags
- bsd_chflags = chflags
-except ImportError:
- bsd_chflags = None
+bsd_chflags = None
+if os.uname()[0] in ["FreeBSD"]:
+ try:
+ import freebsd as bsd_chflags
+ except ImportError:
+ pass
try:
from portage.cache.cache_errors import CacheError
if missing_files:
mytree = os.path.realpath(os.path.dirname(
os.path.dirname(mysettings["O"])))
- myuris = []
+ fetch_settings = config(clone=mysettings)
+ debug = mysettings.get("PORTAGE_DEBUG") == "1"
for myfile in missing_files:
+ success = False
for cpv in distfiles_map[myfile]:
+ myebuild = os.path.join(mysettings["O"],
+ catsplit(cpv)[1] + ".ebuild")
+ # for RESTRICT=fetch, mirror, etc...
+ doebuild_environment(myebuild, "fetch",
+ mysettings["ROOT"], fetch_settings,
+ debug, 1, myportdb)
alluris, aalist = myportdb.getfetchlist(
cpv, mytree=mytree, all=True,
- mysettings=mysettings)
- for uri in alluris:
- if os.path.basename(uri) == myfile:
- myuris.append(uri)
- if not fetch(myuris, mysettings):
- writemsg(("!!! File %s doesn't exist, can't update " + \
- "Manifest\n") % myfile, noiselevel=-1)
- return 0
+ mysettings=fetch_settings)
+ myuris = [uri for uri in alluris \
+ if os.path.basename(uri) == myfile]
+ if fetch(myuris, fetch_settings):
+ success = True
+ break
+ if not success:
+ writemsg(("!!! File %s doesn't exist, can't update " + \
+ "Manifest\n") % myfile, noiselevel=-1)
+ return 0
writemsg_stdout(">>> Creating Manifest for %s\n" % mysettings["O"])
try:
mf.create(requiredDistfiles=myarchives,
destexists=0
if bsd_chflags:
- # Check that we can actually unset schg etc flags...
- # Clear the flags on source and destination; we'll reinstate them after merging
if destexists and dstat.st_flags != 0:
- if bsd_chflags.lchflags(dest, 0) < 0:
- writemsg("!!! Couldn't clear flags on file being merged: \n ",
- noiselevel=-1)
- # We might have an immutable flag on the parent dir; save and clear.
- pflags=bsd_chflags.lgetflags(os.path.dirname(dest))
+ bsd_chflags.lchflags(dest, 0)
+ pflags = os.stat(os.path.dirname(dest)).st_flags
if pflags != 0:
bsd_chflags.lchflags(os.path.dirname(dest), 0)
- if (destexists and bsd_chflags.lhasproblems(dest) > 0) or \
- bsd_chflags.lhasproblems(os.path.dirname(dest)) > 0:
- # This is bad: we can't merge the file with these flags set.
- writemsg("!!! Can't merge file "+dest+" because of flags set\n",
- noiselevel=-1)
- return None
-
if destexists:
if stat.S_ISLNK(dstat[stat.ST_MODE]):
try:
if bsd_chflags:
# Restore the flags we saved before moving
- if pflags and bsd_chflags.lchflags(os.path.dirname(dest), pflags) < 0:
- writemsg("!!! Couldn't restore flags (%s) on '%s'\n" % \
- (str(pflags), os.path.dirname(dest)), noiselevel=-1)
- return None
+ if pflags:
+ bsd_chflags.lchflags(os.path.dirname(dest), pflags)
return newmtime
if bsd_chflags:
# Save then clear flags on dest.
- dflags=bsd_chflags.lgetflags(mydest)
- if dflags != 0 and bsd_chflags.lchflags(mydest, 0) < 0:
- writemsg("!!! Couldn't clear flags on '"+mydest+"'.\n",
- noiselevel=-1)
+ dflags = os.lstat(mydest).st_flags
+ if dflags != 0:
+ bsd_chflags.lchflags(mydest, 0)
if not os.access(mydest, os.W_OK):
pkgstuff = pkgsplit(self.pkg)
trg = None
try:
trg = trg_cache[x]
- if long(trg["_mtime_"]) == long(entry["_mtime_"]) and portage.eclass_cache.is_eclass_data_valid(trg["_eclasses_"]):
+ if long(trg["_mtime_"]) == long(entry["_mtime_"]) and \
+ eclass_cache.is_eclass_data_valid(trg["_eclasses_"]) and \
+ set(trg["_eclasses_"]) == set(entry["_eclasses_"]):
write_it = False
except (cache_errors.CacheError, KeyError):
pass
# "a? ( b? ( z ) ) -- Valid
#
-import re, sys, types
+import re, sys, types
import portage.exception
from portage.exception import InvalidData, InvalidAtom
from portage.versions import catpkgsplit, catsplit, pkgcmp, pkgsplit, ververify
Pull a listing of USE Dependencies out of a dep atom.
Example usage:
- >>> dep_getusedeps('app-misc/test:3[foo][-bar]
+ >>> dep_getusedeps('app-misc/test:3[foo][-bar]')
['foo','-bar']
@param depend: The depstring to process
def main():
- testDirs = ["portage", "portage/util","portage/versions", "portage/dep"]
+ testDirs = ["util","versions", "dep"]
suite = unittest.TestSuite()
files = os.listdir( path )
files = [ f[:-3] for f in files if f.startswith("test_") and f.endswith(".py") ]
parent_path = path[len(base_path)+1:]
- parent_module = ".".join(("tests", parent_path))
+ parent_module = ".".join(("portage","tests", parent_path))
+ parent_module = parent_module.replace('/','.')
result = []
for mymodule in files:
try:
except ImportError:
raise
return result
+
+test_cpvs = ['sys-apps/portage','virtual/portage']
+test_versions = ['1.0', '1.0-r1','2.3_p4','1.0_alpha57']
+test_slots = [ None, '1','gentoo-sources-2.6.17','spankywashere']
+test_usedeps = ['foo','-bar', ['foo','bar'],['foo','-bar'] ]
from unittest import TestCase
from portage.dep import dep_getusedeps
+import sys
+from portage.tests import test_cpvs, test_slots, test_versions, test_usedeps
+
class DepGetUseDeps(TestCase):
""" A simple testcase for dep_getusedeps
"""
def testDepGetUseDeps(self):
- useflags = [ '', 'foo', '-bar', ['baz','bar'], ['baz','-bar'] ]
- cpvs = [ "sys-apps/portage" ]
- slots = [ None, "0","1","linux-sources-2.5.7","randomstring" ]
- versions = [ None, "2.1.1", "2.1.1-r2"]
- for mycpv in cpvs:
- for version in versions:
- for slot in slots:
- for use in useflags:
+
+ for mycpv in test_cpvs:
+ for version in test_versions:
+ for slot in test_slots:
+ for use in test_usedeps:
cpv = mycpv[:]
if version:
cpv += version
( ">sys-apps/portage-2.1", True ),
( "<sys-apps/portage-2.1", True ),
( "~sys-apps/portage-2.1", True ),
- ( "sys-apps/portage-2.1:foo", True ),
+ ( "sys-apps/portage-2.1:foo", False ),
( "sys-apps/portage-2.1:", False ),
( ">~cate-gory/foo-1.0", False ),
( ">~category/foo-1.0", False ),
# Insert our parent dir so we can do shiny import "tests"
# This line courtesy of Marienz and Pkgcore ;)
-sys.path.insert(0, osp.dirname(osp.dirname(osp.abspath(__file__))))
+sys.path.insert(0, osp.dirname(osp.dirname(osp.dirname(osp.abspath(__file__)))))
-# Grab SVN portage files instead of normal ones.
-sys.path.insert(0, os.path.join(sys.path[0], "pym"))
+import portage.tests as tests
-import tests
if __name__ == "__main__":
result = tests.main()
if result.failures:
+++ /dev/null
-# tests/portage/__init__.py -- Portage Unit Test functionality
-# Copyright 2006 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$