mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| import distutils, os
 | |
| from setuptools import Command
 | |
| from distutils.util import convert_path
 | |
| from distutils import log
 | |
| from distutils.errors import *
 | |
| from setuptools.command.setopt import edit_config, option_base, config_file
 | |
| 
 | |
| def shquote(arg):
 | |
|     """Quote an argument for later parsing by shlex.split()"""
 | |
|     for c in '"', "'", "\\", "#":
 | |
|         if c in arg: return repr(arg)
 | |
|     if arg.split()<>[arg]:
 | |
|         return repr(arg)
 | |
|     return arg        
 | |
| 
 | |
| 
 | |
| class alias(option_base):
 | |
|     """Define a shortcut that invokes one or more commands"""
 | |
|     
 | |
|     description = "define a shortcut to invoke one or more commands"
 | |
|     command_consumes_arguments = True
 | |
| 
 | |
|     user_options = [
 | |
|         ('remove',   'r', 'remove (unset) the alias'), 
 | |
|     ] + option_base.user_options
 | |
| 
 | |
|     boolean_options = option_base.boolean_options + ['remove']
 | |
| 
 | |
|     def initialize_options(self):
 | |
|         option_base.initialize_options(self)
 | |
|         self.args = None
 | |
|         self.remove = None
 | |
| 
 | |
|     def finalize_options(self):
 | |
|         option_base.finalize_options(self)
 | |
|         if self.remove and len(self.args)<>1:
 | |
|             raise DistutilsOptionError(
 | |
|                 "Must specify exactly one argument (the alias name) when "
 | |
|                 "using --remove"
 | |
|             )
 | |
| 
 | |
|     def run(self):
 | |
|         aliases = self.distribution.get_option_dict('aliases')
 | |
| 
 | |
|         if not self.args:
 | |
|             print "Command Aliases"
 | |
|             print "---------------"
 | |
|             for alias in aliases:
 | |
|                 print "setup.py alias", format_alias(alias, aliases)
 | |
|             return
 | |
| 
 | |
|         elif len(self.args)==1:
 | |
|             alias, = self.args
 | |
|             if self.remove:
 | |
|                 command = None
 | |
|             elif alias in aliases:
 | |
|                 print "setup.py alias", format_alias(alias, aliases)
 | |
|                 return
 | |
|             else:
 | |
|                 print "No alias definition found for %r" % alias
 | |
|                 return
 | |
|         else:
 | |
|             alias = self.args[0]
 | |
|             command = ' '.join(map(shquote,self.args[1:]))
 | |
| 
 | |
|         edit_config(self.filename, {'aliases': {alias:command}}, self.dry_run)
 | |
| 
 | |
| 
 | |
| def format_alias(name, aliases):
 | |
|     source, command = aliases[name]
 | |
|     if source == config_file('global'):
 | |
|         source = '--global-config '
 | |
|     elif source == config_file('user'):
 | |
|         source = '--user-config '
 | |
|     elif source == config_file('local'):
 | |
|         source = ''
 | |
|     else:
 | |
|         source = '--filename=%r' % source
 | |
|     return source+name+' '+command
 | |
|             
 | |
| 
 | |
| 
 | 
