Added emerge --info to debug output. I don't know why I didn't add it before.
[catalyst.git] / catalyst
index 006e89e4bbf6826a218eacc5fa49119c7c00851c..35dd14da516bff287163e8b15e938a6076ddf646 100755 (executable)
--- a/catalyst
+++ b/catalyst
@@ -1,16 +1,14 @@
-#!/usr/bin/python
-# Copyright 1999-2005 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo/src/catalyst/catalyst,v 1.110 2005/12/07 21:33:43 wolf31o2 Exp $
+#!/usr/bin/python -OO
 
 # Maintained in full by:
-# Eric Edgar <rocket@gentoo.org>
+# Andrew Gaffney <agaffney@gentoo.org>
 # Chris Gianelloni <wolf31o2@gentoo.org>
 
 import os,sys,imp,string,getopt
 import pdb
+
 __maintainer__="Chris Gianelloni <wolf31o2@gentoo.org>"
-__version__="2.0_rc7"
+__version__="2.0.6_pre17"
 
 conf_values={}
 
@@ -24,7 +22,7 @@ def usage():
        print " -F --fetchonly          fetch files only"
        print " -h --help               print this help message"
        print " -p --purge              clear tmp dirs,package cache and autoresume flags"
-       print " -s --snapshot           generate a Portage snapshot"
+       print " -s --snapshot           generate a release snapshot"
        print " -V --version            display version information"
        print " -v --verbose            verbose output"
        print
@@ -33,17 +31,16 @@ def usage():
        print "Using the commandline option (-C, --cli) to build a Portage snapshot:"
        print "catalyst -C target=snapshot version_stamp=my_date"
        print
-       print "Using the snapshot option (-s, --snapshot) to build a Portage snapshot:"
-       print "catalyst -s 2005.0"
+       print "Using the snapshot option (-s, --snapshot) to build a release snapshot:"
+       print "catalyst -s 20071121"
        print
        print "Using the specfile option (-f, --file) to build a stage target:"
        print "catalyst -f stage1-specfile.spec"
 
 def version():
-       print "Gentoo Catalyst, version "+__version__
-       print "Copyright 2003-2005 The Gentoo Foundation"
+       print "Catalyst, version "+__version__
+       print "Copyright 2003-2008 Gentoo Foundation"
        print "Distributed under the GNU General Public License version 2\n"
-       
 
 def parse_config(myconfig):
        # search a couple of different areas for the main config file
@@ -53,7 +50,8 @@ def parse_config(myconfig):
        confdefaults={ "storedir":"/var/tmp/catalyst",\
                "sharedir":"/usr/share/catalyst","distdir":"/usr/portage/distfiles",\
                "portdir":"/usr/portage","options":"",\
-               "snapshot_cache":"/var/tmp/catalyst/snapshot_cache" }
+               "snapshot_cache":"/var/tmp/catalyst/snapshot_cache",\
+               "hash_function":"crc32"}
                
        # first, try the one passed (presumably from the cmdline)
        if myconfig:
@@ -94,58 +92,71 @@ def parse_config(myconfig):
                        conf_values[x]=confdefaults[x]
 
        # parse out the rest of the options from the config file
+       if "autoresume" in string.split(conf_values["options"]):
+               print "Autoresuming support enabled."
+               conf_values["AUTORESUME"]="1"
+
        if "ccache" in string.split(conf_values["options"]):
                print "Compiler cache support enabled."
                conf_values["CCACHE"]="1"
 
-       if "pkgcache" in string.split(conf_values["options"]):
-               print "Package cache support enabled."
-               conf_values["PKGCACHE"]="1"
-       
-       if "snapcache" in string.split(conf_values["options"]):
-               print "Snapshot cache support enabled."
-               conf_values["SNAPCACHE"]="1"
-       
-       if "seedcache" in string.split(conf_values["options"]):
-               print "Seed cache support enabled."
-               conf_values["SEEDCACHE"]="1"
+       if "clear-autoresume" in string.split(conf_values["options"]):
+               print "Cleaning autoresume flags support enabled."
+               conf_values["CLEAR_AUTORESUME"]="1"
+
+#      if "compress" in string.split(conf_values["options"]):
+#              print "Compression enabled."
+#              conf_values["COMPRESS"]="1"
 
-       if "kerncache" in string.split(conf_values["options"]):
-               print "Kernel cache support enabled."
-               conf_values["KERNCACHE"]="1"
-       
        if "distcc" in string.split(conf_values["options"]):
                print "Distcc support enabled."
                conf_values["DISTCC"]="1"
 
-       if "autoresume" in string.split(conf_values["options"]):
-               print "Autoresuming support enabled."
-               conf_values["AUTORESUME"]="1"
+       if "icecream" in string.split(conf_values["options"]):
+               print "Icecream compiler cluster support enabled."
+               conf_values["ICECREAM"]="1"
+
+       if "kerncache" in string.split(conf_values["options"]):
+               print "Kernel cache support enabled."
+               conf_values["KERNCACHE"]="1"
+
+       if "pkgcache" in string.split(conf_values["options"]):
+               print "Package cache support enabled."
+               conf_values["PKGCACHE"]="1"
 
        if "purge" in string.split(conf_values["options"]):
                print "Purge support enabled."
                conf_values["PURGE"]="1"
-       
-       if "clear-autoresume" in string.split(conf_values["options"]):
-               print "Cleaning autoresume flags support enabled."
-               conf_values["CLEAR_AUTORESUME"]="1"
-       
+
+       if "seedcache" in string.split(conf_values["options"]):
+               print "Seed cache support enabled."
+               conf_values["SEEDCACHE"]="1"
+
+       if "snapcache" in string.split(conf_values["options"]):
+               print "Snapshot cache support enabled."
+               conf_values["SNAPCACHE"]="1"
+
+       if "metadata_overlay" in conf_values["options"].split():
+               print "Use of metadata_overlay module for portage enabled."
+               conf_values["METADATA_OVERLAY"]="1"
+
+#      if "tarball" in string.split(conf_values["options"]):
+#              print "Tarball creation enabled."
+#              conf_values["TARBALL"]="1"
+
+       if myconf.has_key("digests"):
+               conf_values["digests"]=myconf["digests"]
+       if myconf.has_key("contents"):
+               conf_values["contents"]=myconf["contents"]
+
        if myconf.has_key("envscript"):
                print "Envscript support enabled."
                conf_values["ENVSCRIPT"]=myconf["envscript"]
-       
-       if "md5" in string.split(conf_values["options"]):
-               print "MD5 .digests file creation support enabled."
-               conf_values["MD5"]="1"
-       
-       if "sha" in string.split(conf_values["options"]):
-               print "SHA .digests file creation support enabled."
-               conf_values["SHA"]="1"
 
 def import_modules():
        # import catalyst's own modules (i.e. catalyst_support and the arch modules)
        targetmap={}
-       
+
        try:
                for x in required_build_targets:
                        try:
@@ -201,6 +212,8 @@ def build_target(addlargs, targetmap):
                mytarget.run()
 
        except:
+               # TODO: Capture traceback, so we can display this error after printing of the traceback
+               print "!!! catalyst: Error encountered during run of target " + addlargs["target"]
                raise
 
 if __name__ == "__main__":
@@ -219,8 +232,8 @@ if __name__ == "__main__":
 
        # parse out the command line arguments
        try:
-               opts,args = getopt.getopt(sys.argv[1:], "apxhvdc:C:f:FVs:", ["purge","help", "version", "debug",\
-                       "clear_autoresume", "config=", "cli=", "file=", "fetch", "verbose","snapshot="])
+               opts,args = getopt.getopt(sys.argv[1:], "aphvdc:C:f:FVs:", ["purge","help", "version", "debug",\
+                       "clear-autoresume", "config=", "cli=", "file=", "fetch", "verbose","snapshot="])
        
        except getopt.GetoptError:
                usage()
@@ -257,6 +270,7 @@ if __name__ == "__main__":
                                sys.exit(2)
                        else:
                                conf_values["DEBUG"]="1"
+                               conf_values["VERBOSE"]="1"
 
                if o in ("-c", "--config"):
                        if len(sys.argv) < 3:
@@ -326,7 +340,44 @@ if __name__ == "__main__":
        parse_config(myconfig)
        sys.path.append(conf_values["sharedir"]+"/modules")
        from catalyst_support import *
-               
+       
+       # Start checking that digests are valid now that the hash_map was imported from catalyst_support
+       if conf_values.has_key("digests"):
+               for i in conf_values["digests"].split():
+                       if not hash_map.has_key(i):
+                               print
+                               print i+" is not a valid digest entry"
+                               print "Valid digest entries:"
+                               print hash_map.keys()
+                               print
+                               print "Catalyst aborting...."
+                               sys.exit(2)
+                       if find_binary(hash_map[i][1]) == None:
+                               print
+                               print "digest="+i
+                               print "\tThe "+hash_map[i][1]+\
+                                       " binary was not found. It needs to be in your system path"
+                               print
+                               print "Catalyst aborting...."
+                               sys.exit(2)
+       if conf_values.has_key("hash_function"):
+               if not hash_map.has_key(conf_values["hash_function"]):
+                       print
+                       print conf_values["hash_function"]+" is not a valid hash_function entry"
+                       print "Valid hash_function entries:"
+                       print hash_map.keys()
+                       print
+                       print "Catalyst aborting...."
+                       sys.exit(2)
+               if find_binary(hash_map[conf_values["hash_function"]][1]) == None:
+                       print
+                       print "hash_function="+conf_values["hash_function"]
+                       print "\tThe "+hash_map[conf_values["hash_function"]][1]+\
+                               " binary was not found. It needs to be in your system path"
+                       print
+                       print "Catalyst aborting...."
+                       sys.exit(2)
+
        # import the rest of the catalyst modules
        targetmap=import_modules()
 
@@ -353,6 +404,7 @@ if __name__ == "__main__":
                print "\nCatalyst build aborted due to user interrupt ( Ctrl-C )"
                print
                print "Catalyst aborting...."
+               sys.exit(2)
        except LockInUse:
                print "Catalyst aborting...."
                sys.exit(2)