From 617345b84fb46e95d290dca6f86d4f91e1074832 Mon Sep 17 00:00:00 2001 From: Andrey Marchenko Date: Wed, 10 Apr 2024 14:12:10 +0200 Subject: [PATCH] added retries in case if git command returns nil status (breoken pipe?) --- lib/datadog/ci/git/local_repository.rb | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/datadog/ci/git/local_repository.rb b/lib/datadog/ci/git/local_repository.rb index 02dca051..5c4e802c 100644 --- a/lib/datadog/ci/git/local_repository.rb +++ b/lib/datadog/ci/git/local_repository.rb @@ -195,7 +195,20 @@ def exec_git_command(cmd, stdin: nil) # no-dd-sa:ruby-security/shell-injection out, status = Open3.capture2e(cmd, stdin_data: stdin) - raise "Failed to run git command #{cmd}: #{out}" unless status.success? + if status.nil? + retry_count = 5 + Datadog.logger.debug { "Opening pipe failed, starting retries..." } + while status.nil? && retry_count.positive? + # no-dd-sa:ruby-security/shell-injection + out, status = Open3.capture2e(cmd, stdin_data: stdin) + Datadog.logger.debug { "After retry status is [#{status}]" } + retry_count -= 1 + end + end + + if status.nil? || !status.success? + raise "Failed to run git command [#{cmd}] with input [#{stdin}] and output [#{out}]" + end # Sometimes Encoding.default_external is somehow set to US-ASCII which breaks # commit messages with UTF-8 characters like emojis @@ -213,7 +226,7 @@ def exec_git_command(cmd, stdin: nil) def log_failure(e, action) Datadog.logger.debug( - "Unable to read #{action}: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}" + "Unable to perform #{action}: #{e.class.name} #{e.message} at #{Array(e.backtrace).first}" ) end end