def license_from_copying_hash(copying, srcdir): """Add licenses based on the hash of the copying file""" data = tarball.get_contents(copying) if data.startswith(b'#!'): # Not a license if this is a script return sh = hashlib.sha1() sh.update(data) hash_sum = sh.hexdigest() if config.license_fetch: values = {'hash': hash_sum, 'text': data, 'package': tarball.name} data = urllib.parse.urlencode(values) data = data.encode('utf-8') buffer = BytesIO() c = pycurl.Curl() c.setopt(c.URL, config.license_fetch) c.setopt(c.WRITEDATA, buffer) c.setopt(c.POSTFIELDS, data) c.setopt(c.FOLLOWLOCATION, 1) try: c.perform() except Exception as excep: print_fatal("Failed to fetch license from {}: {}".format( config.license_fetch, excep)) c.close() sys.exit(1) c.close() response = buffer.getvalue() page = response.decode('utf-8').strip() if page: print("License : ", page, " (server) (", hash_sum, ")") process_licenses(page) if page != "none": lic_path = copying[len(srcdir) + 1:] license_files.append(shlex.quote(lic_path)) return if hash_sum in config.license_hashes: add_license(config.license_hashes[hash_sum]) else: if not config.license_show: return print_warning("Unknown license {0} with hash {1}".format( copying, hash_sum)) hash_url = config.license_show % {'HASH': hash_sum} print_warning("Visit {0} to enter".format(hash_url))
def license_from_copying_hash(copying, srcdir): """Add licenses based on the hash of the copying file.""" data = tarball.get_contents(copying) if data.startswith(b'#!'): # Not a license if this is a script return sh = hashlib.sha1() sh.update(data) hash_sum = sh.hexdigest() """ decode license text """ detected = chardet.detect(data) license_charset = detected['encoding'] if license_charset == 'ISO-8859-1': if b'\xff' in data: license_charset = 'ISO-8859-13' elif b'\xd2' in data and b'\xd3' in data: license_charset = 'mac_roman' if not license_charset: # This is not a text file return data = data.decode(license_charset) if config.license_fetch: values = {'hash': hash_sum, 'text': data, 'package': tarball.name} data = urllib.parse.urlencode(values) data = data.encode('utf-8') buffer = download.do_curl(config.license_fetch, post=data, is_fatal=True) response = buffer.getvalue() page = response.decode('utf-8').strip() if page: print("License : ", page, " (server) (", hash_sum, ")") process_licenses(page) if page != "none": lic_path = copying[len(srcdir) + 1:] license_files.append(shlex.quote(lic_path)) return if hash_sum in config.license_hashes: add_license(config.license_hashes[hash_sum]) else: if not config.license_show: return print_warning("Unknown license {0} with hash {1}".format( copying, hash_sum)) hash_url = config.license_show % {'HASH': hash_sum} print_warning("Visit {0} to enter".format(hash_url))
def license_from_copying_hash(copying, srcdir): """Add licenses based on the hash of the copying file.""" data = tarball.get_contents(copying) if data.startswith(b'#!'): # Not a license if this is a script return raw_data = data data = decode_license(data) if not data: return sh = hashlib.sha1() sh.update(raw_data) hash_sum = sh.hexdigest() if config.license_fetch: values = {'hash': hash_sum, 'text': data, 'package': tarball.name} data = urllib.parse.urlencode(values) data = data.encode('utf-8') buffer = download.do_curl(config.license_fetch, post=data, is_fatal=True) response = buffer.getvalue() page = response.decode('utf-8').strip() if page: print("License : ", page, " (server) (", hash_sum, ")") process_licenses(page) if page != "none": # Strip the build source directory off the front lic_path = copying[len(srcdir):] # Strip any leading slashes while lic_path.startswith('/'): lic_path = lic_path[1:] lic_path = shlex.quote(lic_path) license_files.append(lic_path) hashes[lic_path] = hash_sum return if hash_sum in config.license_hashes: add_license(config.license_hashes[hash_sum]) else: if not config.license_show: return print_warning("Unknown license {0} with hash {1}".format( copying, hash_sum)) hash_url = config.license_show % {'HASH': hash_sum} print_warning("Visit {0} to enter".format(hash_url))