| Index: git_cl.py | 
| diff --git a/git_cl.py b/git_cl.py | 
| index 0b8ac7b7c6367faee174fff9d3bb9f40d76b1d77..2fcde04221611aeac7bd5d8ed7b0f4efee99c7da 100755 | 
| --- a/git_cl.py | 
| +++ b/git_cl.py | 
| @@ -1548,6 +1548,10 @@ class Changelist(object): | 
| assert self.GetIssue() | 
| return self._codereview_impl.SetCQState(new_state) | 
|  | 
| +  def CannotTriggerTryJobReason(self): | 
| +    """Returns reason (str) if unable trigger tryjobs on this CL or None.""" | 
| +    return self._codereview_impl.CannotTriggerTryJobReason() | 
| + | 
| # Forward methods to codereview specific implementation. | 
|  | 
| def CloseIssue(self): | 
| @@ -1690,6 +1694,10 @@ class _ChangelistCodereviewBase(object): | 
| """ | 
| raise NotImplementedError() | 
|  | 
| +  def CannotTriggerTryJobReason(self): | 
| +    """Returns reason (str) if unable trigger tryjobs on this CL or None.""" | 
| +    raise NotImplementedError() | 
| + | 
|  | 
| class _RietveldChangelistImpl(_ChangelistCodereviewBase): | 
| def __init__(self, changelist, auth_config=None, rietveld_server=None): | 
| @@ -1762,6 +1770,16 @@ class _RietveldChangelistImpl(_ChangelistCodereviewBase): | 
| self._props = self.RpcServer().get_issue_properties(issue, True) | 
| return self._props | 
|  | 
| +  def CannotTriggerTryJobReason(self): | 
| +    props = self.GetIssueProperties() | 
| +    if not props: | 
| +      return 'Rietveld doesn\'t know about your issue %s' % self.GetIssue() | 
| +    if props.get('closed'): | 
| +      return 'CL %s is closed' % self.GetIssue() | 
| +    if props.get('private'): | 
| +      return 'CL %s is private' % self.GetIssue() | 
| +    return None | 
| + | 
| def GetApprovingReviewers(self): | 
| return get_approving_reviewers(self.GetIssueProperties()) | 
|  | 
| @@ -2716,6 +2734,10 @@ class _GerritChangelistImpl(_ChangelistCodereviewBase): | 
| gerrit_util.SetReview(self._GetGerritHost(), self.GetIssue(), | 
| labels={'Commit-Queue': vote_map[new_state]}) | 
|  | 
| +  def CannotTriggerTryJobReason(self): | 
| +    # TODO(tandrii): implement for Gerrit. | 
| +    raise NotImplementedError() | 
| + | 
|  | 
| _CODEREVIEW_IMPLEMENTATIONS = { | 
| 'rietveld': _RietveldChangelistImpl, | 
| @@ -4698,12 +4720,9 @@ def CMDtry(parser, args): | 
| # Code below assumes Rietveld issue. | 
| # TODO(tandrii): actually implement for Gerrit http://crbug.com/599931. | 
|  | 
| -  props = cl.GetIssueProperties() | 
| -  if props.get('closed'): | 
| -    parser.error('Cannot send try jobs for a closed CL') | 
| - | 
| -  if props.get('private'): | 
| -    parser.error('Cannot use try bots with private issue') | 
| +  error_message = cl.CannotTriggerTryJobReason() | 
| +  if error_message: | 
| +    parser.error('Can\'t trigger try jobs: %s') | 
|  | 
| if not options.name: | 
| options.name = cl.GetBranch() | 
|  |