Fix the abi dills download script

Bug: https://github.com/dart-lang/sdk/issues/36047
Change-Id: Ic8b6cb0b1b5cb026bc06dd2ff414c026700a7c5e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/96133
Commit-Queue: Liam Appelbe <liama@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
diff --git a/tools/.gitignore b/tools/.gitignore
index 2814b7b..2b1e35f 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -1,3 +1,4 @@
-# tools/idl_parser is populated by gclient sync
+# tools/idl_parser and tools/abiversions are populated by gclient sync
+abiversions
 idl_parser
 
diff --git a/tools/download_abi_dills.py b/tools/download_abi_dills.py
index e45b2ce..1458934 100644
--- a/tools/download_abi_dills.py
+++ b/tools/download_abi_dills.py
@@ -1,5 +1,6 @@
 # Downloads dill files from CIPD for each supported ABI version.
 
+import os
 import subprocess
 import sys
 import utils
@@ -8,12 +9,17 @@
 def main():
   abi_version = int(utils.GetAbiVersion())
   oldest_abi_version = int(utils.GetOldestSupportedAbiVersion())
+  cmd = ['cipd', 'ensure', '-root', 'tools/abiversions', '-ensure-file', '-']
+  ensure_file = ''
   for i in xrange(oldest_abi_version, abi_version):
-    cmd = ['cipd', 'install', 'dart/abiversions/%d' % i, 'latest']
-    result = subprocess.call(cmd)
-    if result != 0:
-      return 1
-  return 0
+    ensure_file += '@Subdir %d\ndart/abiversions/%d latest\n\n' % (i, i)
+  p = subprocess.Popen(cmd,
+                       stdin = subprocess.PIPE,
+                       shell = utils.IsWindows(),
+                       cwd = utils.DART_DIR)
+  p.communicate(ensure_file)
+  p.stdin.close()
+  return p.wait()
 
 
 if __name__ == '__main__':