FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
pre-commit/pre_commit/parse_shebang.py at wip_progress_dots · pre-commit/pre-commit · GitHub
pre-commit
pre-commit
Repository navigation
Code
Issues
17
(17)
Pull requests
8
(8)
Actions
Security and quality
Insights
Expand file tree
Breadcrumbs
pre-commit
/
pre_commit
/
parse_shebang.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
80 lines (59 loc) · 2.14 KB
Breadcrumbs
pre-commit
/
pre_commit
/
parse_shebang.py
Copy path
File metadata and controls
80 lines (59 loc) · 2.14 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from
__future__
import
absolute_import
from
__future__
import
unicode_literals
import
os
.
path
from
identify
.
identify
import
parse_shebang_from_file
class
ExecutableNotFoundError
(
OSError
):
def
to_output
(
self
):
return
(
1
,
self
.
args
[
0
].
encode
(
'UTF-8'
),
b''
)
def
parse_filename
(
filename
):
if
not
os
.
path
.
exists
(
filename
):
return
()
else
:
return
parse_shebang_from_file
(
filename
)
def
find_executable
(
exe
,
_environ
=
None
):
exe
=
os
.
path
.
normpath
(
exe
)
if
os
.
sep
in
exe
:
return
exe
environ
=
_environ
if
_environ
is
not
None
else
os
.
environ
if
'PATHEXT'
in
environ
:
possible_exe_names
=
tuple
(
exe
+
ext
.
lower
()
for
ext
in
environ
[
'PATHEXT'
].
split
(
os
.
pathsep
)
)
+
(
exe
,)
else
:
possible_exe_names
=
(
exe
,)
for
path
in
environ
.
get
(
'PATH'
,
''
).
split
(
os
.
pathsep
):
for
possible_exe_name
in
possible_exe_names
:
joined
=
os
.
path
.
join
(
path
,
possible_exe_name
)
if
os
.
path
.
isfile
(
joined
)
and
os
.
access
(
joined
,
os
.
X_OK
):
return
joined
else
:
return
None
def
normexe
(
orig
):
def
_error
(
msg
):
raise
ExecutableNotFoundError
(
'Executable `{}` {}'
.
format
(
orig
,
msg
))
if
os
.
sep
not
in
orig
and
(
not
os
.
altsep
or
os
.
altsep
not
in
orig
):
exe
=
find_executable
(
orig
)
if
exe
is
None
:
_error
(
'not found'
)
return
exe
elif
os
.
path
.
isdir
(
orig
):
_error
(
'is a directory'
)
elif
not
os
.
path
.
isfile
(
orig
):
_error
(
'not found'
)
elif
not
os
.
access
(
orig
,
os
.
X_OK
):
# pragma: windows no cover
_error
(
'is not executable'
)
else
:
return
orig
def
normalize_cmd
(
cmd
):
"""Fixes for the following issues on windows
- https://bugs.python.org/issue8557
- windows does not parse shebangs
This function also makes deep-path shebangs work just fine
"""
# Use PATH to determine the executable
exe
=
normexe
(
cmd
[
0
])
# Figure out the shebang from the resulting command
cmd
=
parse_filename
(
exe
)
+
(
exe
,)
+
cmd
[
1
:]
# This could have given us back another bare executable
exe
=
normexe
(
cmd
[
0
])
return
(
exe
,)
+
cmd
[
1
:]
Back
|
FazBrowse Home
|
New Git URL