code: def update(client, revision, no_output, siblings, paths):
      
      graph = Graph(client)
      outputs = graph.build(revision=revision, can_be_cwl=no_output, paths=paths)
      outputs = {node for node in outputs if graph.need_update(node)}
  
      if not outputs:
          click.secho(
              'All files were generated from the latest inputs.', fg='green'
          )
          sys.exit(0)
  
      # Check or extend siblings of outputs.
      outputs = siblings(graph, outputs)
      output_paths = {node.path for node in outputs if _safe_path(node.path)}
  
      # Get all clean nodes.
      input_paths = {node.path for node in graph.nodes} - output_paths
  
      # Store the generated workflow used for updating paths.
      import yaml
  
      output_file = client.workflow_path / '{0}.cwl'.format(uuid.uuid4().hex)
      workflow = graph.ascwl(
          input_paths=input_paths,
          output_paths=output_paths,
          outputs=outputs,
      )
  
      # Make sure all inputs are pulled from a storage.
      client.pull_paths_from_storage(
          *(path for _, path in workflow.iter_input_files(client.workflow_path))
      )
  
      with output_file.open('w') as f:
          f.write(
              yaml.dump(
                  ascwl(
                      workflow,
                      filter=lambda _, x: x is not None,
                      basedir=client.workflow_path,
                  ),
                  default_flow_style=False
              )
          )
  
      from ._cwl import execute
      execute(client, output_file, output_paths=output_paths)
docs: Update existing files by rerunning their outdated workflow.