mercurial/hgweb.py
changeset 857 41b344235bb7
parent 839 9c918287d10b
child 858 c333dfa8fa1a
equal deleted inserted replaced
856:fbe964ae7325 857:41b344235bb7
    68     while tmpl:
    68     while tmpl:
    69         m = re.search(r"#([a-zA-Z0-9]+)((\|[a-zA-Z0-9]+)*)#", tmpl)
    69         m = re.search(r"#([a-zA-Z0-9]+)((\|[a-zA-Z0-9]+)*)#", tmpl)
    70         if m:
    70         if m:
    71             yield tmpl[:m.start(0)]
    71             yield tmpl[:m.start(0)]
    72             v = map.get(m.group(1), "")
    72             v = map.get(m.group(1), "")
    73             v = callable(v) and v() or v
    73             v = callable(v) and v(**map) or v
    74 
    74 
    75             fl = m.group(2)
    75             fl = m.group(2)
    76             if fl:
    76             if fl:
    77                 for f in fl.split("|")[1:]:
    77                 for f in fl.split("|")[1:]:
    78                     v = filters[f](v)
    78                     v = filters[f](v)
   222         for f in d:
   222         for f in d:
   223             to = r.file(f).read(mmap1[f])
   223             to = r.file(f).read(mmap1[f])
   224             tn = None
   224             tn = None
   225             yield diffblock(mdiff.unidiff(to, date1, tn, date2, f), f, tn)
   225             yield diffblock(mdiff.unidiff(to, date1, tn, date2, f), f, tn)
   226 
   226 
   227     def header(self):
       
   228         yield self.t("header")
       
   229 
       
   230     def footer(self):
       
   231         yield self.t("footer")
       
   232 
       
   233     def changelog(self, pos):
   227     def changelog(self, pos):
   234         def changenav():
   228         def changenav(**map):
   235             def seq(factor = 1):
   229             def seq(factor = 1):
   236                 yield 1 * factor
   230                 yield 1 * factor
   237                 yield 3 * factor
   231                 yield 3 * factor
   238                 #yield 5 * factor
   232                 #yield 5 * factor
   239                 for f in seq(factor * 10):
   233                 for f in seq(factor * 10):
   252             for label, rev in l:
   246             for label, rev in l:
   253                 yield self.t("naventry", label = label, rev = rev)
   247                 yield self.t("naventry", label = label, rev = rev)
   254 
   248 
   255             yield self.t("naventry", label="tip")
   249             yield self.t("naventry", label="tip")
   256 
   250 
   257         def changelist():
   251         def changelist(**map):
   258             parity = (start - end) & 1
   252             parity = (start - end) & 1
   259             cl = self.repo.changelog
   253             cl = self.repo.changelog
   260             l = [] # build a list in forward order for efficiency
   254             l = [] # build a list in forward order for efficiency
   261             for i in range(start, end):
   255             for i in range(start, end):
   262                 n = cl.node(i)
   256                 n = cl.node(i)
   293                      manifest = hex(mf),
   287                      manifest = hex(mf),
   294                      rev = pos, changesets = count, entries = changelist)
   288                      rev = pos, changesets = count, entries = changelist)
   295 
   289 
   296     def search(self, query):
   290     def search(self, query):
   297 
   291 
   298         def changelist():
   292         def changelist(**map):
   299             cl = self.repo.changelog
   293             cl = self.repo.changelog
   300             count = 0
   294             count = 0
   301             qw = query.lower().split()
   295             qw = query.lower().split()
   302 
   296 
   303             def revgen():
   297             def revgen():
   359         mf = self.repo.manifest.read(changes[0])
   353         mf = self.repo.manifest.read(changes[0])
   360         for f in changes[3]:
   354         for f in changes[3]:
   361             files.append(self.t("filenodelink",
   355             files.append(self.t("filenodelink",
   362                                 filenode = hex(mf.get(f, nullid)), file = f))
   356                                 filenode = hex(mf.get(f, nullid)), file = f))
   363 
   357 
   364         def diff():
   358         def diff(**map):
   365             yield self.diff(p1, n, None)
   359             yield self.diff(p1, n, None)
   366 
   360 
   367         yield self.t('changeset',
   361         yield self.t('changeset',
   368                      diff = diff,
   362                      diff = diff,
   369                      rev = cl.rev(n),
   363                      rev = cl.rev(n),
   380     def filelog(self, f, filenode):
   374     def filelog(self, f, filenode):
   381         cl = self.repo.changelog
   375         cl = self.repo.changelog
   382         fl = self.repo.file(f)
   376         fl = self.repo.file(f)
   383         count = fl.count()
   377         count = fl.count()
   384 
   378 
   385         def entries():
   379         def entries(**map):
   386             l = []
   380             l = []
   387             parity = (count - 1) & 1
   381             parity = (count - 1) & 1
   388 
   382 
   389             for i in range(count):
   383             for i in range(count):
   390 
   384 
   455         cn = cl.node(changerev)
   449         cn = cl.node(changerev)
   456         cs = cl.read(cn)
   450         cs = cl.read(cn)
   457         t = float(cs[2].split(' ')[0])
   451         t = float(cs[2].split(' ')[0])
   458         mfn = cs[0]
   452         mfn = cs[0]
   459 
   453 
   460         def annotate():
   454         def annotate(**map):
   461             parity = 1
   455             parity = 1
   462             last = None
   456             last = None
   463             for r, l in fl.annotate(n):
   457             for r, l in fl.annotate(n):
   464                 try:
   458                 try:
   465                     cnode = ncache[r]
   459                     cnode = ncache[r]
   525                 files[short] = (f, None)
   519                 files[short] = (f, None)
   526             else:
   520             else:
   527                 short = os.path.basename(remain)
   521                 short = os.path.basename(remain)
   528                 files[short] = (f, n)
   522                 files[short] = (f, n)
   529 
   523 
   530         def filelist():
   524         def filelist(**map):
   531             parity = 0
   525             parity = 0
   532             fl = files.keys()
   526             fl = files.keys()
   533             fl.sort()
   527             fl.sort()
   534             for f in fl:
   528             for f in fl:
   535                 full, fnode = files[f]
   529                 full, fnode = files[f]
   561         mf = cl.read(cl.tip())[0]
   555         mf = cl.read(cl.tip())[0]
   562 
   556 
   563         i = self.repo.tagslist()
   557         i = self.repo.tagslist()
   564         i.reverse()
   558         i.reverse()
   565 
   559 
   566         def entries():
   560         def entries(**map):
   567             parity = 0
   561             parity = 0
   568             for k,n in i:
   562             for k,n in i:
   569                 yield self.t("tagentry",
   563                 yield self.t("tagentry",
   570                              parity = parity,
   564                              parity = parity,
   571                              tag = k,
   565                              tag = k,
   581         cl = self.repo.changelog
   575         cl = self.repo.changelog
   582         p1 = cl.parents(n)[0]
   576         p1 = cl.parents(n)[0]
   583         cs = cl.read(n)
   577         cs = cl.read(n)
   584         mf = self.repo.manifest.read(cs[0])
   578         mf = self.repo.manifest.read(cs[0])
   585 
   579 
   586         def diff():
   580         def diff(**map):
   587             yield self.diff(p1, n, file)
   581             yield self.diff(p1, n, file)
   588 
   582 
   589         yield self.t("filediff",
   583         yield self.t("filediff",
   590                      file = file,
   584                      file = file,
   591                      filenode = hex(mf.get(file, nullid)),
   585                      filenode = hex(mf.get(file, nullid)),
   598     # add tags to things
   592     # add tags to things
   599     # tags -> list of changesets corresponding to tags
   593     # tags -> list of changesets corresponding to tags
   600     # find tag, changeset, file
   594     # find tag, changeset, file
   601 
   595 
   602     def run(self):
   596     def run(self):
       
   597         def header(**map):
       
   598             yield self.t("header", **map)
       
   599 
       
   600         def footer(**map):
       
   601             yield self.t("footer", **map)
       
   602 
   603         self.refresh()
   603         self.refresh()
   604         args = cgi.parse()
   604         args = cgi.parse()
   605 
   605 
   606         m = os.path.join(self.templates, "map")
   606         m = os.path.join(self.templates, "map")
   607         if args.has_key('style'):
   607         if args.has_key('style'):
   616         url = "http://%s%s%s" % (os.environ["SERVER_NAME"], port, uri)
   616         url = "http://%s%s%s" % (os.environ["SERVER_NAME"], port, uri)
   617 
   617 
   618         self.t = templater(m, self.filters,
   618         self.t = templater(m, self.filters,
   619                            {"url":url,
   619                            {"url":url,
   620                             "repo":self.reponame,
   620                             "repo":self.reponame,
   621                             "header":self.header(),
   621                             "header":header,
   622                             "footer":self.footer(),
   622                             "footer":footer,
   623                             })
   623                             })
   624 
   624 
   625         if not args.has_key('cmd') or args['cmd'][0] == 'changelog':
   625         if not args.has_key('cmd') or args['cmd'][0] == 'changelog':
   626             c = self.repo.changelog.count() - 1
   626             c = self.repo.changelog.count() - 1
   627             hi = c
   627             hi = c