Index: recipe_engine/third_party/setuptools/command/alias.py |
diff --git a/recipe_engine/third_party/setuptools/command/alias.py b/recipe_engine/third_party/setuptools/command/alias.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..452a9244ea6766d8cf94425fb583583ef740baee |
--- /dev/null |
+++ b/recipe_engine/third_party/setuptools/command/alias.py |
@@ -0,0 +1,78 @@ |
+from distutils.errors import DistutilsOptionError |
+ |
+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 |