def test_clean_tarballs_and_packages(self): pkgs_dir = PackageCache.first_writable().pkgs_dir mkdir_p(pkgs_dir) pkgs_dir_hold = pkgs_dir + '_hold' try: shutil.move(pkgs_dir, pkgs_dir_hold) with make_temp_env("flask") as prefix: pkgs_dir_contents = [join(pkgs_dir, d) for d in os.listdir(pkgs_dir)] pkgs_dir_dirs = [d for d in pkgs_dir_contents if isdir(d)] pkgs_dir_tarballs = [f for f in pkgs_dir_contents if f.endswith('.tar.bz2')] assert any(basename(d).startswith('flask-') for d in pkgs_dir_dirs) assert any(basename(f).startswith('flask-') for f in pkgs_dir_tarballs) run_command(Commands.CLEAN, prefix, "--packages --yes") run_command(Commands.CLEAN, prefix, "--tarballs --yes") pkgs_dir_contents = [join(pkgs_dir, d) for d in os.listdir(pkgs_dir)] pkgs_dir_dirs = [d for d in pkgs_dir_contents if isdir(d)] pkgs_dir_tarballs = [f for f in pkgs_dir_contents if f.endswith('.tar.bz2')] assert any(basename(d).startswith('flask-') for d in pkgs_dir_dirs) assert not any(basename(f).startswith('flask-') for f in pkgs_dir_tarballs) run_command(Commands.CLEAN, prefix, "--packages --yes") pkgs_dir_contents = [join(pkgs_dir, d) for d in os.listdir(pkgs_dir)] pkgs_dir_dirs = [d for d in pkgs_dir_contents if isdir(d)] assert not any(basename(d).startswith('flask-') for d in pkgs_dir_dirs) finally: rm_rf(pkgs_dir) shutil.move(pkgs_dir_hold, pkgs_dir) PackageCache.clear()
def test_install_tarball_from_local_channel(self): with make_temp_env("flask=0.10.1") as prefix: assert_package_is_installed(prefix, 'flask-0.10.1') flask_data = [p for p in itervalues(linked_data(prefix)) if p['name'] == 'flask'][0] run_command(Commands.REMOVE, prefix, 'flask') assert not package_is_installed(prefix, 'flask-0.10.1') assert_package_is_installed(prefix, 'python') flask_fname = flask_data['fn'] tar_old_path = join(PackageCache.first_writable().pkgs_dir, flask_fname) # Regression test for #2812 # install from local channel flask_data = flask_data.dump() for field in ('url', 'channel', 'schannel'): del flask_data[field] repodata = {'info': {}, 'packages': {flask_fname: IndexRecord(**flask_data)}} with make_temp_env() as channel: subchan = join(channel, context.subdir) noarch_dir = join(channel, 'noarch') channel = path_to_url(channel) os.makedirs(subchan) os.makedirs(noarch_dir) tar_new_path = join(subchan, flask_fname) copyfile(tar_old_path, tar_new_path) with bz2.BZ2File(join(subchan, 'repodata.json.bz2'), 'w') as f: f.write(json.dumps(repodata, cls=EntityEncoder).encode('utf-8')) with bz2.BZ2File(join(noarch_dir, 'repodata.json.bz2'), 'w') as f: f.write(json.dumps({}, cls=EntityEncoder).encode('utf-8')) run_command(Commands.INSTALL, prefix, '-c', channel, 'flask', '--json') assert_package_is_installed(prefix, channel + '::' + 'flask-') run_command(Commands.REMOVE, prefix, 'flask') assert not package_is_installed(prefix, 'flask-0') # Regression test for 2970 # install from build channel as a tarball conda_bld = join(dirname(PackageCache.first_writable().pkgs_dir), 'conda-bld') conda_bld_sub = join(conda_bld, context.subdir) if not isdir(conda_bld_sub): os.makedirs(conda_bld_sub) tar_bld_path = join(conda_bld_sub, flask_fname) copyfile(tar_new_path, tar_bld_path) # CondaFileNotFoundError: '/home/travis/virtualenv/python2.7.9/conda-bld/linux-64/flask-0.10.1-py27_2.tar.bz2'. run_command(Commands.INSTALL, prefix, tar_bld_path) assert_package_is_installed(prefix, 'flask-')
def test_tarball_install_and_bad_metadata(self): with make_temp_env("python flask=0.10.1 --json") as prefix: assert_package_is_installed(prefix, 'flask-0.10.1') flask_data = [ p for p in itervalues(linked_data(prefix)) if p['name'] == 'flask' ][0] run_command(Commands.REMOVE, prefix, 'flask') assert not package_is_installed(prefix, 'flask-0.10.1') assert_package_is_installed(prefix, 'python') flask_fname = flask_data['fn'] tar_old_path = join(PackageCache.first_writable().pkgs_dir, flask_fname) assert isfile(tar_old_path) # regression test for #2886 (part 1 of 2) # install tarball from package cache, default channel run_command(Commands.INSTALL, prefix, tar_old_path) assert_package_is_installed(prefix, 'flask-0.') # regression test for #2626 # install tarball with full path, outside channel tar_new_path = join(prefix, flask_fname) copyfile(tar_old_path, tar_new_path) run_command(Commands.INSTALL, prefix, tar_new_path) assert_package_is_installed(prefix, 'flask-0') # regression test for #2626 # install tarball with relative path, outside channel run_command(Commands.REMOVE, prefix, 'flask') assert not package_is_installed(prefix, 'flask-0.10.1') tar_new_path = relpath(tar_new_path) run_command(Commands.INSTALL, prefix, tar_new_path) assert_package_is_installed(prefix, 'flask-0.') # regression test for #2886 (part 2 of 2) # install tarball from package cache, local channel run_command(Commands.REMOVE, prefix, 'flask', '--json') assert not package_is_installed(prefix, 'flask-0') run_command(Commands.INSTALL, prefix, tar_old_path) # The last install was from the `local::` channel assert_package_is_installed(prefix, 'flask-') # regression test for #2599 linked_data_.clear() flask_metadata = glob( join(prefix, 'conda-meta', flask_fname[:-8] + '.json'))[-1] bad_metadata = join(prefix, 'conda-meta', 'flask.json') copyfile(flask_metadata, bad_metadata) assert not package_is_installed(prefix, 'flask', exact=True) assert_package_is_installed(prefix, 'flask-0.')
def test_clean_tarballs_and_packages(self): pkgs_dir = PackageCache.first_writable().pkgs_dir mkdir_p(pkgs_dir) pkgs_dir_hold = pkgs_dir + '_hold' try: shutil.move(pkgs_dir, pkgs_dir_hold) with make_temp_env("flask") as prefix: pkgs_dir_contents = [ join(pkgs_dir, d) for d in os.listdir(pkgs_dir) ] pkgs_dir_dirs = [d for d in pkgs_dir_contents if isdir(d)] pkgs_dir_tarballs = [ f for f in pkgs_dir_contents if f.endswith('.tar.bz2') ] assert any( basename(d).startswith('flask-') for d in pkgs_dir_dirs) assert any( basename(f).startswith('flask-') for f in pkgs_dir_tarballs) run_command(Commands.CLEAN, prefix, "--packages --yes") run_command(Commands.CLEAN, prefix, "--tarballs --yes") pkgs_dir_contents = [ join(pkgs_dir, d) for d in os.listdir(pkgs_dir) ] pkgs_dir_dirs = [d for d in pkgs_dir_contents if isdir(d)] pkgs_dir_tarballs = [ f for f in pkgs_dir_contents if f.endswith('.tar.bz2') ] assert any( basename(d).startswith('flask-') for d in pkgs_dir_dirs) assert not any( basename(f).startswith('flask-') for f in pkgs_dir_tarballs) run_command(Commands.CLEAN, prefix, "--packages --yes") pkgs_dir_contents = [ join(pkgs_dir, d) for d in os.listdir(pkgs_dir) ] pkgs_dir_dirs = [d for d in pkgs_dir_contents if isdir(d)] assert not any( basename(d).startswith('flask-') for d in pkgs_dir_dirs) finally: rm_rf(pkgs_dir) shutil.move(pkgs_dir_hold, pkgs_dir) PackageCache.clear()
def test_tarball_install_and_bad_metadata(self): with make_temp_env("python flask=0.10.1 --json") as prefix: assert_package_is_installed(prefix, 'flask-0.10.1') flask_data = [p for p in itervalues(linked_data(prefix)) if p['name'] == 'flask'][0] run_command(Commands.REMOVE, prefix, 'flask') assert not package_is_installed(prefix, 'flask-0.10.1') assert_package_is_installed(prefix, 'python') flask_fname = flask_data['fn'] tar_old_path = join(PackageCache.first_writable().pkgs_dir, flask_fname) assert isfile(tar_old_path) # regression test for #2886 (part 1 of 2) # install tarball from package cache, default channel run_command(Commands.INSTALL, prefix, tar_old_path) assert_package_is_installed(prefix, 'flask-0.') # regression test for #2626 # install tarball with full path, outside channel tar_new_path = join(prefix, flask_fname) copyfile(tar_old_path, tar_new_path) run_command(Commands.INSTALL, prefix, tar_new_path) assert_package_is_installed(prefix, 'flask-0') # regression test for #2626 # install tarball with relative path, outside channel run_command(Commands.REMOVE, prefix, 'flask') assert not package_is_installed(prefix, 'flask-0.10.1') tar_new_path = relpath(tar_new_path) run_command(Commands.INSTALL, prefix, tar_new_path) assert_package_is_installed(prefix, 'flask-0.') # regression test for #2886 (part 2 of 2) # install tarball from package cache, local channel run_command(Commands.REMOVE, prefix, 'flask', '--json') assert not package_is_installed(prefix, 'flask-0') run_command(Commands.INSTALL, prefix, tar_old_path) # The last install was from the `local::` channel assert_package_is_installed(prefix, 'flask-') # regression test for #2599 linked_data_.clear() flask_metadata = glob(join(prefix, 'conda-meta', flask_fname[:-8] + '.json'))[-1] bad_metadata = join(prefix, 'conda-meta', 'flask.json') copyfile(flask_metadata, bad_metadata) assert not package_is_installed(prefix, 'flask', exact=True) assert_package_is_installed(prefix, 'flask-0.')
def test_install_tarball_from_local_channel(self): with make_temp_env("flask=0.10.1") as prefix: assert_package_is_installed(prefix, 'flask-0.10.1') flask_data = [ p for p in itervalues(linked_data(prefix)) if p['name'] == 'flask' ][0] run_command(Commands.REMOVE, prefix, 'flask') assert not package_is_installed(prefix, 'flask-0.10.1') assert_package_is_installed(prefix, 'python') flask_fname = flask_data['fn'] tar_old_path = join(PackageCache.first_writable().pkgs_dir, flask_fname) # Regression test for #2812 # install from local channel flask_data = flask_data.dump() for field in ('url', 'channel', 'schannel'): del flask_data[field] repodata = { 'info': {}, 'packages': { flask_fname: IndexRecord(**flask_data) } } with make_temp_env() as channel: subchan = join(channel, context.subdir) noarch_dir = join(channel, 'noarch') channel = path_to_url(channel) os.makedirs(subchan) os.makedirs(noarch_dir) tar_new_path = join(subchan, flask_fname) copyfile(tar_old_path, tar_new_path) with bz2.BZ2File(join(subchan, 'repodata.json.bz2'), 'w') as f: f.write( json.dumps(repodata, cls=EntityEncoder).encode('utf-8')) with bz2.BZ2File(join(noarch_dir, 'repodata.json.bz2'), 'w') as f: f.write(json.dumps({}, cls=EntityEncoder).encode('utf-8')) run_command(Commands.INSTALL, prefix, '-c', channel, 'flask', '--json') assert_package_is_installed(prefix, channel + '::' + 'flask-') run_command(Commands.REMOVE, prefix, 'flask') assert not package_is_installed(prefix, 'flask-0') # Regression test for 2970 # install from build channel as a tarball conda_bld = join( dirname(PackageCache.first_writable().pkgs_dir), 'conda-bld') conda_bld_sub = join(conda_bld, context.subdir) if not isdir(conda_bld_sub): os.makedirs(conda_bld_sub) tar_bld_path = join(conda_bld_sub, flask_fname) copyfile(tar_new_path, tar_bld_path) # CondaFileNotFoundError: '/home/travis/virtualenv/python2.7.9/conda-bld/linux-64/flask-0.10.1-py27_2.tar.bz2'. run_command(Commands.INSTALL, prefix, tar_bld_path) assert_package_is_installed(prefix, 'flask-')