transform_sources_list.py (1890B)
1 #!/usr/bin/env python3 2 # Copyright (c) the JPEG XL Project Authors. All rights reserved. 3 # 4 # Use of this source code is governed by a BSD-style 5 # license that can be found in the LICENSE file. 6 7 import sys 8 9 def find_key(entries : list[str], key: str) -> int: 10 prefix = f"{key.lower()}: " 11 for i in range(len(entries)): 12 if entries[i].lower().startswith(prefix): 13 return i 14 return -1 15 16 def set_value(entries: list[str], key: str, value: str): 17 new_line = f'{key}: {value}' 18 # TODO(eustas): deal with repeated items 19 idx = find_key(entries, key) 20 if idx < 0: 21 entries.append(new_line) 22 else: 23 entries[idx] = new_line 24 25 def transform_deb_822(archs): 26 sources_path = "/etc/apt/sources.list.d/debian.sources" 27 with open(sources_path) as f: 28 lines = [line.rstrip() for line in f] 29 lines.append('') 30 entries = [] 31 entry = [] 32 for line in lines: 33 if len(line) == 0: 34 if len(entry) > 0: 35 entries.append(entry) 36 entry = [] 37 else: 38 entry.append(line) 39 40 new_entries = [] 41 for entry in entries: 42 types_key = find_key(entry, "Types") 43 if types_key < 0: 44 continue 45 if "types: deb" != entry[types_key].lower(): 46 continue 47 deb_entry = entry[:] 48 for arch in archs: 49 deb_entry.append(f"Architectures-Add: {arch}") 50 new_entries.append(deb_entry) 51 deb_src_entry = deb_entry[:] 52 set_value(deb_src_entry, "Types", "deb-src") 53 new_entries.append(deb_src_entry) 54 55 new_lines = [] 56 for entry in new_entries: 57 if len(new_lines) > 0: 58 new_lines.append("") 59 new_lines.extend(entry) 60 61 with open(sources_path, "w") as f: 62 f.write('\n'.join(new_lines)) 63 64 def main(): 65 if len(sys.argv) != 2: 66 print(f"Usage: {sys.argv[1]} ARCHS") 67 sys.exit(1) 68 archs_str = sys.argv[1] 69 archs = archs_str.split(',') 70 if True: 71 transform_deb_822(archs) 72 else: 73 sys.exit(1) 74 75 if __name__ == '__main__': 76 main()