Index: appengine/swarming/server/task_result.py |
diff --git a/appengine/swarming/server/task_result.py b/appengine/swarming/server/task_result.py |
index b905db0cb14a90cdc7ef7c361d44232f105af5cd..810d67a2ccee8932bfe1ec5f2154cc1d2b881505 100644 |
--- a/appengine/swarming/server/task_result.py |
+++ b/appengine/swarming/server/task_result.py |
@@ -58,6 +58,7 @@ Graph of schema: |
+---------------+ +---------------+ |
""" |
+import collections |
import datetime |
import logging |
import random |
@@ -373,6 +374,14 @@ class _TaskResultCommon(ndb.Model): |
# set. The isolateserver and namespace should match. |
outputs_ref = ndb.LocalStructuredProperty(task_request.FilesRef) |
+ # The pinned versions of all the cipd packages that were specified as inputs |
+ # to the task. So if the task inputs included `package/${platform}@latest`, |
+ # the pinned version might be `package/windows@deadbeef`, where 'windows' is |
+ # the expanded template parameter, and `deadbeef` is the resolved version of |
+ # the package that the task actually used. |
+ cipd_pins = ndb.LocalStructuredProperty(task_request.CipdPackage, |
+ repeated=True) |
+ |
@property |
def can_be_canceled(self): |
"""Returns True if the task is in a state that can be canceled.""" |
@@ -782,6 +791,7 @@ class TaskResultSummary(_TaskResultCommon): |
def reset_to_pending(self): |
"""Resets this entity to pending state.""" |
+ self.cipd_pins = None |
self.duration = None |
self.exit_code = None |
self.internal_failure = False |