forked from github/codeql
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathpath_rename.py
44 lines (38 loc) · 1.46 KB
/
path_rename.py
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
import os
import semmle.projectlayout as projectlayout
from semmle.util import SemmleError
__all__ = "renamer_from_options_and_env"
def _realpath(path):
try:
return os.path.realpath(path)
except IOError:
return os.path.abspath(path)
def renamer_from_options_and_env(options, logger):
'Returns a renamer function which takes a path and returns the nominal path'
preserve_symlinks = os.environ.get('SEMMLE_PRESERVE_SYMLINKS', "")
if options.no_symlinks or preserve_symlinks.lower() == "true":
pre_rename = os.path.abspath
else:
pre_rename = _realpath
if options.renamer:
try:
module = __import__(options.renamer, fromlist=['get_renamer'])
rename = module.get_renamer()
except (AttributeError, ImportError):
raise SemmleError("Cannot get renamer from module " + options.renamer)
else:
path_transformer = os.environ.get("SEMMLE_PATH_TRANSFORMER", None)
if path_transformer:
logger.info("Using path transformer '%s'", path_transformer)
rename = projectlayout.get_renamer(path_transformer)
else:
rename = lambda path : path
if os.name == "nt":
def post_rename(path):
if path[1] == ':':
path = path[0].upper() + path[1:]
return path
else:
post_rename = lambda path : path
renamer = lambda path : post_rename(rename(pre_rename(path)))
return renamer