[GRASS-SVN] r67478 - grass/trunk/scripts/g.extension
svn_grass at osgeo.org
svn_grass at osgeo.org
Mon Jan 4 05:02:31 PST 2016
Author: martinl
Date: 2016-01-04 05:02:31 -0800 (Mon, 04 Jan 2016)
New Revision: 67478
Modified:
grass/trunk/scripts/g.extension/g.extension.py
Log:
g.extension: rewrite install_extension_win() to use new layout
Modified: grass/trunk/scripts/g.extension/g.extension.py
===================================================================
--- grass/trunk/scripts/g.extension/g.extension.py 2016-01-04 08:15:52 UTC (rev 67477)
+++ grass/trunk/scripts/g.extension/g.extension.py 2016-01-04 13:02:31 UTC (rev 67478)
@@ -134,6 +134,7 @@
import shutil
import zipfile
import tempfile
+from distutils.dir_util import copy_tree
try:
from urllib2 import HTTPError, URLError
@@ -879,56 +880,39 @@
def install_extension_win(name):
"""Install extension on MS Windows"""
- # do not use hardcoded url -
- # https://wingrass.fsv.cvut.cz/platform/grassXX/addonsX.X.X
grass.message(_("Downloading precompiled GRASS Addons <%s>...") %
options['extension'])
+
+ # build base URL
if build_platform == 'x86_64':
platform = build_platform
else:
platform = 'x86'
- url = "https://wingrass.fsv.cvut.cz/%(platform)s/" \
- "grass%(major)s%(minor)s/addons/" \
- "grass-%(major)s.%(minor)s.%(patch)s/" % \
- {'platform' : platform, 'major': version[0],
- 'minor': version[1], 'patch': version[2]}
+ base_url = "http://wingrass.fsv.cvut.cz/%(platform)s/" \
+ "grass%(major)s%(minor)s/addons/" \
+ "grass-%(major)s.%(minor)s.%(patch)s" % \
+ {'platform' : platform, 'major': version[0],
+ 'minor': version[1], 'patch': version[2]}
- grass.debug("url=%s" % url, 1)
-
- try:
- zfile = url + name + '.zip'
- url_file = urlopen(zfile, proxies=PROXIES)
-
- # create addons dir if not exists
- if not os.path.exists(options['prefix']):
- try:
- os.mkdir(options['prefix'])
- except OSError as error:
- grass.fatal(_("Unable to create <{}>. {}")
- .format(options['prefix'], error))
-
- # download data
- tmp_file = tempfile.TemporaryFile()
- tmp_file.write(url_file.read())
- try:
- zfobj = zipfile.ZipFile(tmp_file)
- except zipfile.BadZipfile as error:
- grass.fatal('%s: %s' % (error, zfile))
-
- for name in zfobj.namelist():
- if name.endswith('/'):
- directory = os.path.join(options['prefix'], name)
- if not os.path.exists(directory):
- os.mkdir(directory)
- else:
- outfile = open(os.path.join(options['prefix'], name), 'wb')
- outfile.write(zfobj.read(name))
- outfile.close()
-
- tmp_file.close()
- except HTTPError:
- grass.fatal(_("GRASS Addons <%s> not found") % name)
-
+ # resolve ZIP URL
+ source, url = resolve_source_code(url='{}/{}.zip'.format(base_url, name))
+
+ # to hide non-error messages from subprocesses
+ if grass.verbosity() <= 2:
+ outdev = open(os.devnull, 'w')
+ else:
+ outdev = sys.stdout
+
+ # download Addons ZIP file
+ os.chdir(TMPDIR) # this is just to not leave something behind
+ srcdir = os.path.join(TMPDIR, name)
+ download_source_code(source=source, url=url, name=name,
+ outdev=outdev, directory=srcdir, tmpdir=TMPDIR)
+
+ # copy Addons copy tree to destination directory
+ move_extracted_files(extract_dir=srcdir, target_dir=options['prefix'],
+ files=os.listdir(srcdir))
+
return 0
@@ -972,12 +956,15 @@
if len(files) == 1:
shutil.copytree(os.path.join(extract_dir, files[0]), target_dir)
else:
- os.mkdir(target_dir)
+ if not os.path.exists(target_dir):
+ os.mkdir(target_dir)
for file_name in files:
actual_file = os.path.join(extract_dir, file_name)
if os.path.isdir(actual_file):
- shutil.copytree(actual_file,
- os.path.join(target_dir, file_name))
+ # shutil.copytree() replaced by copy_tree() because
+ # shutil's copytree() fails when subdirectory exists
+ copy_tree(actual_file,
+ os.path.join(target_dir, file_name))
else:
shutil.copy(actual_file, os.path.join(target_dir, file_name))
More information about the grass-commit
mailing list