Konubinix' opinionated web of thoughts

Clk Maybe List

fleeting

clk maybe list

Those are stuff that I wish I can do in the future but won’t commit for now. Most of them are fleeting note that still need to be precise. And I won’t work on them till I have a need (pragmatisme).

make eval: not accept any command

Or it might be a security flaw where people provide extensions with parameters that call arbitrary commands.

resource based flow

In addition to the classical command flow, I wish I could have a more makefile-ish way of specifying the flow.

A command could indicate the resources it creates and the resources it needs. A resource could be an abstaction of the form.

class Resource:
    def exists():
	pass

And I could create more than simple file based resources.

Like a port resource.

class PortResource(Resource):
    def __init__(self, port):
	self.port = port
    def exists(self):
	return lib.is_port_available(self.port)

Then, I could have a command that is run only if the resource is not fulfilled.

@command(provides=[PortResource(5432)])
def start_postgres():
    pass

I could provide a resource command line handler

clk resource set postgre PortResource 5432
clk resource flow postgre
@command(provides=[FileResource("CMakeLists.txt")], needs=[FileResource("somesourceoftruth.yml")])
def generate():
    pass

@command(provides=[FileResource("Makefile")], needs=[FileResource("CMakeLists.txt")])
def configure():
    pass

@command(needs=[FileResource("Makefile")])
def build():
    pass

But then, changing from makefile to ninja would imply to change the resources as well?

auto exclusive extensions

In case several extensions provides the same features