294 def assign(id: Version_ID, arg: Assign): (List[Command], State) = |
294 def assign(id: Version_ID, arg: Assign): (List[Command], State) = |
295 { |
295 { |
296 val version = the_version(id) |
296 val version = the_version(id) |
297 val (command_execs, last_execs) = arg |
297 val (command_execs, last_execs) = arg |
298 |
298 |
299 val (commands, new_execs) = |
299 val (changed_commands, new_execs) = |
300 ((Nil: List[Command], execs) /: command_execs) { |
300 ((Nil: List[Command], execs) /: command_execs) { |
301 case ((commands1, execs1), (cmd_id, Some(exec_id))) => |
301 case ((commands1, execs1), (cmd_id, exec)) => |
302 val st = the_command(cmd_id) |
302 val st = the_command(cmd_id) |
303 (st.command :: commands1, execs1 + (exec_id -> st)) |
303 val commands2 = st.command :: commands1 |
304 case (res, (_, None)) => res |
304 val execs2 = |
|
305 exec match { |
|
306 case None => execs1 |
|
307 case Some(exec_id) => execs1 + (exec_id -> st) |
|
308 } |
|
309 (commands2, execs2) |
305 } |
310 } |
306 val new_assignment = the_assignment(version).assign(command_execs, last_execs) |
311 val new_assignment = the_assignment(version).assign(command_execs, last_execs) |
307 val new_state = copy(assignments = assignments + (id -> new_assignment), execs = new_execs) |
312 val new_state = copy(assignments = assignments + (id -> new_assignment), execs = new_execs) |
308 |
313 |
309 (commands, new_state) |
314 (changed_commands, new_state) |
310 } |
315 } |
311 |
316 |
312 def is_assigned(version: Version): Boolean = |
317 def is_assigned(version: Version): Boolean = |
313 assignments.get(version.id) match { |
318 assignments.get(version.id) match { |
314 case Some(assgn) => assgn.is_finished |
319 case Some(assgn) => assgn.is_finished |