diff -r 866a4775f8fd -r 8d451676c241 bin/fetch2 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/fetch2 Mon May 31 08:09:38 2021 +0000 @@ -0,0 +1,50 @@ +#!/usr/bin/env python + +import sys +import os +import os.path +import signal +import resource +import subprocess + +hackenv = os.path.join(os.path.realpath(os.environ['HACKENV']), '') +hackenv_hg = os.path.join(hackenv, '.hg', '') +hackenv_tmp = os.path.join(hackenv, 'tmp', '') +url = sys.argv[1] +output = None + +if not url: + sys.stdout.write('Usage: fetch URL or fetch OUTPUT_FILE URL (no spaces or quoting in OUTPUT_FILE)') + sys.exit(1) + +parts = url.split(None, 1) +if len(parts) == 2: + output, url = parts + +cmd = ['wget', '-nv'] +if output is not None: + if output.startswith('/hackenv/'): + output = os.path.join(hackenv, output[9:]) + else: + output = os.path.join(hackenv_tmp, output) + real_output = os.path.realpath(output) + if (os.path.commonprefix([hackenv, real_output]) != hackenv + or os.path.commonprefix([hackenv_hg, real_output]) == hackenv_hg): + sys.stdout.write('In another world: ' + output) + sys.exit(1) + if os.path.isdir(real_output): + sys.stdout.write("That's a directory: " + output) + sys.exit(1) + cmd.extend(['-O', real_output]) +cmd.extend(['--', url]) + +resource.setrlimit(resource.RLIMIT_FSIZE, (10*1024*1024, 10*1024*1024)) +signal.alarm(30) +status = subprocess.Popen( + cmd, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + cwd=hackenv_tmp).communicate()[0] +if output is not None: + status = status.replace(hackenv, '/hackenv/', 1) +sys.stdout.write(status)