aboutsummaryrefslogtreecommitdiffstats
path: root/build/scripts/wrapcc.py
diff options
context:
space:
mode:
authoralexv-smirnov <alex@ydb.tech>2023-06-13 11:05:01 +0300
committeralexv-smirnov <alex@ydb.tech>2023-06-13 11:05:01 +0300
commitbf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0 (patch)
tree1d1df72c0541a59a81439842f46d95396d3e7189 /build/scripts/wrapcc.py
parent8bfdfa9a9bd19bddbc58d888e180fbd1218681be (diff)
downloadydb-bf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0.tar.gz
add ymake export to ydb
Diffstat (limited to 'build/scripts/wrapcc.py')
-rw-r--r--build/scripts/wrapcc.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/build/scripts/wrapcc.py b/build/scripts/wrapcc.py
new file mode 100644
index 0000000000..88a9e6a4fc
--- /dev/null
+++ b/build/scripts/wrapcc.py
@@ -0,0 +1,45 @@
+from __future__ import print_function
+
+import os
+import sys
+import time
+import subprocess
+
+
+def need_retry(text):
+ return 'Stack dump' in text
+
+
+def retry_inf(cmd):
+ while True:
+ try:
+ yield subprocess.check_output(cmd, stderr=subprocess.STDOUT), None
+ except subprocess.CalledProcessError as e:
+ yield e.output, e
+
+
+def retry(cmd):
+ for n, (out, err) in enumerate(retry_inf(cmd)):
+ if out:
+ sys.stderr.write(out)
+
+ if n > 5:
+ raise Exception('all retries failed')
+ elif need_retry(out):
+ time.sleep(1 + n)
+ elif err:
+ raise err
+ else:
+ return
+
+
+if __name__ == '__main__':
+ cmd = sys.argv[1:]
+
+ if '-c' in cmd:
+ try:
+ retry(cmd)
+ except subprocess.CalledProcessError as e:
+ sys.exit(e.returncode)
+ else:
+ os.execv(cmd[0], cmd)