mercurial/hgweb/hgweb_mod.py
changeset 2684 783220e5d2d1
parent 2683 8a798185809d
child 2685 2edfd6644a9f
equal deleted inserted replaced
2683:8a798185809d 2684:783220e5d2d1
    44         mtime = get_mtime(self.repo.root)
    44         mtime = get_mtime(self.repo.root)
    45         if mtime != self.mtime:
    45         if mtime != self.mtime:
    46             self.mtime = mtime
    46             self.mtime = mtime
    47             self.repo = hg.repository(self.repo.ui, self.repo.root)
    47             self.repo = hg.repository(self.repo.ui, self.repo.root)
    48             self.maxchanges = int(self.repo.ui.config("web", "maxchanges", 10))
    48             self.maxchanges = int(self.repo.ui.config("web", "maxchanges", 10))
       
    49             self.maxshortchanges = int(self.repo.ui.config("web", "maxshortchanges", 60))
    49             self.maxfiles = int(self.repo.ui.config("web", "maxfiles", 10))
    50             self.maxfiles = int(self.repo.ui.config("web", "maxfiles", 10))
    50             self.allowpull = self.repo.ui.configbool("web", "allowpull", True)
    51             self.allowpull = self.repo.ui.configbool("web", "allowpull", True)
    51 
    52 
    52     def archivelist(self, nodeid):
    53     def archivelist(self, nodeid):
    53         allowed = self.repo.ui.configlist("web", "allow_archive")
    54         allowed = self.repo.ui.configlist("web", "allow_archive")
   156             yield diffblock(mdiff.unidiff(to, date1, tn, date2, f,
   157             yield diffblock(mdiff.unidiff(to, date1, tn, date2, f,
   157                             showfunc=showfunc, ignorews=ignorews,
   158                             showfunc=showfunc, ignorews=ignorews,
   158                             ignorewsamount=ignorewsamount,
   159                             ignorewsamount=ignorewsamount,
   159                             ignoreblanklines=ignoreblanklines), f, tn)
   160                             ignoreblanklines=ignoreblanklines), f, tn)
   160 
   161 
   161     def changelog(self, pos):
   162     def changelog(self, pos, shortlog=False):
   162         def changenav(**map):
   163         def changenav(**map):
   163             def seq(factor, maxchanges=None):
   164             def seq(factor, maxchanges=None):
   164                 if maxchanges:
   165                 if maxchanges:
   165                     yield maxchanges
   166                     yield maxchanges
   166                     if maxchanges >= 20 and maxchanges <= 40:
   167                     if maxchanges >= 20 and maxchanges <= 40:
   171                 for f in seq(factor * 10):
   172                 for f in seq(factor * 10):
   172                     yield f
   173                     yield f
   173 
   174 
   174             l = []
   175             l = []
   175             last = 0
   176             last = 0
   176             for f in seq(1, self.maxchanges):
   177             maxchanges = shortlog and self.maxshortchanges or self.maxchanges
   177                 if f < self.maxchanges or f <= last:
   178             for f in seq(1, maxchanges):
       
   179                 if f < maxchanges or f <= last:
   178                     continue
   180                     continue
   179                 if f > count:
   181                 if f > count:
   180                     break
   182                     break
   181                 last = f
   183                 last = f
   182                 r = "%d" % f
   184                 r = "%d" % f
   217                 parity = 1 - parity
   219                 parity = 1 - parity
   218 
   220 
   219             for e in l:
   221             for e in l:
   220                 yield e
   222                 yield e
   221 
   223 
       
   224         maxchanges = shortlog and self.maxshortchanges or self.maxchanges
   222         cl = self.repo.changelog
   225         cl = self.repo.changelog
   223         mf = cl.read(cl.tip())[0]
   226         mf = cl.read(cl.tip())[0]
   224         count = cl.count()
   227         count = cl.count()
   225         start = max(0, pos - self.maxchanges + 1)
   228         start = max(0, pos - maxchanges + 1)
   226         end = min(count, start + self.maxchanges)
   229         end = min(count, start + maxchanges)
   227         pos = end - 1
   230         pos = end - 1
   228 
   231 
   229         yield self.t('changelog',
   232         yield self.t(shortlog and 'shortlog' or 'changelog',
   230                      changenav=changenav,
   233                      changenav=changenav,
   231                      manifest=hex(mf),
   234                      manifest=hex(mf),
   232                      rev=pos, changesets=count, entries=changelist,
   235                      rev=pos, changesets=count, entries=changelist,
   233                      archives=self.archivelist("tip"))
   236                      archives=self.archivelist("tip"))
   234 
   237 
   688                          **map)
   691                          **map)
   689 
   692 
   690         def expand_form(form):
   693         def expand_form(form):
   691             shortcuts = {
   694             shortcuts = {
   692                 'cl': [('cmd', ['changelog']), ('rev', None)],
   695                 'cl': [('cmd', ['changelog']), ('rev', None)],
       
   696                 'sl': [('cmd', ['shortlog']), ('rev', None)],
   693                 'cs': [('cmd', ['changeset']), ('node', None)],
   697                 'cs': [('cmd', ['changeset']), ('node', None)],
   694                 'f': [('cmd', ['file']), ('filenode', None)],
   698                 'f': [('cmd', ['file']), ('filenode', None)],
   695                 'fl': [('cmd', ['filelog']), ('filenode', None)],
   699                 'fl': [('cmd', ['filelog']), ('filenode', None)],
   696                 'fd': [('cmd', ['filediff']), ('node', None)],
   700                 'fd': [('cmd', ['filediff']), ('node', None)],
   697                 'fa': [('cmd', ['annotate']), ('filenode', None)],
   701                 'fa': [('cmd', ['annotate']), ('filenode', None)],
   762             except hg.RepoError:
   766             except hg.RepoError:
   763                 req.write(self.search(hi)) # XXX redirect to 404 page?
   767                 req.write(self.search(hi)) # XXX redirect to 404 page?
   764                 return
   768                 return
   765 
   769 
   766         req.write(self.changelog(hi))
   770         req.write(self.changelog(hi))
       
   771 
       
   772     def do_shortlog(self, req):
       
   773         hi = self.repo.changelog.count() - 1
       
   774         if req.form.has_key('rev'):
       
   775             hi = req.form['rev'][0]
       
   776             try:
       
   777                 hi = self.repo.changelog.rev(self.repo.lookup(hi))
       
   778             except hg.RepoError:
       
   779                 req.write(self.search(hi)) # XXX redirect to 404 page?
       
   780                 return
       
   781 
       
   782         req.write(self.changelog(hi, shortlog = True))
   767 
   783 
   768     def do_changeset(self, req):
   784     def do_changeset(self, req):
   769         req.write(self.changeset(req.form['node'][0]))
   785         req.write(self.changeset(req.form['node'][0]))
   770 
   786 
   771     def do_manifest(self, req):
   787     def do_manifest(self, req):