Ejemplo n.º 1
0
    def set(self, name, var):
        d = self.eval_all_keys(path=True)
        if not name in d:
            target = self
        else:
            for x in d[name]:
               if name in x[1]._local_vars:
                   break
            target = x[1]
#            target = d[name][-1][1]
        TreeDict.setvar(target, name,  var)
Ejemplo n.º 2
0
        def onHGrevertall(self, evt):
            dlg = wx.MessageDialog(
                None, 'Do you discard all changes since the last commit?',
                'Revert', wx.OK | wx.CANCEL)
            ret = dlg.ShowModal()
            dlg.Destroy()
            if ret != wx.ID_OK:
                return

            d = self.owndir()
            fpath = os.path.join(d, ".hg_data_hg")
            if not os.path.exists(os.path.join(d, ".hg")):
                return  # not a repo

            ichild = self.get_ichild()

            owndir = self.owndir()
            name = self._name
            parent = self.get_parent()
            repo = hgapi.Repo(owndir)
            # repo.hg_revert(True)
            repo.hg_revert(all)
            self.hg_set_projtreeviewer_status(repo=repo)
            # puting the tree back
            vars = self.getvar().copy()
            self.destroy(clean_owndir=False)
            if not os.path.exists(fpath):
                #
                #  In this case, it makes a containing folder
                #  and gather *.py to make PyScript
                #  I should be handling other files here too?
                #
                print(vars)
                td = handle_pure_file_repo(parent, name, owndir)
                td.setvar(vars)
                load_fpath = False
            else:
                load_fpath = True
            if load_fpath:
                fid = open(fpath, 'rb')
                td, olist, nlist = TreeDict().load(fid, keep_zorder=True)
                fid.close()
                parent.add_child(td._name, td, keep_zorder=True)
            parent.move_child(td.get_ichild(), ichild)
            if load_fpath:
                for obj in td.walk_tree():
                    obj.init_after_load(olist, nlist)

            for item in repo.hg_status()['?']:
                os.remove(os.path.join(d, item))
            ifigure.events.SendFileSystemChangedEvent(parent, reload=True)
            evt.Skip()
Ejemplo n.º 3
0
       def onHGrevertall(self, evt):
           dlg=wx.MessageDialog(None, 
                                'Do you discard all changes since the last commit?',
                                'Revert',
                                wx.OK|wx.CANCEL)
           ret=dlg.ShowModal()
           dlg.Destroy()
           if ret  != wx.ID_OK: return

           d = self.owndir()
           fpath=os.path.join(d, ".hg_data_hg")
           if not os.path.exists(os.path.join(d, ".hg")): return ## not a repo

           ichild = self.get_ichild()

           owndir = self.owndir()
           name = self._name
           parent = self.get_parent()
           repo = hgapi.Repo(owndir)
           #repo.hg_revert(True)
           repo.hg_revert(all)
           self.hg_set_projtreeviewer_status(repo=repo)
           ## puting the tree back
           vars = self.getvar().copy()
           self.destroy(clean_owndir=False)
           if not os.path.exists(fpath): 
               #
               #  In this case, it makes a containing folder
               #  and gather *.py to make PyScript
               #  I should be handling other files here too?  
               #
               print vars
               td = handle_pure_file_repo(parent, name, owndir)
               td.setvar(vars)
               load_fpath = False
           else:
               load_fpath = True
           if load_fpath:
               fid= open(fpath, 'rb')
               td, olist, nlist = TreeDict().load(fid, keep_zorder=True)
               fid.close()
               parent.add_child(td._name, td, keep_zorder = True)
           parent.move_child(td.get_ichild(), ichild)
           if load_fpath:
               for obj in td.walk_tree():
                   obj.init_after_load(olist, nlist)

           for item in repo.hg_status()['?']:
               os.remove(os.path.join(d, item))
           ifigure.events.SendFileSystemChangedEvent(parent, reload = True)
           evt.Skip()
Ejemplo n.º 4
0
 def set_linkobj(self, obj):
     if obj is not None:
         self._linkobj = weakref.ref(obj)
         self._linkobj_name = obj.get_full_path()
     else:
         obj = TreeDict()
         self._linkobj = weakref.ref(obj)
         self._linkobj_name = ''
         del obj
Ejemplo n.º 5
0
 def __init__(self, parent=None, src=None, obj=None):
     if obj is not None:
         self._linkobj = weakref.ref(obj)
         self._linkobj_name = obj.get_full_path()
     else:
         obj = TreeDict()
         self._linkobj = weakref.ref(obj)
         self._linkobj_name = ''
         del obj
     self._linkvarname = None
     self._parent = parent
     super(TreeLink, self).__init__(parent=parent, src=src)
     self._name = 'link'
Ejemplo n.º 6
0
   def load_repo_treedata(obj):
       parent = obj.get_parent()
       name =  obj._name
       owndir = obj.owndir()
       ichild = obj.get_ichild()
       fpath=os.path.join(owndir, ".tree_data_hg")
       if not os.path.exists(fpath): 
           fpath=os.path.join(owndir, ".tree_data")
#           return False
       else:
           obj.destroy(clean_owndir=False)
           fid= open(fpath, 'rb')
           fid= open(fpath, 'rb')
           td, olist, nlist = TreeDict().load(fid, keep_zorder=True)
           fid.close()
           parent.add_child(name, td, keep_zorder = True)
           parent.move_child(td.get_ichild(), ichild)
#           for obj in td.walk_tree():
#               obj.init_after_load(olist, nlist)

           for name, child in obj.get_children():
               for obj2 in child.walk_tree():
                   if has_repo(obj2):
                       load_repo_treedata(obj2)
Ejemplo n.º 7
0
    def load_repo_treedata(obj):
        parent = obj.get_parent()
        name = obj._name
        owndir = obj.owndir()
        ichild = obj.get_ichild()
        fpath = os.path.join(owndir, ".tree_data_hg")
        if not os.path.exists(fpath):
            fpath = os.path.join(owndir, ".tree_data")
#           return False
        else:
            obj.destroy(clean_owndir=False)
            fid = open(fpath, 'rb')
            fid = open(fpath, 'rb')
            td, olist, nlist = TreeDict().load(fid, keep_zorder=True)
            fid.close()
            parent.add_child(name, td, keep_zorder=True)
            parent.move_child(td.get_ichild(), ichild)
            #           for obj in td.walk_tree():
            #               obj.init_after_load(olist, nlist)

            for name, child in obj.get_children():
                for obj2 in child.walk_tree():
                    if has_repo(obj2):
                        load_repo_treedata(obj2)
Ejemplo n.º 8
0
    def eval(self, name):
        '''
        params._var can be overwritten by upper level
        '''
        if not name in self._var:
            print(('Warning : PyParam::get: Variable is not set at this PyParam,', 
                    name, ':', self.get_full_path()))

        d = self.eval_all_keys(path=True)
        if not name in d:
            return None
        for path, obj in d[name]:
            if name in obj._local_vars: break
        val=TreeDict.eval(obj, name)      
        return  val
Ejemplo n.º 9
0
       def onHGupdate(self, evt=None, m=None):
           repo = hgapi.Repo(self.owndir())
           app0 = wx.GetApp().TopWindow
           if m is None:
              latest = repo.revisions(slice(-1,-1))[0].rev
              ret, m = dialog.textentry(app0,
                    "Enter revision #", "Mercurial Update", str(latest))
              if not ret: return None
           status = repo.hg_status()
           for key in status:
               if key == '?': continue
               if len(status[key]) != 0:
                    print(status)
                    ret, m = dialog.message(app0,
                                "Local repo status is not clean. \n(" + 
                                 self.get_full_path()+')', 
                                "Mercurial Update Error")
                    self.hg_set_projtreeviewer_status(repo)
#                    self._status = '!'
                    return None

           repo.hg_update(long(m))

           parent = self.get_parent()
           owndir = self.owndir()
           name = self._name
           ichild = self.get_ichild()
           url, root, path = self.get_mercurial_url()
           
           self.destroy(clean_owndir=False)

           del_old_treedata = False
           load_fpath = True
           
           fpath=os.path.join(owndir, ".tree_data_hg")
           if not os.path.exists(fpath): 
               fpath=os.path.join(owndir, ".tree_data")
               if not os.path.exists(fpath): 
                  print((url, root, path))
                  td = handle_pure_file_repo(parent, name, owndir)
                  load_fpath = False
               else:
                  dlg=wx.MessageDialog(None, 
                                    'HG update succeeded but .tree_data_hg is not found.',
                       'Old style for HG repo',
                                     wx.OK)
                  ret=dlg.ShowModal()
                  dlg.Destroy()
                  fpath=os.path.join(owndir, ".tree_data")
                  del_old_treedata = True
           if load_fpath:
               fid= open(fpath, 'rb')
               td, olist, nlist = TreeDict().load(fid, keep_zorder=True)
               fid.close()
               parent.add_child(name, td, keep_zorder = True)
           parent.move_child(td.get_ichild(), ichild)
           if load_fpath:
               for obj in td.walk_tree():
                   obj.init_after_load(olist, nlist)
           if del_old_treedata:
               os.remove(fpath)

           if url is not None:
               td.set_mercurial_url(root, path)
           if evt is not None:
#               evt.GetEventObject().update_widget_request2()
               ifigure.events.SendFileSystemChangedEvent(parent, reload = True)
               evt.Skip()
           return td
Ejemplo n.º 10
0
   def load_subtree_hg(parent, root = '', path='', name = '', overwrite=False,
                       run_setup=False, launch_gui=False):
       app = wx.GetApp().TopWindow       
       if root == '':
           list6 = [
               ["root repository", None, 304, dlg_s()],
               ["source ", path, 0],
               ["destination", '', 0],
               [None, True, 3, {"text":'Run setup script'}],]


           value = DialogEditList(list6, modal = True, 
                                  style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER,
                                  tip = None, 
                                  parent=app,
                                  title = 'retrieve subtree from HG repo.')
           if not value[0]: return
           if not parent.has_owndir(): parent.mk_owndir()

#           url = rootpath2url(
           root = str(value[1][0]) 
           path = str(value[1][1])
           name = str(value[1][2])
           run_setup = value[1][3]
           if name.strip() == '':
              name = value[1][1].split('/')[-1]
       else:
           if not parent.has_owndir(): parent.mk_owndir()
           if name == '':
              name = path.split('/')[-1]

       if parent.has_child(name): 
           if overwrite:
               parent.get_child(name = name).destroy()
           else:
               print(parent.get_full_path()+'.'+name + ' already exists.')
               obj = parent.get_child(name = name)
               _add_include_exclude(obj)
               return obj
       if path.startswith('/'): path = path[1:]
       url = rootpath2url(root, path)
       dpath = os.path.join(parent.owndir(), name)
       repo = hgapi.Repo(parent.owndir())
       try:
          repo2 = repo.hg_clone(url, dpath)
       except:
          print url, dpath
          dialog.showtraceback(parent = app,
                                   txt='Failed to clone subtree from '+url, 
                                   title='Failed to clone',
                                   traceback=traceback.format_exc())       

          return

       load_fpath = True
       fpath=os.path.join(dpath, ".tree_data_hg")
       if not os.path.exists(fpath): 
           fpath=os.path.join(dpath, ".tree_data")
           if not os.path.exists(fpath): 
               #
               #  In this case, it makes a containing folder
               #  and gather *.py to make PyScript
               #  I should be handling other files here too?  
               #

               td = handle_pure_file_repo(parent, name, dpath)
               load_fpath = False
           else:
               dlg=wx.MessageDialog(None, 
                       'HG update succeeded but .tree_data_hg is not found.',
                       'Old style for HG repo',
                       wx.OK)
               ret=dlg.ShowModal()
               dlg.Destroy()
               del_old_treedata = True
       else:
           del_old_treedata = False
       if load_fpath:
          fid= open(fpath, 'rb')
          td, olist, nlist = TreeDict().load(fid, keep_zorder=True)
          fid.close()
          parent.add_child(name, td, keep_zorder = True)

          ### for sub repo
          subrepos = []
          for name, child in td.get_children():
#           print child
              for obj in child.walk_tree():
                  if has_repo(obj):
                       #print 'subrepo', obj
                       load_repo_treedata(obj)

          if del_old_treedata:
               os.remove(fpath)

          for obj in td.walk_tree():
              obj.init_after_load(olist, nlist)

       td.set_mercurial_url(root, path)

       for name, child in td.get_children():
#           print child
           for obj in child.walk_tree():
               if has_repo(obj):
                    r = hgapi.Repo(obj.owndir())
                    latest = r.revisions(slice(-1,-1))[0].rev
                    current = r.hg_rev()
                    if latest > current:
                        dprint1('updating ' + str(obj)+ ' ' +  str(r.hg_rev()) +  '->' + str(latest))
                        obj.onHGupdate(evt=None, m=latest)
          
       if run_setup:
#           try:
           if (td.has_child("scripts") and
               td.scripts.has_child("setup")):
#               wx.CallAfter(td.scripts.setup.Run)
               td.scripts.setup.Run()
#           except:
#               dialog.showtraceback(parent = td.get_root_parent().app,
#                                    txt='Failed to run setup script',
#                                    title='Setup script failced',
#                                    traceback=traceback.format_exc())       
       _add_include_exclude(td)
       return td
Ejemplo n.º 11
0
        def onHGupdate(self, evt=None, m=None):
            repo = hgapi.Repo(self.owndir())
            app0 = wx.GetApp().TopWindow
            if m is None:
                latest = repo.revisions(slice(-1, -1))[0].rev
                ret, m = dialog.textentry(app0, "Enter revision #",
                                          "Mercurial Update", str(latest))
                if not ret: return None
            status = repo.hg_status()
            for key in status:
                if key == '?': continue
                if len(status[key]) != 0:
                    print(status)
                    ret, m = dialog.message(
                        app0, "Local repo status is not clean. \n(" +
                        self.get_full_path() + ')', "Mercurial Update Error")
                    self.hg_set_projtreeviewer_status(repo)
                    #                    self._status = '!'
                    return None

            repo.hg_update(long(m))

            parent = self.get_parent()
            owndir = self.owndir()
            name = self._name
            ichild = self.get_ichild()
            url, root, path = self.get_mercurial_url()

            self.destroy(clean_owndir=False)

            del_old_treedata = False
            load_fpath = True

            fpath = os.path.join(owndir, ".tree_data_hg")
            if not os.path.exists(fpath):
                fpath = os.path.join(owndir, ".tree_data")
                if not os.path.exists(fpath):
                    print((url, root, path))
                    td = handle_pure_file_repo(parent, name, owndir)
                    load_fpath = False
                else:
                    dlg = wx.MessageDialog(
                        None,
                        'HG update succeeded but .tree_data_hg is not found.',
                        'Old style for HG repo', wx.OK)
                    ret = dlg.ShowModal()
                    dlg.Destroy()
                    fpath = os.path.join(owndir, ".tree_data")
                    del_old_treedata = True
            if load_fpath:
                fid = open(fpath, 'rb')
                td, olist, nlist = TreeDict().load(fid, keep_zorder=True)
                fid.close()
                parent.add_child(name, td, keep_zorder=True)
            parent.move_child(td.get_ichild(), ichild)
            if load_fpath:
                for obj in td.walk_tree():
                    obj.init_after_load(olist, nlist)
            if del_old_treedata:
                os.remove(fpath)

            if url is not None:
                td.set_mercurial_url(root, path)
            if evt is not None:
                #               evt.GetEventObject().update_widget_request2()
                ifigure.events.SendFileSystemChangedEvent(parent, reload=True)
                evt.Skip()
            return td
Ejemplo n.º 12
0
    def load_subtree_hg(parent,
                        root='',
                        path='',
                        name='',
                        overwrite=False,
                        run_setup=False,
                        launch_gui=False):
        app = wx.GetApp().TopWindow
        if root == '':
            list6 = [
                ["root repository", None, 304,
                 dlg_s()],
                ["source ", path, 0],
                ["destination", '', 0],
                [None, True, 3, {
                    "text": 'Run setup script'
                }],
            ]

            value = DialogEditList(list6,
                                   modal=True,
                                   style=wx.DEFAULT_DIALOG_STYLE
                                   | wx.RESIZE_BORDER,
                                   tip=None,
                                   parent=app,
                                   title='retrieve subtree from HG repo.')
            if not value[0]: return
            if not parent.has_owndir(): parent.mk_owndir()

            #           url = rootpath2url(
            root = str(value[1][0])
            path = str(value[1][1])
            name = str(value[1][2])
            run_setup = value[1][3]
            if name.strip() == '':
                name = value[1][1].split('/')[-1]
        else:
            if not parent.has_owndir(): parent.mk_owndir()
            if name == '':
                name = path.split('/')[-1]

        if parent.has_child(name):
            if overwrite:
                parent.get_child(name=name).destroy()
            else:
                print(parent.get_full_path() + '.' + name + ' already exists.')
                obj = parent.get_child(name=name)
                _add_include_exclude(obj)
                return obj
        if path.startswith('/'): path = path[1:]
        url = rootpath2url(root, path)
        dpath = os.path.join(parent.owndir(), name)
        repo = hgapi.Repo(parent.owndir())
        try:
            repo2 = repo.hg_clone(url, dpath)
        except:
            print url, dpath
            dialog.showtraceback(parent=app,
                                 txt='Failed to clone subtree from ' + url,
                                 title='Failed to clone',
                                 traceback=traceback.format_exc())

            return

        load_fpath = True
        fpath = os.path.join(dpath, ".tree_data_hg")
        if not os.path.exists(fpath):
            fpath = os.path.join(dpath, ".tree_data")
            if not os.path.exists(fpath):
                #
                #  In this case, it makes a containing folder
                #  and gather *.py to make PyScript
                #  I should be handling other files here too?
                #

                td = handle_pure_file_repo(parent, name, dpath)
                load_fpath = False
            else:
                dlg = wx.MessageDialog(
                    None,
                    'HG update succeeded but .tree_data_hg is not found.',
                    'Old style for HG repo', wx.OK)
                ret = dlg.ShowModal()
                dlg.Destroy()
                del_old_treedata = True
        else:
            del_old_treedata = False
        if load_fpath:
            fid = open(fpath, 'rb')
            td, olist, nlist = TreeDict().load(fid, keep_zorder=True)
            fid.close()
            parent.add_child(name, td, keep_zorder=True)

            ### for sub repo
            subrepos = []
            for name, child in td.get_children():
                #           print child
                for obj in child.walk_tree():
                    if has_repo(obj):
                        #print 'subrepo', obj
                        load_repo_treedata(obj)

            if del_old_treedata:
                os.remove(fpath)

            for obj in td.walk_tree():
                obj.init_after_load(olist, nlist)

        td.set_mercurial_url(root, path)

        for name, child in td.get_children():
            #           print child
            for obj in child.walk_tree():
                if has_repo(obj):
                    r = hgapi.Repo(obj.owndir())
                    latest = r.revisions(slice(-1, -1))[0].rev
                    current = r.hg_rev()
                    if latest > current:
                        dprint1('updating ' + str(obj) + ' ' +
                                str(r.hg_rev()) + '->' + str(latest))
                        obj.onHGupdate(evt=None, m=latest)

        if run_setup:
            #           try:
            if (td.has_child("scripts") and td.scripts.has_child("setup")):
                #               wx.CallAfter(td.scripts.setup.Run)
                td.scripts.setup.Run()
#           except:
#               dialog.showtraceback(parent = td.get_root_parent().app,
#                                    txt='Failed to run setup script',
#                                    title='Setup script failced',
#                                    traceback=traceback.format_exc())
        _add_include_exclude(td)
        return td
Ejemplo n.º 13
0
 def destroy(self, clean_owndir=False, force_clean=False):
     if force_clean:
         TreeDict.destroy(self, clean_owndir=True)
     else:
         TreeDict.destroy(self, clean_owndir=False)
Ejemplo n.º 14
0
 def __init__(self, parent = None, src = None):
     TreeDict.__init__(self, parent=parent, src = src)        
Ejemplo n.º 15
0
 def __init__(self, *args, **kargs):
     self._lock = None
     TreeDict.__init__(self, *args, **kargs)