mirror of
				https://git.launchpad.net/livecd-rootfs
				synced 2025-10-31 00:44:07 +00:00 
			
		
		
		
	minimize-manual.py: Followup with some cleanup, correct permissions
This commit is contained in:
		
							parent
							
								
									9360135b2c
								
							
						
					
					
						commit
						2e9349c543
					
				
							
								
								
									
										58
									
								
								live-build/auto/minimize-manual.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										58
									
								
								live-build/auto/minimize-manual.py
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @ -1,48 +1,52 @@ | |||||||
| #!/usr/bin/python3 | #!/usr/bin/python3 | ||||||
| """Minimize the number of manually installed packages in the image. | """Minimize the number of manually installed packages in the image. | ||||||
| 
 | 
 | ||||||
| Finds all manually meta packages and marks their dependencies as | Finds all manually installed meta packages, and marks their dependencies | ||||||
| automatically installed. | as automatically installed. | ||||||
| """ | """ | ||||||
| import apt |  | ||||||
| import sys | import sys | ||||||
| 
 | 
 | ||||||
|  | import apt | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| def is_root(pkg): | def is_root(pkg): | ||||||
|  |     """Check if the package is a root package (manually inst. meta)""" | ||||||
|     return (pkg.is_installed and |     return (pkg.is_installed and | ||||||
|             not pkg.is_auto_installed and |             not pkg.is_auto_installed and | ||||||
|             (pkg.section == "metapackages" or |             (pkg.section == "metapackages" or | ||||||
|              pkg.section.endswith("/metapackages"))) |              pkg.section.endswith("/metapackages"))) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| c = apt.Cache(rootdir=sys.argv[1] if len(sys.argv) > 1 else None) | def main(): | ||||||
|  |     """Main function""" | ||||||
|  |     cache = apt.Cache(rootdir=sys.argv[1] if len(sys.argv) > 1 else None) | ||||||
|  |     roots = set(pkg for pkg in cache if is_root(pkg)) | ||||||
|  |     workset = set(roots) | ||||||
|  |     seen = set() | ||||||
| 
 | 
 | ||||||
| roots = set(pkg for pkg in c if is_root(pkg)) |     with cache.actiongroup(): | ||||||
| workset = set(roots) |         while True: | ||||||
| seen = set() |             print("Iteration", file=sys.stderr) | ||||||
|  |             to_proc = workset - seen | ||||||
|  |             if not to_proc: | ||||||
|  |                 break | ||||||
|  |             for pkg in sorted(to_proc): | ||||||
|  |                 print("    Visiting", pkg, file=sys.stderr) | ||||||
| 
 | 
 | ||||||
| with c.actiongroup(): |                 if pkg not in roots: | ||||||
|     while True: |                     pkg.mark_auto() | ||||||
| 
 | 
 | ||||||
|         print("Iteration", file=sys.stderr) |                 for dep in (pkg.installed.dependencies + | ||||||
|         to_proc = workset - seen |                             pkg.installed.recommends): | ||||||
|         if not to_proc: |                     for bdep in dep.or_dependencies: | ||||||
|             break |                         for ver in bdep.target_versions: | ||||||
|         for pkg in sorted(to_proc): |                             if ver.package.is_installed: | ||||||
|             print("    Visiting", pkg, file=sys.stderr) |                                 workset.add(ver.package) | ||||||
| 
 | 
 | ||||||
|             # Mark every |                 seen.add(pkg) | ||||||
|             if pkg not in roots: |  | ||||||
|                 pkg.mark_auto() |  | ||||||
| 
 | 
 | ||||||
|             for dep in pkg.installed.dependencies + pkg.installed.recommends: |         cache.commit() | ||||||
|                 if dep.rawtype not in ('Depends', 'PreDepends', 'Recommends'): |  | ||||||
|                     continue |  | ||||||
|                 for bdep in dep.or_dependencies: |  | ||||||
|                     for v in bdep.target_versions: |  | ||||||
|                         if v.package.is_installed: |  | ||||||
|                             workset.add(v.package) |  | ||||||
| 
 | 
 | ||||||
|             seen.add(pkg) |  | ||||||
| 
 | 
 | ||||||
|     c.commit() | if __name__ == '__main__': | ||||||
|  |     main() | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user