/* Takes node->command and wraps it in wrapper_command. Then, if in monitor * * mode, wraps the wrapped command in the monitor command. */ void makeflow_wrap_wrapper( struct batch_task *task, struct dag_node *n, struct makeflow_wrapper *w ) { if(!w) return ; char *nodeid = string_format("%d",n->nodeid); char *wrap_tmp = string_replace_percents(w->command, nodeid); free(nodeid); batch_task_wrap_command(task, wrap_tmp); free(wrap_tmp); }
/* Takes node->command and wraps it in wrapper_command. Then, if in monitor * * mode, wraps the wrapped command in the monitor command. */ char *makeflow_wrap_wrapper( char *command, struct dag_node *n, struct makeflow_wrapper *w ) { if(!w) return xxstrdup(command); char *nodeid = string_format("%d",n->nodeid); char *wrap_tmp = string_replace_percents(w->command, nodeid); free(nodeid); char *result = string_wrap_command(command, wrap_tmp); free(wrap_tmp); return result; }
/** Wraps the specified command using string_wrap_command. See stringtools for a more detailed example of its use. Frees the previously set command after wrapping. */ void batch_task_wrap_command(struct batch_task *t, const char *command) { if(!command) return; char *id = string_format("%d",t->taskid); char *wrap_tmp = string_replace_percents(command, id); free(id); char *result = string_wrap_command(t->command, wrap_tmp); free(wrap_tmp); free(t->command); t->command = result; }
struct list *makeflow_wrapper_generate_files( struct list *result, struct list *input, struct dag_node *n, struct makeflow_wrapper *w) { char *f; char *nodeid = string_format("%d",n->nodeid); struct list *files = list_create(); list_first_item(input); while((f = list_next_item(input))) { char *filename = string_replace_percents(f, nodeid); char *f = xxstrdup(filename); free(filename); char *remote, *p; struct dag_file *file; p = strchr(f, '='); if(p) { *p = 0; file = dag_file_lookup_or_create(n->d, f); if(!n->local_job && !itable_lookup(w->remote_names, (uintptr_t) file)){ remote = xxstrdup(p+1); itable_insert(w->remote_names, (uintptr_t) file, (void *)remote); hash_table_insert(w->remote_names_inv, remote, (void *)file); } *p = '='; } else { file = dag_file_lookup_or_create(n->d, f); } free(f); list_push_tail(files, file); } free(nodeid); result = list_splice(result, files); return result; }
void makeflow_wrapper_generate_files( struct batch_task *task, struct list *input, struct list *output, struct dag_node *n, struct makeflow_wrapper *w) { char *f; char *nodeid = string_format("%d",n->nodeid); list_first_item(input); while((f = list_next_item(input))) { char *filename = string_replace_percents(f, nodeid); char *f = xxstrdup(filename); free(filename); char *remote, *p; struct dag_file *file; p = strchr(f, '='); if(p) { *p = 0; file = dag_file_lookup_or_create(n->d, f); if(!n->local_job && !itable_lookup(w->remote_names, (uintptr_t) file)){ remote = xxstrdup(p+1); itable_insert(w->remote_names, (uintptr_t) file, (void *)remote); hash_table_insert(w->remote_names_inv, remote, (void *)file); makeflow_hook_add_input_file(n->d, task, f, remote, file->type); } else { makeflow_hook_add_output_file(n->d, task, f, NULL, file->type); } *p = '='; } else { file = dag_file_lookup_or_create(n->d, f); makeflow_hook_add_input_file(n->d, task, f, NULL, file->type); } free(f); } list_first_item(output); while((f = list_next_item(output))) { char *filename = string_replace_percents(f, nodeid); char *f = xxstrdup(filename); free(filename); char *remote, *p; struct dag_file *file; p = strchr(f, '='); if(p) { *p = 0; file = dag_file_lookup_or_create(n->d, f); if(!n->local_job && !itable_lookup(w->remote_names, (uintptr_t) file)){ remote = xxstrdup(p+1); itable_insert(w->remote_names, (uintptr_t) file, (void *)remote); hash_table_insert(w->remote_names_inv, remote, (void *)file); makeflow_hook_add_output_file(n->d, task, f, remote, file->type); } else { makeflow_hook_add_output_file(n->d, task, f, NULL, file->type); } *p = '='; } else { file = dag_file_lookup_or_create(n->d, f); makeflow_hook_add_output_file(n->d, task, f, NULL, file->type); } free(f); } free(nodeid); }