Fix special_case_handler to handle git add prev_CMakeLists.txt better
When using run_pro2cmake.py, it spawns multiple instances of pro2cmake.py. If more than 1 of the instances need to git add prev_CMakeLists.txt at the same time, git add might fail due to the acquired index.lock. The cleaner solution would be to use a file lock as a mutex, but that requires an external pypi package. Use a poor man solution of retrying the git add with a time delay for a finite amount of times. Change-Id: I2031f6e29ae499526cb4f1753e4387e7f4fab0ab Reviewed-by: Qt CMake Build Bot Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
This commit is contained in:
parent
63f2b8c7a8
commit
b64e8e721f
@ -87,6 +87,7 @@ import re
|
||||
import os
|
||||
import subprocess
|
||||
import filecmp
|
||||
import time
|
||||
|
||||
from shutil import copyfile
|
||||
from shutil import rmtree
|
||||
@ -142,7 +143,7 @@ def check_if_git_in_path() -> bool:
|
||||
return False
|
||||
|
||||
|
||||
def run_process_quiet(args_string: str, debug=False) -> None:
|
||||
def run_process_quiet(args_string: str, debug=False) -> bool:
|
||||
if debug:
|
||||
print('Running command: "{}\"'.format(args_string))
|
||||
args_list = args_string.split()
|
||||
@ -153,6 +154,8 @@ def run_process_quiet(args_string: str, debug=False) -> None:
|
||||
# an error for us.
|
||||
if 'git merge' not in args_string:
|
||||
print('Error while running: "{}"\n{}'.format(args_string, e.stdout))
|
||||
return False
|
||||
return True
|
||||
|
||||
|
||||
def does_file_have_conflict_markers(file_path: str, debug=False) -> bool:
|
||||
@ -289,7 +292,28 @@ class SpecialCaseHandler(object):
|
||||
# merge result, save the new "clean" file for future
|
||||
# regenerations.
|
||||
copyfile_log(self.generated_file_path, self.prev_file_path, debug=self.debug)
|
||||
run_process_quiet("git add {}".format(self.prev_file_path), debug=self.debug)
|
||||
|
||||
# Attempt to git add until we succeed. It can fail when
|
||||
# run_pro2cmake executes pro2cmake in multiple threads, and git
|
||||
# has acquired the index lock.
|
||||
success = False
|
||||
failed_once = False
|
||||
i = 0
|
||||
while not success and i < 20:
|
||||
success = run_process_quiet("git add {}".format(self.prev_file_path),
|
||||
debug=self.debug)
|
||||
if not success:
|
||||
failed_once = True
|
||||
i += 1
|
||||
time.sleep(0.1)
|
||||
|
||||
if failed_once and not success:
|
||||
print('Retrying git add, the index.lock was probably acquired.')
|
||||
if failed_once and success:
|
||||
print('git add succeeded.')
|
||||
elif failed_once and not success:
|
||||
print('git add failed. Make sure to git add {} yourself.'.format(
|
||||
self.prev_file_path))
|
||||
|
||||
def handle_special_cases_helper(self) -> bool:
|
||||
"""
|
||||
|
Loading…
x
Reference in New Issue
Block a user