bin/fetch2
changeset 198 8d451676c241
--- /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)