예제 #1
0
 def symbols(self, pathname, version):
     total_commit = 0
     _files = [(pathname, version)]
     while _files:
         pathname, version = _files.pop(0)
         if self.files.isdir(pathname, version):
             dirs, files = self.files.getdir(pathname, version)
             for i in dirs + files:
                 _files.append((os.path.join(pathname, i), version))
         else:
             o = self.pathname_to_obj[pathname]
             if o.filetype in self.parses and not o.has_indexed():
                 tags = ctags(self.files.toreal(pathname, version), o.filetype)
                 for tag in tags:
                     sym, line, lang_type, ext = tag
                     lang_typeid = langcache.get_typeid(o.filetype, self.parses[o.filetype].typemap[lang_type])
                     symbol_obj = Symbol(self.treeid, sym, self.symid)
                     defin = Definitions(self.symid, o.fileid, line, lang_typeid)
                     db.session.add(symbol_obj)
                     db.session.add(defin)
                     self.symid += 1
                 o.set_indexed()
                 db.session.add(o)
                 total_commit += 1
                 if total_commit % 1000 == 0:
                     print total_commit
                     db.session.commit()
     db.session.commit()
     print 
     print
     symbolcache.load(self.treeid)
예제 #2
0
    def symbols(self, pathname):

        total_commit = 0
        _files = [pathname]
        exist_syms = {}
        while _files:
            pathname = _files.pop(0)
            if self.files.isdir(pathname):
                dirs, files = self.files.getdir(pathname)
                for i in dirs + files:
                    _files.append(os.path.join(pathname, i))
            else:
                o = self.pathname_to_obj[pathname]
                if o.filetype in self.parses and not o.has_indexed():
                    logger.info('find tags: %s' % pathname)
                    tags = find_tags(self.files.toreal(pathname), o.filetype)
                    for tag in tags:
                        sym, line, lang_typeid = tag

                        if sym in exist_syms:
                            sym_id = exist_syms[sym]
                        else:
                            symbol_obj = Symbol(sym, self.symid)
                            sym_id = self.symid
                            exist_syms[sym] = sym_id
                            self.symid += 1
                            self.session.add(symbol_obj)

                        defin = Definitions(sym_id, o.fileid, line,
                                            lang_typeid)
                        self.sym_filetype[sym_id] = o.filetype
                        self.session.add(defin)

                        total_commit += 1
                        if total_commit % 1000 == 0:
                            self.session.commit()

                    o.set_indexed()
                    self.session.add(o)
                    logger.info('find %s tags: %s' % (len(tags), pathname))

        self.session.commit()
        self.track_info['total_symbol'] = total_commit
        logger.info('finish tags, total = %s' % total_commit)