Commit Graph

13 Commits

Author SHA1 Message Date
Matt Davis 9a3b3ce706 Issue 4993 Add standard pre commit hooks and apply linting. (#4994)
* Add .pre-commit-config.yaml to the project and exclude tests (for now).  This does not include the MyPy linting that pip does but does include everything else.
2022-03-29 23:01:50 -04:00
Frost Ming a82bbb7b27 Try switching from delegator to subprocess 2021-07-28 16:39:36 +08:00
Frost Ming ca5d931f1f Update to py36 plus syntax 2021-07-28 10:59:00 +08:00
Dan Ryan dcfce70817 Fix python path discovery if not called python
- Begin a refactor of `delegator.run` invocation to ensure we capture
  and handle failures with our own exception wrappers
- Additoinally capture output and error logging and command information
  when running in verbose mode (should avoid significant repitition in
  the codebase)
- Refactor `which` and `system_which` to fallback to pythonfinder's
implementation
- Abstract `is_python_command` to identify whether we are looking for
  python, this enables us to rely on `pythonfinder.Finder.find_all_python_versions()`
  to ensure we aren't skipping python versions
- Fixes #2783

Signed-off-by: Dan Ryan <dan@danryan.co>
2019-03-16 15:10:40 -04:00
Tzu-ping Chung 6a93e6cf44 Quote arguments with carets for cmd.exe
Carets introduce a difficult situation since they are essentially
"lossy" when parses. Consider this in cmd.exe:

    > echo "foo^bar"
    "foo^bar"
    > echo foo^^bar
    foo^bar

The two commands produce different results, but are both parsed by the
shell as `foo^bar`, and there's essentially no sensible way to tell what
was actually passed in. This implementation assumes the quoted variation
(the first) since it is easier to implement, and arguably the more common
case.
2018-11-28 19:30:45 +08:00
Tzu-ping Chung 86a2786954 Quote command if it contains parentheses
The command can be safely quoted in this case since non-quotable commands
(cmd built-in) do not have parentheses.

Note that this change only applies to the command, not arguments.
Parentheses in arguments can be correctly interpreted without quotes, and
the quotes, like spaces, will cause incorrect outputs for echo etc.
2018-11-07 20:42:35 +09:00
Tzu-ping Chung 9315887101 Only quote arguments during cmdify if needed 2018-07-11 17:17:08 +08:00
kennethreitz 6314586c9f black 2018-07-03 09:54:46 -04:00
Tzu-ping Chung 483bf175cf Rework cmdparse.Script API
The API now requires a command argument from signature. Parsing errors
(no command from input) is thrown as a custom exception, and caught by
the outmost possible invocation to emit a message from click.
2018-04-06 23:26:36 -04:00
Tzu-ping Chung d1eeeced45 Apply script parsing fix from pypi/pipenv#1909 2018-04-06 23:26:35 -04:00
Dan Ryan 61418fda20 Fix all tests and split out requirements refactor
- includes missing artifacts
- fixes cmdprse script
- Remove extraneous changes
- Fix tests
2018-04-06 23:25:37 -04:00
Tzu-ping Chung 9dda593650 Improve python 2 cmdparse compatibility
- Use string_types to improve compat on Python 2
- Correct PYTHON_VERSION in appveyor.yml
- Let's debug
2018-04-06 23:22:30 -04:00
Tzu-ping Chung 15c7308ca9 Proper script argument escaping
I chose to make Script.parse to always operate in POSIX mode so it is much
easier to write commands compatible on all platforms.

Script.cmdify is the important part on Windows. It ensures the argument
line is always escaped and joined properly on Windows, not just for the
subset that works both under POSIX and Windows (as is the case of
shlex.escape).
2018-04-06 23:22:30 -04:00