doit icon indicating copy to clipboard operation
doit copied to clipboard

Feature Request: Version of LongRunning that returns TaskError on non zero return code?

Open eddieparker opened this issue 1 year ago • 2 comments

I'd love if there was a version of doit.tools.LongRunning that had it return TaskError if return code was non zero. I tend to use this for a light build system for tasks that have dependencies, and having it not stop at the first error requires a bunch of scrolling and buries problems.

I tend to unroll it in my own dodo.py scripts, but it'd be nice if it was inbuilt. I ended up hacking my own locally in my dodo.py and it works quite nicely:

class LongRunningTask(doit.tools.CmdAction):
	' Run a command and wait for it to finish, and fail if it fails.'

	def execute(self, out=None, err=None):
		action = self.expand_action()
		process = subprocess.Popen(
			action, shell=self.shell, stdout=out, stderr=err, **self.pkwargs,)
		try:
			return_value = process.wait()
		
			if return_value != 0:
				return doit.exceptions.TaskError(f'Command failed with return code {return_value}')

		except KeyboardInterrupt:
			# normal way to stop interactive process
			pass
Fund with Polar

eddieparker avatar May 02 '23 21:05 eddieparker

The "Interactive" checks the return code. does that work for you?

The problem of having too many features/API is that people dont find them! So providing the building blocks to allow users to code their own solution is a good compromise. So I would tend to reject this...

schettino72 avatar Jun 08 '23 17:06 schettino72

I can respect having too many features/API - a big surface area means a lot more to maintain. :)

Interactive is close to what I want, but it doesn't capture output, unfortunately.

eddieparker avatar Aug 14 '23 23:08 eddieparker