Bug 1302765 - Allow `./mach taskgraph .. --parameters P` to take a URL. URL building mechanism fixed; r=dustin
authorHammad Akhtar <hammad13060@iiitd.ac.in>
Thu, 24 Nov 2016 01:15:33 +0530
changeset 323987 55bbce8d1013afe70fdd2c79b793174164a699b0
parent 323986 7ea3ad1ce937274bcd96a4490fc43120530ffd7f
child 323988 7065b2e2f667e8d2605b0aa8d9eb4755cce9c4e1
push id30988
push usercbook@mozilla.com
push dateThu, 24 Nov 2016 15:35:58 +0000
treeherdermozilla-central@9aef92f7911d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdustin
bugs1302765
milestone53.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1302765 - Allow `./mach taskgraph .. --parameters P` to take a URL. URL building mechanism fixed; r=dustin MozReview-Commit-ID: 7reezQj9Bds
taskcluster/docs/how-tos.rst
taskcluster/taskgraph/parameters.py
--- a/taskcluster/docs/how-tos.rst
+++ b/taskcluster/docs/how-tos.rst
@@ -27,27 +27,30 @@ more common changes to the task graph wi
     complexity when the transition is complete.
 
 Hacking Task Graphs
 -------------------
 
 The recommended process for changing task graphs is this:
 
 1. Find a recent decision task on the project or branch you are working on,
-   and download its ``parameters.yml`` from the Task Inspector.  This file
+   and download its ``parameters.yml`` from the Task Inspector or you can 
+   simply take note of the ``URL`` of the file or the ``task-id``.  This file
    contains all of the inputs to the task-graph generation process.  Its
    contents are simple enough if you would like to modify it, and it is
    documented in :doc:`parameters`.
 
 2. Run one of the ``mach taskgraph`` subcommands (see :doc:`taskgraph`) to
    generate a baseline against which to measure your changes.  For example:
 
    .. code-block:: none
 
        ./mach taskgraph tasks --json -p parameters.yml > old-tasks.json
+       ./mach taskgraph tasks --json -p url/to/parameters.yml > old-tasks.json
+       ./mach taskgraph tasks --json -p task-id=<task-id> > old-tasks.json
 
 3. Make your modifications under ``taskcluster/``.
 
 4. Run the same ``mach taskgraph`` command, sending the output to a new file,
    and use ``diff`` to compare the old and new files.  Make sure your changes
    have the desired effect and no undesirable side-effects.
 
 5. When you are satisfied with the changes, push them to try to ensure that the
--- a/taskcluster/taskgraph/parameters.py
+++ b/taskcluster/taskgraph/parameters.py
@@ -56,18 +56,34 @@ class Parameters(ReadOnlyDict):
         except KeyError:
             raise KeyError("taskgraph parameter {!r} not found".format(k))
 
 
 def load_parameters_file(options):
     """
     Load parameters from the --parameters option
     """
+    import urllib
+
+    url_prefix = "https://queue.taskcluster.net/v1/task/"
+    url_postfix = "/artifacts/public/parameters.yml"
+
     filename = options['parameters']
+
     if not filename:
         return Parameters()
-    with open(filename) as f:
-        if filename.endswith('.yml'):
-            return Parameters(**yaml.safe_load(f))
-        elif filename.endswith('.json'):
-            return Parameters(**json.load(f))
-        else:
-            raise TypeError("Parameters file `{}` is not JSON or YAML".format(filename))
+
+    try:
+        # reading parameters from a local parameters.yml file
+        f = open(filename)
+    except IOError:
+        # fetching parameters.yml using task task-id or supplied url
+        if filename.startswith("task-id="):
+            task_id = filename.split("=")[1]
+            filename = url_prefix + task_id + url_postfix
+        f = urllib.urlopen(filename)
+
+    if filename.endswith('.yml'):
+        return Parameters(**yaml.safe_load(f))
+    elif filename.endswith('.json'):
+        return Parameters(**json.load(f))
+    else:
+        raise TypeError("Parameters file `{}` is not JSON or YAML".format(filename))