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)
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)