[tools] Flush stdout before reading input

The last line of output (which is not terminated by a newline) was not
showing for me when running the merge script. We can either fix it by
specifying `flush=True` at the `print` statement, or flushing before
reading user input. The latter seems more future-proof.

R=machenbach@chromium.org

Change-Id: I61cb929d2f7cdd20b3e32b9beb1653fe2d5c5791
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3676857
Reviewed-by: Michael Achenbach <machenbach@chromium.org>
Commit-Queue: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/main@{#80890}
This commit is contained in:
Clemens Backes 2022-05-30 11:59:39 +02:00 committed by V8 LUCI CQ
parent a9ca9f7dbc
commit 045a2b88ed

View File

@ -114,15 +114,15 @@ def Command(cmd, args="", prefix="", pipe=True, cwd=None):
def SanitizeVersionTag(tag): def SanitizeVersionTag(tag):
version_without_prefix = re.compile(r"^\d+\.\d+\.\d+(?:\.\d+)?$") version_without_prefix = re.compile(r"^\d+\.\d+\.\d+(?:\.\d+)?$")
version_with_prefix = re.compile(r"^tags\/\d+\.\d+\.\d+(?:\.\d+)?$") version_with_prefix = re.compile(r"^tags\/\d+\.\d+\.\d+(?:\.\d+)?$")
if version_without_prefix.match(tag): if version_without_prefix.match(tag):
return tag return tag
elif version_with_prefix.match(tag): elif version_with_prefix.match(tag):
return tag[len("tags/"):] return tag[len("tags/"):]
else: else:
return None return None
def NormalizeVersionTags(version_tags): def NormalizeVersionTags(version_tags):
@ -146,6 +146,7 @@ class SideEffectHandler(object): # pragma: no cover
return Command(cmd, args, prefix, pipe, cwd=cwd) return Command(cmd, args, prefix, pipe, cwd=cwd)
def ReadLine(self): def ReadLine(self):
sys.stdout.flush()
return sys.stdin.readline().strip() return sys.stdin.readline().strip()
def ReadURL(self, url, params=None): def ReadURL(self, url, params=None):
@ -238,7 +239,7 @@ class GitInterface(VCInterface):
self.step.Git("fetch") self.step.Git("fetch")
def GetTags(self): def GetTags(self):
return self.step.Git("tag").strip().splitlines() return self.step.Git("tag").strip().splitlines()
def GetBranches(self): def GetBranches(self):
# Get relevant remote branches, e.g. "branch-heads/3.25". # Get relevant remote branches, e.g. "branch-heads/3.25".
@ -684,18 +685,22 @@ class UploadStep(Step):
def MakeStep(step_class=Step, number=0, state=None, config=None, def MakeStep(step_class=Step, number=0, state=None, config=None,
options=None, side_effect_handler=DEFAULT_SIDE_EFFECT_HANDLER): options=None, side_effect_handler=DEFAULT_SIDE_EFFECT_HANDLER):
# Allow to pass in empty dictionaries. # Allow to pass in empty dictionaries.
state = state if state is not None else {} state = state if state is not None else {}
config = config if config is not None else {} config = config if config is not None else {}
try: try:
message = step_class.MESSAGE message = step_class.MESSAGE
except AttributeError: except AttributeError:
message = step_class.__name__ message = step_class.__name__
return step_class(message, number=number, config=config, return step_class(
state=state, options=options, message,
handler=side_effect_handler) number=number,
config=config,
state=state,
options=options,
handler=side_effect_handler)
class ScriptsBase(object): class ScriptsBase(object):