@@ -75,16 +75,27 @@ def _transition_issue_status_if_updated(self, issue):
7575 if not isinstance (issue .status , jira .resources .Resource ):
7676 self .client .transition_issue (issue .jira_issue , transition = issue .status )
7777
78- def _add_watchers (self , issue ):
78+ def _add_watchers (self , issue , update_if_different = False ):
7979 """Add watchers to the ticket. Jira has a separate endpoint to
8080 add watchers."""
8181
82+ # return if issue was not created yet
83+ if issue .id == - 1 :
84+ return
85+
8286 # Get watchers from LabelStore.
83- watchers = list (issue .ccs )
87+ watchers = set (issue .ccs )
88+
89+ if update_if_different :
90+ # Only add the missing watchers
91+ watchers = watchers - set (self .get_watchers (issue ))
8492
8593 # Jira weirdness, update watchers this way.
8694 for watcher in watchers :
87- self .client .add_watcher (issue .jira_issue , watcher )
95+ try :
96+ self .client .add_watcher (issue .jira_issue , watcher )
97+ except Exception as e :
98+ logs .error (f'Error adding watcher { watcher } to issue { issue .id } ' )
8899
89100 def _get_issue_fields (self , issue ):
90101 """Get issue fields to populate the ticket"""
@@ -128,7 +139,7 @@ def _update(self, issue):
128139
129140 update_fields = self ._get_issue_fields (issue )
130141 self ._transition_issue_status_if_updated (issue )
131- self ._add_watchers (issue )
142+ self ._add_watchers (issue , update_if_different = True )
132143 issue .jira_issue .update (fields = update_fields )
133144
134145 def get_watchers (self , issue ):
0 commit comments