def graft(self, atree, apath = '<STR_LIT:/>'):
ret = False<EOL>if atree.cd(apath)['<STR_LIT:status>']:<EOL><INDENT>atree_nodes                 = atree.lstr_lsnode()<EOL>str_self_cwd                = self.cwd()<EOL>str_atree_cwd               = atree.cwd()<EOL>b_childrenLink              = False<EOL>if apath != '<STR_LIT:/>':<EOL><INDENT>l_apath = apath.split('<STR_LIT:/>')<EOL>if l_apath[-<NUM_LIT:1>] != '<STR_LIT>':<EOL><INDENT>self.mkcd(apath.split('<STR_LIT:/>')[-<NUM_LIT:1>])<EOL>self.snode_current.d_nodes  = atree.snode_current.d_nodes<EOL>self.snode_current.d_data   = atree.snode_current.d_data<EOL><DEDENT>else:<EOL><INDENT>apath = apath[<NUM_LIT:0>:-<NUM_LIT:1>]<EOL>if apath[-<NUM_LIT:1>] != '<STR_LIT:/>':<EOL><INDENT>atree.cd(apath)<EOL>atree_nodes     = atree.lstr_lsnode()<EOL>b_childrenLink  = True<EOL><DEDENT><DEDENT><DEDENT>else:<EOL><INDENT>b_childrenLink  = True<EOL><DEDENT>if b_childrenLink:<EOL><INDENT>self.mknode(atree_nodes)<EOL>for node in atree_nodes:<EOL><INDENT>self.cd(node)<EOL>atree.cd(apath + '<STR_LIT:/>' + node)<EOL>self.snode_current.d_nodes  = atree.snode_current.d_nodes<EOL>self.snode_current.d_data   = atree.snode_current.d_data<EOL>atree.cd('<STR_LIT>')<EOL>self.cd('<STR_LIT>')<EOL><DEDENT><DEDENT>self.cd('<STR_LIT>')<EOL>self.pathFromHere_explore(self.cwd())<EOL>self.cd(str_self_cwd)<EOL>atree.cd(str_atree_cwd)<EOL>ret = True<EOL><DEDENT>return ret<EOL>
NB: THIS METHOD HAS UNEXPECTED MEMORY BEHAVIOUR!
    USE THE copy() METHOD INSTEAD!

Attach (link) apath in a separate atree to here.

Functionally equivalent to

    ln -s atree:/apath .

Also updates the self tree's path list space.

:param atree: a tree
:param apath: a path in atree
:return: True | False depending on successful graft