@@ -182,6 +182,8 @@ def __init_general(self, simpack, frame, project=None):
182182 self ._temp_shell_command_history = None
183183 '''Deleted immediately after.'''
184184
185+ self ._job_and_node_of_recent_fork_by_crunching = None
186+
185187 #######################################################################
186188 # Setting up namespace:
187189
@@ -252,7 +254,8 @@ def __init_emitters(self):
252254 self .tree_structure_modified_emitter = es .make_emitter (
253255 outputs = (
254256 self .tree_modified_emitter ,
255- self ._update_step_profiles_set
257+ self ._update_step_profiles_set ,
258+ self ._if_forked_by_crunching_recently_switch_to_new_path ,
256259 ),
257260 name = 'tree_structure_modified' ,
258261 )
@@ -696,8 +699,12 @@ def fork_by_crunching(self, *args, **kwargs):
696699
697700 kwargs = {'step_profile' : step_profile }
698701
699- return self .project .begin_crunching (node , self .default_buffer or 1 ,
700- step_profile )
702+ job = self .project .begin_crunching (node , self .default_buffer or 1 ,
703+ step_profile )
704+
705+ self ._job_and_node_of_recent_fork_by_crunching = (job , node )
706+
707+ return job
701708
702709
703710 def fork_by_editing (self ):
@@ -817,6 +824,21 @@ def __check_if_step_profile_changed(self):
817824 self .active_step_profile_changed_emitter .emit ()
818825
819826
827+ def _if_forked_by_crunching_recently_switch_to_new_path (self ):
828+ if self ._job_and_node_of_recent_fork_by_crunching :
829+ job , old_node = self ._job_and_node_of_recent_fork_by_crunching
830+ new_node = job .crunching_profile .node
831+
832+ if new_node is not old_node :
833+ new_path = new_node .make_containing_path ()
834+
835+ assert old_node in new_path
836+ # Cause `new_node` was born out of `old_node`.
837+
838+ self .set_path (new_path )
839+ self ._job_and_node_of_recent_fork_by_crunching = None
840+
841+
820842 def __reduce__ (self ):
821843 my_dict = dict (self .__dict__ )
822844
0 commit comments