From 42dd9cb55ec1030a9a5019c3cb6cf32ada15c7e8 Mon Sep 17 00:00:00 2001 From: Simone Basso Date: Wed, 5 May 2021 10:42:39 +0200 Subject: [PATCH] refactor(make): backticks: return output directly (#325) The previous fix allowed us to return values directly from implementations of Engine. Here we take advantage of this possibility by immediately refactoring how backticks work. Part of https://github.com/ooni/probe/issues/1466. --- make | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/make b/make index 2e444d2..7851968 100755 --- a/make +++ b/make @@ -258,9 +258,9 @@ class Engine(Protocol): self, output_variable: str, cmdline: List[str], - output: List[bytes], - ) -> None: - """backticks executes output_variable=`*cmdline`.""" + ) -> bytes: + """backticks executes output_variable=`*cmdline` and returns + the output emitted by the command to the caller.""" def cat_sed_redirect( self, patterns: List[Tuple[str, str]], source: str, dest: str @@ -300,12 +300,12 @@ class CommandExecutor: self, output_variable: str, cmdline: List[str], - output: List[bytes], - ) -> None: + ) -> bytes: """backticks implements Engine.backticks""" - self._dry_runner.backticks(output_variable, cmdline, output) + out = self._dry_runner.backticks(output_variable, cmdline) # Nothing else to do, because backticks is fully # implemented by CommandDryRunner. + return out def cat_sed_redirect( self, patterns: List[Tuple[str, str]], source: str, dest: str @@ -371,8 +371,7 @@ class CommandDryRunner: self, output_variable: str, cmdline: List[str], - output: List[bytes], - ) -> None: + ) -> bytes: """backticks implements Engine.backticks""" log("./make: {}=`{}`".format(output_variable, shlex.join(cmdline))) # implemented here because we want to see the result of backticks @@ -381,7 +380,7 @@ class CommandDryRunner: stdout = popen.communicate()[0] if popen.returncode != 0: raise RuntimeError(popen.returncode) - output.append(stdout) + return stdout def cat_sed_redirect( self, patterns: List[Tuple[str, str]], source: str, dest: str @@ -437,7 +436,6 @@ class CommandDryRunner: log("./make: unset {}".format(key)) - def new_engine(options: Options) -> Engine: """new_engine creates a new engine instance""" out: Engine = CommandDryRunner() @@ -1008,9 +1006,8 @@ class OONIMKAllPodspec: if os.path.isfile(self.__name) and not options.dry_run(): log("./make: {}: already built".format(self.__name)) return - output: List[bytes] = [] - engine.backticks("RELEASE", ["git", "describe", "--tags"], output) - release = output[0].decode("utf-8").strip() + output = engine.backticks("RELEASE", ["git", "describe", "--tags"]) + release = output.decode("utf-8").strip() version = datetime.datetime.now().strftime("%Y.%m.%d-%H%M%S") engine.cat_sed_redirect( [("@VERSION@", version), ("@RELEASE@", release)],