Skip to content

Commit e062ec2

Browse files
committed
Added support for non-ascii filenames, added a check for invalid filenames on Windows, enhanced Windows git support to use TortoisePlink when available to prevent ssh host key caching issues
1 parent e45d838 commit e062ec2

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

Package Control.py

+22-1
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,7 @@ def find_binary(self, name):
465465
if os.name == 'nt':
466466
dirs = ['C:\\Program Files\\Git\\bin',
467467
'C:\\Program Files (x86)\\Git\\bin',
468+
'C:\\Program Files\\TortoiseGit\\bin',
468469
'C:\\Program Files\\Mercurial',
469470
'C:\\Program Files (x86)\\Mercurial',
470471
'C:\\Program Files (x86)\\TortoiseHg',
@@ -501,6 +502,11 @@ def retrieve_binary(self):
501502
'can be used for reference, but changes to that will be ' +
502503
'overwritten upon next upgrade.') % (__name__, name, __name__))
503504
return False
505+
506+
if os.name == 'nt':
507+
tortoise_plink = self.find_binary('TortoisePlink.exe')
508+
if tortoise_plink:
509+
os.putenv('GIT_SSH', tortoise_plink)
504510
return binary
505511

506512
def run(self):
@@ -927,6 +933,16 @@ def slow_delete(function, path, excinfo):
927933
root_level_paths[0].endswith('/')
928934
for path in package_zip.namelist():
929935
dest = path
936+
if os.name == 'nt':
937+
regex = ':|\*|\?|"|<|>|\|'
938+
if re.search(regex, dest) != None:
939+
print ('%s: Skipping file from package ' +
940+
'named %s due to an invalid filename') % (__name__,
941+
path)
942+
continue
943+
regex = '[\x00-\x1F\x7F-\xFF]'
944+
if re.search(regex, dest) != None:
945+
dest = dest.decode('utf-8')
930946
# If there was only a single directory in the package, we remove
931947
# that folder name from the paths as we extract entries
932948
if skip_root_dir:
@@ -939,7 +955,12 @@ def slow_delete(function, path, excinfo):
939955
dest_dir = os.path.dirname(dest)
940956
if not os.path.exists(dest_dir):
941957
os.makedirs(dest_dir)
942-
open(dest, 'wb').write(package_zip.read(path))
958+
try:
959+
open(dest, 'wb').write(package_zip.read(path))
960+
except (IOError, UnicodeDecodeError):
961+
print ('%s: Skipping file from package ' +
962+
'named %s due to an invalid filename') % (__name__,
963+
path)
943964
package_zip.close()
944965

945966
package_metadata_file = os.path.join(package_dir,

package-metadata.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "1.1.3",
2+
"version": "1.1.4",
33
"url": "http://wbond.net/sublime_packages/package_control",
44
"description": "A full-featured package manager"
55
}

0 commit comments

Comments
 (0)