2016-09-19 3 views
0

Я хотел бы запрограммировать запросы на вытягивание в GitHub, и если запрос на pull имеет комментарии в приведенном ниже коде, сделайте что-нибудь (на данный момент напечатайте номер запроса на вытягивание). У меня есть запрос на перенос, в котором есть комментарии, которые я ищу (разбросанные по нескольким комментариям в запросе на перенос), но он не печатает номер запроса на вытягивание. Я подозреваю, что это имеет какое-то отношение к регулярному выражению, которое я использую, потому что если я нарушаю оператор if, чтобы искать только регулярное выражение или строковые значения, он отлично работает, но когда я пытаюсь объединить их в одном выражении if, не работает.Если оператор с несколькими условиями с использованием regex

Я не думаю, что это дублированный вопрос, поскольку я рассмотрел все предложения по вопросам, которые могут уже иметь ваш ответ.

for pr in repo.pull_requests(): 
     #check to ensure pull request meets criteria before processing 
     conflicts_base_branch = "This branch has no conflicts with the base branch" 
     checks = "All checks have passed" 
     sign_off_comment_present = re.compile(r"\B#sign-off\b", re.IGNORECASE) 
     for comment in list(repo.issue(pr.number).comments()): 
      if (conflicts_base_branch and checks in comment.body) and (sign_off_comment_present.search(comment.body)): 
       print(pr.number) 
+0

Все они присутствуют в _one_ комментарии или комментарии? Ваша версия требует, чтобы все они были в комментарии _same_. Также 'conflict_base_branch и проверки в comment.body' совпадает с' (conflict_base_branch) и (проверяет в comment.body) 'или' (True) и (проверяет в comment.body) ', поэтому он проверяет только наличие последний. – mata

+0

Они представлены в нескольких комментариях в запросе на растяжение. Означает ли это, что это должно быть 'if conflict_base_branch в comment.body и проверяет в comment.body'? Если да, то как мне совместить это с выражением regex? – DBS

+0

Вам нужно проверить их отдельно при повторении. Проверьте мой ответ – mata

ответ

1

Ваше решение требует все условия должны быть выполнены на же комментарий, он не будет работать, если они находятся в разных комментариях. Для этого вам нужно отслеживать, какие условия выполняются при повторении через комментарии, например:

for pr in repo.pull_requests(): 
    #check to ensure pull request meets criteria before processing 
    conflicts_base_branch = "This branch has no conflicts with the base branch" 
    checks = "All checks have passed" 
    sign_off_comment_present = re.compile(r"\B#sign-off\b", re.IGNORECASE) 
    passes_checks = False 
    has_signoff = False 
    has_no_conflicts = False 
    for comment in list(repo.issue(pr.number).comments()): 
     if checks in comment.body: 
      passes_checks = True 
     if conflicts_base_branch in comment.body: 
      has_no_conflicts = True 
     if sign_off_comment_present.search(comment.body): 
      has_signoff = True 
    if passes_checks and has_no_conflicts and has_signoff: 
     print(pr.number) 
+0

Спасибо! Это сработало! Я забываю о том, чтобы проверять каждое условие отдельно при просмотре комментариев запроса на растяжение. – DBS