mercurial/hgweb/hgweb_mod.py
changeset 2685 2edfd6644a9f
parent 2673 109a22f5434a
parent 2684 783220e5d2d1
child 2840 046a8b03ea59
equal deleted inserted replaced
2682:4e2dc5c16e61 2685:2edfd6644a9f
    46         if mtime != self.mtime:
    46         if mtime != self.mtime:
    47             self.mtime = mtime
    47             self.mtime = mtime
    48             self.repo = hg.repository(self.repo.ui, self.repo.root)
    48             self.repo = hg.repository(self.repo.ui, self.repo.root)
    49             self.maxchanges = int(self.repo.ui.config("web", "maxchanges", 10))
    49             self.maxchanges = int(self.repo.ui.config("web", "maxchanges", 10))
    50             self.stripecount = int(self.repo.ui.config("web", "stripes", 1))
    50             self.stripecount = int(self.repo.ui.config("web", "stripes", 1))
       
    51             self.maxshortchanges = int(self.repo.ui.config("web", "maxshortchanges", 60))
    51             self.maxfiles = int(self.repo.ui.config("web", "maxfiles", 10))
    52             self.maxfiles = int(self.repo.ui.config("web", "maxfiles", 10))
    52             self.allowpull = self.repo.ui.configbool("web", "allowpull", True)
    53             self.allowpull = self.repo.ui.configbool("web", "allowpull", True)
    53 
    54 
    54     def archivelist(self, nodeid):
    55     def archivelist(self, nodeid):
    55         allowed = self.repo.ui.configlist("web", "allow_archive")
    56         allowed = self.repo.ui.configlist("web", "allow_archive")
   158             yield diffblock(mdiff.unidiff(to, date1, tn, date2, f,
   159             yield diffblock(mdiff.unidiff(to, date1, tn, date2, f,
   159                             showfunc=showfunc, ignorews=ignorews,
   160                             showfunc=showfunc, ignorews=ignorews,
   160                             ignorewsamount=ignorewsamount,
   161                             ignorewsamount=ignorewsamount,
   161                             ignoreblanklines=ignoreblanklines), f, tn)
   162                             ignoreblanklines=ignoreblanklines), f, tn)
   162 
   163 
   163     def changelog(self, pos):
   164     def changelog(self, pos, shortlog=False):
   164         def changenav(**map):
   165         def changenav(**map):
   165             def seq(factor, maxchanges=None):
   166             def seq(factor, maxchanges=None):
   166                 if maxchanges:
   167                 if maxchanges:
   167                     yield maxchanges
   168                     yield maxchanges
   168                     if maxchanges >= 20 and maxchanges <= 40:
   169                     if maxchanges >= 20 and maxchanges <= 40:
   173                 for f in seq(factor * 10):
   174                 for f in seq(factor * 10):
   174                     yield f
   175                     yield f
   175 
   176 
   176             l = []
   177             l = []
   177             last = 0
   178             last = 0
   178             for f in seq(1, self.maxchanges):
   179             maxchanges = shortlog and self.maxshortchanges or self.maxchanges
   179                 if f < self.maxchanges or f <= last:
   180             for f in seq(1, maxchanges):
       
   181                 if f < maxchanges or f <= last:
   180                     continue
   182                     continue
   181                 if f > count:
   183                 if f > count:
   182                     break
   184                     break
   183                 last = f
   185                 last = f
   184                 r = "%d" % f
   186                 r = "%d" % f
   219                 parity = 1 - parity
   221                 parity = 1 - parity
   220 
   222 
   221             for e in l:
   223             for e in l:
   222                 yield e
   224                 yield e
   223 
   225 
       
   226         maxchanges = shortlog and self.maxshortchanges or self.maxchanges
   224         cl = self.repo.changelog
   227         cl = self.repo.changelog
   225         mf = cl.read(cl.tip())[0]
   228         mf = cl.read(cl.tip())[0]
   226         count = cl.count()
   229         count = cl.count()
   227         start = max(0, pos - self.maxchanges + 1)
   230         start = max(0, pos - maxchanges + 1)
   228         end = min(count, start + self.maxchanges)
   231         end = min(count, start + maxchanges)
   229         pos = end - 1
   232         pos = end - 1
   230 
   233 
   231         yield self.t('changelog',
   234         yield self.t(shortlog and 'shortlog' or 'changelog',
   232                      changenav=changenav,
   235                      changenav=changenav,
   233                      manifest=hex(mf),
   236                      manifest=hex(mf),
   234                      rev=pos, changesets=count, entries=changelist,
   237                      rev=pos, changesets=count, entries=changelist,
   235                      archives=self.archivelist("tip"))
   238                      archives=self.archivelist("tip"))
   236 
   239 
   609                           self.repo.ui.config("web", "contact") or # deprecated
   612                           self.repo.ui.config("web", "contact") or # deprecated
   610                           self.repo.ui.config("web", "author", "unknown")), # also
   613                           self.repo.ui.config("web", "author", "unknown")), # also
   611                  lastchange = (0, 0), # FIXME
   614                  lastchange = (0, 0), # FIXME
   612                  manifest = hex(mf),
   615                  manifest = hex(mf),
   613                  tags = tagentries,
   616                  tags = tagentries,
   614                  shortlog = changelist)
   617                  shortlog = changelist,
       
   618                  archives=self.archivelist("tip"))
   615 
   619 
   616     def filediff(self, file, changeset):
   620     def filediff(self, file, changeset):
   617         cl = self.repo.changelog
   621         cl = self.repo.changelog
   618         n = self.repo.lookup(changeset)
   622         n = self.repo.lookup(changeset)
   619         changeset = hex(n)
   623         changeset = hex(n)
   689                          **map)
   693                          **map)
   690 
   694 
   691         def expand_form(form):
   695         def expand_form(form):
   692             shortcuts = {
   696             shortcuts = {
   693                 'cl': [('cmd', ['changelog']), ('rev', None)],
   697                 'cl': [('cmd', ['changelog']), ('rev', None)],
       
   698                 'sl': [('cmd', ['shortlog']), ('rev', None)],
   694                 'cs': [('cmd', ['changeset']), ('node', None)],
   699                 'cs': [('cmd', ['changeset']), ('node', None)],
   695                 'f': [('cmd', ['file']), ('filenode', None)],
   700                 'f': [('cmd', ['file']), ('filenode', None)],
   696                 'fl': [('cmd', ['filelog']), ('filenode', None)],
   701                 'fl': [('cmd', ['filelog']), ('filenode', None)],
   697                 'fd': [('cmd', ['filediff']), ('node', None)],
   702                 'fd': [('cmd', ['filediff']), ('node', None)],
   698                 'fa': [('cmd', ['annotate']), ('filenode', None)],
   703                 'fa': [('cmd', ['annotate']), ('filenode', None)],
   770             except hg.RepoError:
   775             except hg.RepoError:
   771                 req.write(self.search(hi)) # XXX redirect to 404 page?
   776                 req.write(self.search(hi)) # XXX redirect to 404 page?
   772                 return
   777                 return
   773 
   778 
   774         req.write(self.changelog(hi))
   779         req.write(self.changelog(hi))
       
   780 
       
   781     def do_shortlog(self, req):
       
   782         hi = self.repo.changelog.count() - 1
       
   783         if req.form.has_key('rev'):
       
   784             hi = req.form['rev'][0]
       
   785             try:
       
   786                 hi = self.repo.changelog.rev(self.repo.lookup(hi))
       
   787             except hg.RepoError:
       
   788                 req.write(self.search(hi)) # XXX redirect to 404 page?
       
   789                 return
       
   790 
       
   791         req.write(self.changelog(hi, shortlog = True))
   775 
   792 
   776     def do_changeset(self, req):
   793     def do_changeset(self, req):
   777         req.write(self.changeset(req.form['node'][0]))
   794         req.write(self.changeset(req.form['node'][0]))
   778 
   795 
   779     def do_manifest(self, req):
   796     def do_manifest(self, req):