1

リンクされたすべての問題を取得するという単純なタスクを解決しようとして、少し行き詰まりました。これは基本的にグラフ タスクだと思います。jira 課題を取得し、そのすべてのリンクを見つけてから、すべての課題を処理するまで、リンクされた課題に移動してそれらのリンクを探します。

これをテストしているjira課題のレイアウトは、次の図のとおりです。 ここに画像の説明を入力

しかし、結果は次のとおりです。

PMO-100 -> SA-300
SA-100 -> SA-300
SA-100 -> SA-200

1 つのリンクが欠落していますが、見つかったすべてのリンクの最初のリンクのみを処理するため、さらに多くのリンクが欠落しています。

__init__       6996   Starting...
_new_conn      6996   Starting new HTTP connection (1): 10.48.34.174
collect_links  6996   Looking for links for issue PMO-100
collect_links  6996   Found 2 links: 27846, 27843
collect_links  6996   processing link 27846
put_link       6996   Appending link 27846 to link register
collect_links  6996   Looking for links for issue SA-300
collect_links  6996   Found 2 links: 27845, 27846
collect_links  6996   processing link 27845
put_link       6996   Appending link 27845 to link register
collect_links  6996   Looking for links for issue SA-100
collect_links  6996   Found 3 links: 27844, 27845, 27843
collect_links  6996   processing link 27844
put_link       6996   Appending link 27844 to link register
collect_links  6996   Looking for links for issue SA-200
collect_links  6996   Found 1 links: 27844
collect_links  6996   processing link 27844
put_link       6996   Link 27844 already exists in link register
collect_links  6996   issue SA-100 is already in tracked issues

これは、collect_links メソッド内の for ... each ループが原因で発生しています。これが呼び出されるたびに、for ... each コレクションがオーバーライドされます。

def collect_links(self, key):
        logging.info('Looking for links for issue %s' % key)
        self.tracked.append(key)
        links = self.jac.issue(key).fields.issuelinks
        logging.info('Found %s links: %s' % (len(links), ', '.join(i.id for i in links)))
        for link in links:
            logging.info('processing link %s' % link.id)
            self.put_link(link)
            rel = None
            if hasattr(link, 'outwardIssue'):
                rel = link.outwardIssue.key
            else:
                rel = link.inwardIssue.key
            linked_issue = self.jac.issue(rel)
            if linked_issue.key not in self.tracked:
                return self.collect_links(linked_issue.key)
            else:
                logging.info('issue %s is already in tracked issues' % linked_issue.key)

メソッド自体から self.method を呼び出すと、新しいデータのチャンクが作成されず、メソッド内で既に作成したデータが上書きされるように見えます - どうすればそれを克服できますか?

何が起こるか:

for link in links: #links contains the links linked to current issue
    if linked_issue.key not in self.tracked:
        return self.collect_links(linked_issue.key) #links changes

最後の行では、リンク コレクションはそのまま維持されると思いますが、リンク コレクションに変更されます。linked_issue.key

コード全体を pastebin に貼り付けました

4

1 に答える 1