mercurial/hgweb.py
changeset 538 7140bc781655
parent 536 c15b4bc0a11c
child 539 44b29b98254a
equal deleted inserted replaced
537:411e05b04ffa 538:7140bc781655
   283                      footer = self.footer(),
   283                      footer = self.footer(),
   284                      repo = self.reponame,
   284                      repo = self.reponame,
   285                      changenav = changenav,
   285                      changenav = changenav,
   286                      manifest = hex(mf),
   286                      manifest = hex(mf),
   287                      rev = pos, changesets = count, entries = changelist)
   287                      rev = pos, changesets = count, entries = changelist)
       
   288 
       
   289     def search(self, query):
       
   290 
       
   291         def changelist():
       
   292             cl = self.repo.changelog
       
   293             count = 0
       
   294             qw = query.lower().split()
       
   295 
       
   296             def revgen():
       
   297                 for i in range(cl.count() - 1, 0, -100):
       
   298                     l = []
       
   299                     for j in range(max(0, i - 100), i):
       
   300                         n = cl.node(j)
       
   301                         changes = cl.read(n)
       
   302                         l.insert(0, (n, j, changes))
       
   303                     for e in l:
       
   304                         yield e
       
   305 
       
   306             for n, i, changes in revgen():
       
   307                 miss = 0
       
   308                 for q in qw:
       
   309                     if not (q in changes[1].lower() or
       
   310                             q in changes[4].lower() or
       
   311                             q in " ".join(changes[3][:20]).lower()):
       
   312                         miss = 1
       
   313                         break
       
   314                 if miss: continue
       
   315 
       
   316                 count += 1
       
   317                 hn = hex(n)
       
   318                 p1, p2 = cl.parents(n)
       
   319                 t = float(changes[2].split(' ')[0])
       
   320 
       
   321                 yield self.t(
       
   322                     'searchentry',
       
   323                     parity = count & 1,
       
   324                     author = changes[1],
       
   325                     parent1 = self.parent("changelogparent",
       
   326                                           hex(p1), cl.rev(p1)),
       
   327                     parent2 = self.parent("changelogparent",
       
   328                                           hex(p2), cl.rev(p2)),
       
   329                     p1 = hex(p1), p2 = hex(p2),
       
   330                     p1rev = cl.rev(p1), p2rev = cl.rev(p2),
       
   331                     manifest = hex(changes[0]),
       
   332                     desc = changes[4],
       
   333                     date = t,
       
   334                     files = self.listfilediffs(changes[3], n),
       
   335                     rev = i,
       
   336                     node = hn)
       
   337 
       
   338                 if count >= self.maxchanges: break
       
   339 
       
   340         cl = self.repo.changelog
       
   341         mf = cl.read(cl.tip())[0]
       
   342 
       
   343         yield self.t('search',
       
   344                      header = self.header(),
       
   345                      footer = self.footer(),
       
   346                      query = query,
       
   347                      repo = self.reponame,
       
   348                      manifest = hex(mf),
       
   349                      entries = changelist)
   288 
   350 
   289     def changeset(self, nodeid):
   351     def changeset(self, nodeid):
   290         n = bin(nodeid)
   352         n = bin(nodeid)
   291         cl = self.repo.changelog
   353         cl = self.repo.changelog
   292         changes = cl.read(n)
   354         changes = cl.read(n)
   584             if os.path.isfile(p): m = p
   646             if os.path.isfile(p): m = p
   585 
   647 
   586         self.t = templater(m, self.filters)
   648         self.t = templater(m, self.filters)
   587 
   649 
   588         if not args.has_key('cmd') or args['cmd'][0] == 'changelog':
   650         if not args.has_key('cmd') or args['cmd'][0] == 'changelog':
   589             hi = self.repo.changelog.count() - 1
   651             c = self.repo.changelog.count() - 1
       
   652             hi = c
   590             if args.has_key('rev'):
   653             if args.has_key('rev'):
   591                 hi = args['rev'][0]
   654                 hi = args['rev'][0]
   592                 try:
   655                 try:
   593                     hi = self.repo.changelog.rev(self.repo.lookup(hi))
   656                     hi = self.repo.changelog.rev(self.repo.lookup(hi))
   594                 except KeyError: pass
   657                 except KeyError:
   595 
   658                     write(self.search(hi))
       
   659                     return
       
   660                 
   596             write(self.changelog(hi))
   661             write(self.changelog(hi))
   597 
   662 
   598         elif args['cmd'][0] == 'changeset':
   663         elif args['cmd'][0] == 'changeset':
   599             write(self.changeset(args['node'][0]))
   664             write(self.changeset(args['node'][0]))
   600 
   665