def main(argv): # Get treeish if len(argv) != 2: print """\ usage: %s <treeish> where <treeish> is a valid git branch or tag (eg release_1.1.0).""" % (prog_name) sys.exit(1) treeish = argv[1] # Determine root of repo (this repo) on which to operate try: # First try from cwd root, _ = chk_pcores.get_base_pkg( os.getcwd() ) except ValueError: # None found, so use package this script is a part of root = os.path.abspath( os.path.join( os.path.dirname(__file__), '..', '..' ) ) # Add base path to hw_lib_dir and projects_dir # Prepare tree print '+ cd %s' % root os.chdir( root ) print cmd = 'git checkout %s' % treeish print '+ %s' % cmd if 0 != subprocess.call( cmd.split() ): sys.exit(1) print # Make path list pcores_avail = chk_pcores.scan_pcores( os.path.join( 'lib', 'hw' ) ) pcores_needed = set() for project, mhs in chk_pcores.scan_projects( 'projects' ): # Include pcores for each project whose hardware directory is included. # `project` is of the form <project>/hw, so take off the 'hw' and # prepend 'project' to match against STATIC_PATHLIST. if os.path.join( 'projects', os.path.dirname( project ) ) not in STATIC_PATHLIST: continue for inst in mhstools.instances(mhs): paths, errors = chk_pcores.resolve_pcore( pcores_avail, inst.core_name(), mhstools.get_parameter( inst, 'HW_VER' ) ) pcores_needed = pcores_needed.union( paths ) pathlist = STATIC_PATHLIST + list( pcores_needed ) # Create tarball tarball = os.path.join( '..', TARBALL_NAME % treeish.replace('/','_') ) gzip = subprocess.Popen( ['gzip'], stdin=subprocess.PIPE, stdout=open( tarball, 'w' ) ) try: cmd = 'git archive --prefix=%s/ %s' % (TAR_PREFIX, treeish) print '+ %s (paths) | gzip > %s' % (cmd, tarball) rc = subprocess.call( cmd.split() + pathlist, stdout=gzip.stdin ) except OSError, e: if e.errno == os.errno.E2BIG: print """\ %s: list of paths (%d in %d bytes) to include in tarball is %s: too large for this platform (max %d bytes)""" % (prog_name, len(pathlist), len(' '.join(pathlist)), prog_name, os.sysconf('SC_ARG_MAX')) sys.exit(1) else: raise e
def print_project_pcore_version_report( projects_dir, pcores ): """ Scan all projects, resolve pcore instances, and print reports: missing pcores, out-of-date pcores; Also writes out list of pcores used. """ # Collect data errors = {} cores_used = {} for project, mhs in scan_projects( projects_dir ): for inst in mhstools.instances(mhs): inst.paths, inst.errors = resolve_pcore( pcores, inst.core_name(), mhstools.get_parameter( inst, 'HW_VER' ) ) cores_used[project] = set( sum( (inst.paths for inst in mhstools.instances(mhs)), [] ) ) errors[project] = sum( (inst.errors for inst in mhstools.instances(mhs)), [] ) # Print reports print '2. Project missing and out-of-date pcore report:' for project, errors in errors.iteritems(): if errors: print "\tProject '%s':\n\t\t%s\n" % (project, '\n\t\t'.join(errors) ) print '3. Project pcore use report: written to %s' % PCORE_MANIFEST with open( os.path.expanduser( PCORE_MANIFEST ), 'w' ) as f: print >>f, '\n'.join( '%s,%s' % (project, pcore) for project in cores_used for pcore in cores_used[project] )
def main(argv): # Get treeish if len(argv) != 2: print """\ usage: %s <treeish> where <treeish> is a valid git branch or tag (eg release_1.1.0).""" % ( prog_name) sys.exit(1) treeish = argv[1] # Determine root of repo (this repo) on which to operate try: # First try from cwd root, _ = chk_pcores.get_base_pkg(os.getcwd()) except ValueError: # None found, so use package this script is a part of root = os.path.abspath( os.path.join(os.path.dirname(__file__), '..', '..')) # Add base path to hw_lib_dir and projects_dir # Prepare tree print '+ cd %s' % root os.chdir(root) print cmd = 'git checkout %s' % treeish print '+ %s' % cmd if 0 != subprocess.call(cmd.split()): sys.exit(1) print # Make path list pcores_avail = chk_pcores.scan_pcores(os.path.join('lib', 'hw')) pcores_needed = set() for project, mhs in chk_pcores.scan_projects('projects'): # Include pcores for each project whose hardware directory is included. # `project` is of the form <project>/hw, so take off the 'hw' and # prepend 'project' to match against STATIC_PATHLIST. if os.path.join('projects', os.path.dirname(project)) not in STATIC_PATHLIST: continue for inst in mhstools.instances(mhs): paths, errors = chk_pcores.resolve_pcore( pcores_avail, inst.core_name(), mhstools.get_parameter(inst, 'HW_VER')) pcores_needed = pcores_needed.union(paths) pathlist = STATIC_PATHLIST + list(pcores_needed) # Create tarball tarball = os.path.join('..', TARBALL_NAME % treeish.replace('/', '_')) gzip = subprocess.Popen(['gzip'], stdin=subprocess.PIPE, stdout=open(tarball, 'w')) try: cmd = 'git archive --prefix=%s/ %s' % (TAR_PREFIX, treeish) print '+ %s (paths) | gzip > %s' % (cmd, tarball) rc = subprocess.call(cmd.split() + pathlist, stdout=gzip.stdin) except OSError, e: if e.errno == os.errno.E2BIG: print """\ %s: list of paths (%d in %d bytes) to include in tarball is %s: too large for this platform (max %d bytes)""" % ( prog_name, len(pathlist), len( ' '.join(pathlist)), prog_name, os.sysconf('SC_ARG_MAX')) sys.exit(1) else: raise e