def print_build_intermediate_warning(config): print("\n\n") print('#' * 84) print("Source and build intermediates have been left in " + config.croot + ".") build_folders = get_build_folders(config.croot) print("There are currently {num_builds} accumulated.".format(num_builds=len(build_folders))) print("To remove them, you can run the ```conda build purge``` command")
def execute(args): parser, args = parse_args(args) config = Config(**args.__dict__) build.check_external() # change globals in build module, see comment there as well channel_urls = args.__dict__.get('channel') or args.__dict__.get( 'channels') or () config.channel_urls = [] for url in channel_urls: # allow people to specify relative or absolute paths to local channels # These channels still must follow conda rules - they must have the # appropriate platform-specific subdir (e.g. win-64) if os.path.isdir(url): if not os.path.isabs(url): url = os.path.normpath( os.path.abspath(os.path.join(os.getcwd(), url))) url = url_path(url) config.channel_urls.append(url) config.override_channels = args.override_channels config.verbose = not args.quiet or args.debug if 'purge' in args.recipe: build.clean_build(config) return if 'purge-all' in args.recipe: build.clean_build(config) config.clean_pkgs() return action = None if args.output: action = output_action config.verbose = False config.quiet = True config.debug = False elif args.test: action = test_action elif args.source: action = source_action elif args.check: action = check_action if action: outputs = [action(recipe, config) for recipe in args.recipe] else: outputs = api.build(args.recipe, post=args.post, build_only=args.build_only, notest=args.notest, already_built=None, config=config, noverify=args.no_verify) if not args.output and len(utils.get_build_folders(config.croot)) > 0: build.print_build_intermediate_warning(config) return outputs
def execute(args): parser, args = parse_args(args) config = Config(**args.__dict__) build.check_external() # change globals in build module, see comment there as well channel_urls = args.channel or () config.channel_urls = [] for url in channel_urls: # allow people to specify relative or absolute paths to local channels # These channels still must follow conda rules - they must have the # appropriate platform-specific subdir (e.g. win-64) if os.path.isdir(url): if not os.path.isabs(url): url = os.path.normpath(os.path.abspath(os.path.join(os.getcwd(), url))) url = url_path(url) config.channel_urls.append(url) config.override_channels = args.override_channels config.verbose = not args.quiet or args.debug if 'purge' in args.recipe: build.clean_build(config) return if 'purge-all' in args.recipe: build.clean_build(config) config.clean_pkgs() return set_language_env_vars(args, parser, config=config, execute=execute) action = None if args.output: action = output_action logging.basicConfig(level=logging.ERROR) config.verbose = False config.quiet = True elif args.test: action = test_action elif args.source: action = source_action elif args.check: action = check_action if action: for recipe in args.recipe: action(recipe, config) outputs = [] else: outputs = api.build(args.recipe, post=args.post, build_only=args.build_only, notest=args.notest, already_built=None, config=config, noverify=args.no_verify) if not args.output and len(utils.get_build_folders(config.croot)) > 0: build.print_build_intermediate_warning(config) return outputs
def test_purge_all(testing_metadata): """ purge-all clears out build folders as well as build packages in the osx-64 folders and such """ outputs = api.build(testing_metadata) args = ['purge-all', '--croot', testing_metadata.config.croot] main_build.execute(args) assert not get_build_folders(testing_metadata.config.croot) assert not any(os.path.isfile(fn) for fn in outputs)
def test_purge_all(test_metadata): """ purge-all clears out build folders as well as build packages in the osx-64 folders and such """ api.build(test_metadata) fn = api.get_output_file_path(test_metadata) args = ['purge-all', '--croot', test_metadata.config.croot] main_build.execute(args) assert not get_build_folders(test_metadata.config.croot) assert not os.path.isfile(fn)
def test_purge(testing_workdir, test_metadata): """ purge clears out build folders - things like some_pkg_12048309850135 It does not clear out build packages from folders like osx-64 or linux-64. """ api.build(test_metadata) fn = api.get_output_file_path(test_metadata) args = ['purge'] main_build.execute(args) assert not get_build_folders(test_metadata.config.croot) assert os.path.isfile(fn)
def test_purge_all(testing_workdir, testing_metadata): """ purge-all clears out build folders as well as build packages in the osx-64 folders and such """ api.output_yaml(testing_metadata, 'meta.yaml') with TemporaryDirectory() as tmpdir: testing_metadata.config.croot = tmpdir outputs = api.build(testing_workdir, config=testing_metadata.config) args = ['purge-all', '--croot', tmpdir] main_build.execute(args) assert not get_build_folders(testing_metadata.config.croot) assert not any(os.path.isfile(fn) for fn in outputs)
def test_purge_all(test_metadata): """ purge-all clears out build folders as well as build packages in the osx-64 folders and such """ # override config to be default, so that output path lines up with default # config used by main_build test_metadata.config = api.Config() api.build(test_metadata) fn = api.get_output_file_path(test_metadata) args = ["purge-all"] main_build.execute(args) assert not get_build_folders(test_metadata.config.croot) assert not os.path.isfile(fn)
def test_purge(testing_workdir, testing_metadata): """ purge clears out build folders - things like some_pkg_12048309850135 It does not clear out build packages from folders like osx-64 or linux-64. """ outputs = api.build(testing_metadata) args = ['purge'] main_build.execute(args) dirs = get_build_folders(testing_metadata.config.croot) assert not dirs # make sure artifacts are kept - only temporary folders get nuked assert all(os.path.isfile(fn) for fn in outputs)
def test_purge_all(test_metadata): """ purge-all clears out build folders as well as build packages in the osx-64 folders and such """ # override config to be default, so that output path lines up with default # config used by main_build test_metadata.config = api.Config() api.build(test_metadata) fn = api.get_output_file_path(test_metadata) args = ['purge-all'] main_build.execute(args) assert not get_build_folders(test_metadata.config.croot) assert not os.path.isfile(fn)
def test_purge(testing_workdir, testing_metadata): """ purge clears out build folders - things like some_pkg_12048309850135 It does not clear out build packages from folders like osx-64 or linux-64. """ api.output_yaml(testing_metadata, 'meta.yaml') outputs = api.build(testing_workdir) args = ['purge'] main_build.execute(args) dirs = get_build_folders(testing_metadata.config.croot) assert not dirs # make sure artifacts are kept - only temporary folders get nuked assert all(os.path.isfile(fn) for fn in outputs)
def execute(args): _parser, args = parse_args(args) config = Config(**args.__dict__) build.check_external() # change globals in build module, see comment there as well channel_urls = args.__dict__.get('channel') or args.__dict__.get( 'channels') or () config.channel_urls = [] for url in channel_urls: # allow people to specify relative or absolute paths to local channels # These channels still must follow conda rules - they must have the # appropriate platform-specific subdir (e.g. win-64) if os.path.isdir(url): if not os.path.isabs(url): url = os.path.normpath( os.path.abspath(os.path.join(os.getcwd(), url))) url = url_path(url) config.channel_urls.append(url) config.override_channels = args.override_channels config.verbose = not args.quiet or args.debug if 'purge' in args.recipe: build.clean_build(config) return if 'purge-all' in args.recipe: build.clean_build(config) config.clean_pkgs() return action = None outputs = None if args.output: action = output_action config.verbose = False config.quiet = True config.debug = False elif args.test: action = test_action elif args.source: action = source_action elif args.check: action = check_action if action == test_action: failed_recipes = [] recipes = [ item for sublist in [ glob(os.path.abspath(recipe)) if '*' in recipe else [recipe] for recipe in args.recipe ] for item in sublist ] for recipe in recipes: try: action(recipe, config) except: if not args.keep_going: raise else: failed_recipes.append(recipe) continue if failed_recipes: print("Failed recipes:") for recipe in failed_recipes: print(" - %s" % recipe) sys.exit(len(failed_recipes)) else: print("All tests passed") outputs = [] elif action: outputs = [action(recipe, config) for recipe in args.recipe] else: outputs = api.build(args.recipe, post=args.post, build_only=args.build_only, notest=args.notest, already_built=None, config=config, verify=args.verify, variants=args.variants) if not args.output and len(utils.get_build_folders(config.croot)) > 0: build.print_build_intermediate_warning(config) return outputs
def clean_build(config, folders=None): if not folders: folders = get_build_folders(config.croot) for folder in folders: rm_rf(folder)
def execute(args): _parser, args = parse_args(args) config = Config(**args.__dict__) build.check_external() # change globals in build module, see comment there as well config.channel_urls = get_channel_urls(args.__dict__) config.override_channels = args.override_channels config.verbose = not args.quiet or args.debug if 'purge' in args.recipe: build.clean_build(config) return if 'purge-all' in args.recipe: build.clean_build(config) config.clean_pkgs() return action = None outputs = None if args.output: action = output_action config.verbose = False config.quiet = True config.debug = False elif args.test: action = test_action elif args.source: action = source_action elif args.check: action = check_action if action == test_action: failed_recipes = [] recipes = [item for sublist in [glob(os.path.abspath(recipe)) if '*' in recipe else [recipe] for recipe in args.recipe] for item in sublist] for recipe in recipes: try: action(recipe, config) except: if not args.keep_going: raise else: failed_recipes.append(recipe) continue if failed_recipes: print("Failed recipes:") for recipe in failed_recipes: print(" - %s" % recipe) sys.exit(len(failed_recipes)) else: print("All tests passed") outputs = [] elif action: outputs = [action(recipe, config) for recipe in args.recipe] else: outputs = api.build(args.recipe, post=args.post, test_run_post=args.test_run_post, build_only=args.build_only, notest=args.notest, already_built=None, config=config, verify=args.verify, variants=args.variants) if not args.output and len(utils.get_build_folders(config.croot)) > 0: build.print_build_intermediate_warning(config) return outputs
def execute(args): parser, args = parse_args(args) config = Config(**args.__dict__) build.check_external() # change globals in build module, see comment there as well channel_urls = args.__dict__.get('channel') or args.__dict__.get('channels') or () config.channel_urls = [] for url in channel_urls: # allow people to specify relative or absolute paths to local channels # These channels still must follow conda rules - they must have the # appropriate platform-specific subdir (e.g. win-64) if os.path.isdir(url): if not os.path.isabs(url): url = os.path.normpath(os.path.abspath(os.path.join(os.getcwd(), url))) url = url_path(url) config.channel_urls.append(url) config.override_channels = args.override_channels config.verbose = not args.quiet or args.debug if 'purge' in args.recipe: build.clean_build(config) return if 'purge-all' in args.recipe: build.clean_build(config) config.clean_pkgs() return action = None outputs = None if args.output: action = output_action config.verbose = False config.quiet = True config.debug = False elif args.test: action = test_action elif args.source: action = source_action elif args.check: action = check_action if action == test_action: failed_recipes = [] recipes = [item for sublist in [glob(os.path.abspath(recipe)) if '*' in recipe else [recipe] for recipe in args.recipe] for item in sublist] for recipe in recipes: try: action(recipe, config) except: if not args.keep_going: raise else: failed_recipes.append(recipe) continue if failed_recipes: print("Failed recipes:") for recipe in failed_recipes: print(" - %s" % recipe) sys.exit(len(failed_recipes)) else: print("All tests passed") outputs = [] elif action: outputs = [action(recipe, config) for recipe in args.recipe] else: outputs = api.build(args.recipe, post=args.post, build_only=args.build_only, notest=args.notest, already_built=None, config=config, verify=args.verify, variants=args.variants) if not args.output and len(utils.get_build_folders(config.croot)) > 0: build.print_build_intermediate_warning(config) return outputs