89 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| some random snippets to incorporate...
 | |
| 
 | |
| 
 | |
| 
 | |
| ######################
 | |
| this was to assist with https://www.archlinux.org/news/perl-library-path-change/
 | |
| the following was used to gen the /tmp/perlfix.pkgs.lst:
 | |
| pacman -Qqo '/usr/lib/perl5/vendor_perl' >> /tmp/perlfix.pkgs.lst ; pacman -Qqo '/usr/lib/perl5/site_perl' >> /tmp/perlfix.pkgs.lst
 | |
| ######################
 | |
| 
 | |
| #!/usr/bin/env python3
 | |
| 
 | |
| import datetime
 | |
| import re
 | |
| import os
 | |
| import pprint
 | |
| import subprocess
 | |
| 
 | |
| pkgs = []
 | |
| 
 | |
| pkglstfile = '/tmp/perlfix.pkgs.lst'
 | |
| 
 | |
| if os.path.isfile(pkglstfile):
 | |
|     with open(pkglstfile, 'r') as f:
 | |
|         pkgs = f.read().splitlines()
 | |
| 
 | |
| pkgd = {'rdeps': [],
 | |
|         'deps': [],
 | |
|         'remove': []}
 | |
| 
 | |
| for p in pkgs:
 | |
|     pkgchkcmd = ['apacman', '-Q', p]
 | |
|     with open(os.devnull, 'w') as devnull:
 | |
|         pkgchk = subprocess.run(pkgchkcmd, stdout = devnull, stderr = devnull).returncode
 | |
|     if pkgchk != 0:  # not installed anymore
 | |
|         break
 | |
|     cmd = ['apacman',
 | |
|            '-Qi',
 | |
|            p]
 | |
|     stdout = subprocess.run(cmd, stdout = subprocess.PIPE).stdout.decode('utf-8').strip().splitlines()
 | |
|     #pprint.pprint(stdout)
 | |
|     d = {re.sub('\s', '_', k.strip().lower()):v.strip() for k, v in (dict(k.split(':', 1) for k in stdout).items())}
 | |
| 
 | |
|     # some pythonizations..
 | |
|     # list of things(keys) that should be lists
 | |
|     ll = ['architecture', 'conflicts_with', 'depends_on', 'groups', 'licenses', 'make_depends',
 | |
|           'optional_deps', 'provides', 'replaces', 'required_by']
 | |
|     # and now actually listify
 | |
|     for k in ll:
 | |
|         if k in d.keys():
 | |
|             if d[k].lower() in ('none', ''):
 | |
|                 d[k] = None
 | |
|             else:
 | |
|                 d[k] = d[k].split()
 | |
|     # Not necessary... blah blah inconsistent whitespace blah blah.
 | |
|     #for k in ('build_date', 'install_date'):
 | |
|     #    if k in d.keys():
 | |
|     #        try:
 | |
|     #            d[k] = datetime.datetime.strptime(d[k], '%a %d %b %Y %H:%M:%S %p %Z')
 | |
|     #        except:
 | |
|     #            d[k] = datetime.datetime.strptime(d[k], '%a %d %b %Y %H:%M:%S %p')
 | |
| 
 | |
|     #pprint.pprint(d)
 | |
|     if d['required_by']:
 | |
|         pkgd['rdeps'].extend(d['required_by'])
 | |
|     else:
 | |
|         if d['install_reason'] != 'Explicitly installed':
 | |
|             pkgd['remove'].append(p)
 | |
|     if d['depends_on']:
 | |
|         pkgd['deps'].extend(d['depends_on'])
 | |
|     #break
 | |
| 
 | |
| for x in ('rdeps', 'deps'):
 | |
|     pkgd[x].sort()
 | |
| 
 | |
| #for p in pkgd['rdeps']:
 | |
| #    if p in pkgd['deps']:
 | |
| #        pkgd['
 | |
| 
 | |
| #print('DEPENDENCIES:')
 | |
| #print('\n'.join(pkgd['deps']))
 | |
| #print('\nREQUIRED BY:')
 | |
| #print('\n'.join(pkgd['rdeps']))
 | |
| #print('\nCAN REMOVE:')
 | |
| print('\n'.join(pkgd['remove']))
 | |
| 
 | |
| #cmd = ['apacman', '-R']
 | |
| #cmd.extend(pkgd['remove'])
 | |
| #subprocess.run(cmd) | 
