mercurial/hgweb/hgweb_mod.py
changeset 3205 48395d2692de
parent 3172 76ab39df0917
child 3206 79fd7a92f3e2
equal deleted inserted replaced
3193:367a009c2acb 3205:48395d2692de
   200                              "parent": self.siblings(cl.parents(n), cl.rev,
   200                              "parent": self.siblings(cl.parents(n), cl.rev,
   201                                                      cl.rev(n) - 1),
   201                                                      cl.rev(n) - 1),
   202                              "child": self.siblings(cl.children(n), cl.rev,
   202                              "child": self.siblings(cl.children(n), cl.rev,
   203                                                     cl.rev(n) + 1),
   203                                                     cl.rev(n) + 1),
   204                              "changelogtag": self.showtag("changelogtag",n),
   204                              "changelogtag": self.showtag("changelogtag",n),
   205                              "manifest": hex(changes[0]),
       
   206                              "desc": changes[4],
   205                              "desc": changes[4],
   207                              "date": changes[2],
   206                              "date": changes[2],
   208                              "files": self.listfilediffs(changes[3], n),
   207                              "files": self.listfilediffs(changes[3], n),
   209                              "rev": i,
   208                              "rev": i,
   210                              "node": hn})
   209                              "node": hn})
   221         end = min(count, start + maxchanges)
   220         end = min(count, start + maxchanges)
   222         pos = end - 1
   221         pos = end - 1
   223 
   222 
   224         yield self.t(shortlog and 'shortlog' or 'changelog',
   223         yield self.t(shortlog and 'shortlog' or 'changelog',
   225                      changenav=changenav,
   224                      changenav=changenav,
   226                      manifest=hex(mf),
   225                      node=hex(cl.tip()),
   227                      rev=pos, changesets=count, entries=changelist,
   226                      rev=pos, changesets=count, entries=changelist,
   228                      archives=self.archivelist("tip"))
   227                      archives=self.archivelist("tip"))
   229 
   228 
   230     def search(self, query):
   229     def search(self, query):
   231 
   230 
   263                              parity=self.stripes(count),
   262                              parity=self.stripes(count),
   264                              author=changes[1],
   263                              author=changes[1],
   265                              parent=self.siblings(cl.parents(n), cl.rev),
   264                              parent=self.siblings(cl.parents(n), cl.rev),
   266                              child=self.siblings(cl.children(n), cl.rev),
   265                              child=self.siblings(cl.children(n), cl.rev),
   267                              changelogtag=self.showtag("changelogtag",n),
   266                              changelogtag=self.showtag("changelogtag",n),
   268                              manifest=hex(changes[0]),
       
   269                              desc=changes[4],
   267                              desc=changes[4],
   270                              date=changes[2],
   268                              date=changes[2],
   271                              files=self.listfilediffs(changes[3], n),
   269                              files=self.listfilediffs(changes[3], n),
   272                              rev=i,
   270                              rev=i,
   273                              node=hn)
   271                              node=hn)
   278         cl = self.repo.changelog
   276         cl = self.repo.changelog
   279         mf = cl.read(cl.tip())[0]
   277         mf = cl.read(cl.tip())[0]
   280 
   278 
   281         yield self.t('search',
   279         yield self.t('search',
   282                      query=query,
   280                      query=query,
   283                      manifest=hex(mf),
   281                      node=hex(cl.tip()),
   284                      entries=changelist)
   282                      entries=changelist)
   285 
   283 
   286     def changeset(self, nodeid):
   284     def changeset(self, nodeid):
   287         cl = self.repo.changelog
   285         cl = self.repo.changelog
   288         n = self.repo.lookup(nodeid)
   286         n = self.repo.lookup(nodeid)
   307                      rev=cl.rev(n),
   305                      rev=cl.rev(n),
   308                      node=nodeid,
   306                      node=nodeid,
   309                      parent=self.siblings(cl.parents(n), cl.rev),
   307                      parent=self.siblings(cl.parents(n), cl.rev),
   310                      child=self.siblings(cl.children(n), cl.rev),
   308                      child=self.siblings(cl.children(n), cl.rev),
   311                      changesettag=self.showtag("changesettag",n),
   309                      changesettag=self.showtag("changesettag",n),
   312                      manifest=hex(changes[0]),
       
   313                      author=changes[1],
   310                      author=changes[1],
   314                      desc=changes[4],
   311                      desc=changes[4],
   315                      date=changes[2],
   312                      date=changes[2],
   316                      files=files,
   313                      files=files,
   317                      archives=self.archivelist(nodeid))
   314                      archives=self.archivelist(nodeid))
   383                      text=lines(),
   380                      text=lines(),
   384                      raw=rawtext,
   381                      raw=rawtext,
   385                      mimetype=mt,
   382                      mimetype=mt,
   386                      rev=changerev,
   383                      rev=changerev,
   387                      node=hex(cn),
   384                      node=hex(cn),
   388                      manifest=hex(mfn),
       
   389                      author=cs[1],
   385                      author=cs[1],
   390                      date=cs[2],
   386                      date=cs[2],
   391                      parent=self.siblings(fl.parents(n), fl.rev, file=f),
   387                      parent=self.siblings(fl.parents(n), fl.rev, file=f),
   392                      child=self.siblings(fl.children(n), fl.rev, file=f),
   388                      child=self.siblings(fl.children(n), fl.rev, file=f),
   393                      rename=self.renamelink(fl, n),
   389                      rename=self.renamelink(fl, n),
   422                      filenode=node,
   418                      filenode=node,
   423                      annotate=annotate,
   419                      annotate=annotate,
   424                      path=_up(f),
   420                      path=_up(f),
   425                      rev=fctx.rev(),
   421                      rev=fctx.rev(),
   426                      node=hex(fctx.node()),
   422                      node=hex(fctx.node()),
   427                      manifest=hex(fctx.changectx().changeset()[0]),
       
   428                      author=fctx.user(),
   423                      author=fctx.user(),
   429                      date=fctx.date(),
   424                      date=fctx.date(),
   430                      rename=self.renamelink(fl, n),
   425                      rename=self.renamelink(fl, n),
   431                      parent=self.siblings(fl.parents(n), fl.rev, file=f),
   426                      parent=self.siblings(fl.parents(n), fl.rev, file=f),
   432                      child=self.siblings(fl.children(n), fl.rev, file=f),
   427                      child=self.siblings(fl.children(n), fl.rev, file=f),
   433                      permissions=fctx.manifest().execf(f))
   428                      permissions=fctx.manifest().execf(f))
   434 
   429 
   435     def manifest(self, mnode, path):
   430     def manifest(self, ctx, path):
   436         man = self.repo.manifest
   431         mf = ctx.manifest()
   437         mn = man.lookup(mnode)
   432         node = ctx.node()
   438         mnode = hex(mn)
       
   439         mf = man.read(mn)
       
   440         rev = man.rev(mn)
       
   441         changerev = man.linkrev(mn)
       
   442         node = self.repo.changelog.node(changerev)
       
   443 
   433 
   444         files = {}
   434         files = {}
   445 
   435 
   446         p = path[1:]
   436         p = path[1:]
   447         if p and p[-1] != "/":
   437         if p and p[-1] != "/":
   467                 full, fnode = files[f]
   457                 full, fnode = files[f]
   468                 if not fnode:
   458                 if not fnode:
   469                     continue
   459                     continue
   470 
   460 
   471                 yield {"file": full,
   461                 yield {"file": full,
   472                        "manifest": mnode,
       
   473                        "filenode": hex(fnode),
   462                        "filenode": hex(fnode),
   474                        "parity": self.stripes(parity),
   463                        "parity": self.stripes(parity),
   475                        "basename": f,
   464                        "basename": f,
   476                        "permissions": mf.execf(full)}
   465                        "permissions": mf.execf(full)}
   477                 parity += 1
   466                 parity += 1
   485                 if fnode:
   474                 if fnode:
   486                     continue
   475                     continue
   487 
   476 
   488                 yield {"parity": self.stripes(parity),
   477                 yield {"parity": self.stripes(parity),
   489                        "path": os.path.join(path, f),
   478                        "path": os.path.join(path, f),
   490                        "manifest": mnode,
       
   491                        "basename": f[:-1]}
   479                        "basename": f[:-1]}
   492                 parity += 1
   480                 parity += 1
   493 
   481 
   494         yield self.t("manifest",
   482         yield self.t("manifest",
   495                      manifest=mnode,
   483                      rev=ctx.rev(),
   496                      rev=rev,
       
   497                      node=hex(node),
   484                      node=hex(node),
   498                      path=path,
   485                      path=path,
   499                      up=_up(path),
   486                      up=_up(path),
   500                      fentries=filelist,
   487                      fentries=filelist,
   501                      dentries=dirlist,
   488                      dentries=dirlist,
   502                      archives=self.archivelist(hex(node)))
   489                      archives=self.archivelist(hex(node)))
   503 
   490 
   504     def tags(self):
   491     def tags(self):
   505         cl = self.repo.changelog
   492         cl = self.repo.changelog
   506         mf = cl.read(cl.tip())[0]
       
   507 
   493 
   508         i = self.repo.tagslist()
   494         i = self.repo.tagslist()
   509         i.reverse()
   495         i.reverse()
   510 
   496 
   511         def entries(notip=False, **map):
   497         def entries(notip=False, **map):
   512             parity = 0
   498             parity = 0
   513             for k,n in i:
   499             for k,n in i:
   514                 if notip and k == "tip": continue
   500                 if notip and k == "tip": continue
   515                 yield {"parity": self.stripes(parity),
   501                 yield {"parity": self.stripes(parity),
   516                        "tag": k,
   502                        "tag": k,
   517                        "tagmanifest": hex(cl.read(n)[0]),
       
   518                        "date": cl.read(n)[2],
   503                        "date": cl.read(n)[2],
   519                        "node": hex(n)}
   504                        "node": hex(n)}
   520                 parity += 1
   505                 parity += 1
   521 
   506 
   522         yield self.t("tags",
   507         yield self.t("tags",
   523                      manifest=hex(mf),
   508                      node=hex(self.repo.changelog.tip()),
   524                      entries=lambda **x: entries(False, **x),
   509                      entries=lambda **x: entries(False, **x),
   525                      entriesnotip=lambda **x: entries(True, **x))
   510                      entriesnotip=lambda **x: entries(True, **x))
   526 
   511 
   527     def summary(self):
   512     def summary(self):
   528         cl = self.repo.changelog
   513         cl = self.repo.changelog
   529         mf = cl.read(cl.tip())[0]
       
   530 
   514 
   531         i = self.repo.tagslist()
   515         i = self.repo.tagslist()
   532         i.reverse()
   516         i.reverse()
   533 
   517 
   534         def tagentries(**map):
   518         def tagentries(**map):
   548 
   532 
   549                 yield self.t("tagentry",
   533                 yield self.t("tagentry",
   550                              parity = self.stripes(parity),
   534                              parity = self.stripes(parity),
   551                              tag = k,
   535                              tag = k,
   552                              node = hex(n),
   536                              node = hex(n),
   553                              date = t,
   537                              date = t)
   554                              tagmanifest = hex(m))
       
   555                 parity += 1
   538                 parity += 1
   556 
   539 
   557         def changelist(**map):
   540         def changelist(**map):
   558             parity = 0
   541             parity = 0
   559             cl = self.repo.changelog
   542             cl = self.repo.changelog
   566 
   549 
   567                 l.insert(0, self.t(
   550                 l.insert(0, self.t(
   568                     'shortlogentry',
   551                     'shortlogentry',
   569                     parity = parity,
   552                     parity = parity,
   570                     author = changes[1],
   553                     author = changes[1],
   571                     manifest = hex(changes[0]),
       
   572                     desc = changes[4],
   554                     desc = changes[4],
   573                     date = t,
   555                     date = t,
   574                     rev = i,
   556                     rev = i,
   575                     node = hn))
   557                     node = hn))
   576                 parity = 1 - parity
   558                 parity = 1 - parity
   577 
   559 
   578             yield l
   560             yield l
   579 
   561 
   580         cl = self.repo.changelog
       
   581         mf = cl.read(cl.tip())[0]
       
   582         count = cl.count()
   562         count = cl.count()
   583         start = max(0, count - self.maxchanges)
   563         start = max(0, count - self.maxchanges)
   584         end = min(count, start + self.maxchanges)
   564         end = min(count, start + self.maxchanges)
   585 
   565 
   586         yield self.t("summary",
   566         yield self.t("summary",
   587                  desc = self.repo.ui.config("web", "description", "unknown"),
   567                  desc = self.repo.ui.config("web", "description", "unknown"),
   588                  owner = (self.repo.ui.config("ui", "username") or # preferred
   568                  owner = (self.repo.ui.config("ui", "username") or # preferred
   589                           self.repo.ui.config("web", "contact") or # deprecated
   569                           self.repo.ui.config("web", "contact") or # deprecated
   590                           self.repo.ui.config("web", "author", "unknown")), # also
   570                           self.repo.ui.config("web", "author", "unknown")), # also
   591                  lastchange = (0, 0), # FIXME
   571                  lastchange = (0, 0), # FIXME
   592                  manifest = hex(mf),
       
   593                  tags = tagentries,
   572                  tags = tagentries,
   594                  shortlog = changelist,
   573                  shortlog = changelist,
       
   574                  node = hex(self.repo.changelog.tip()),
   595                  archives=self.archivelist("tip"))
   575                  archives=self.archivelist("tip"))
   596 
   576 
   597     def filediff(self, file, changeset):
   577     def filediff(self, file, changeset):
   598         cl = self.repo.changelog
   578         cl = self.repo.changelog
   599         n = self.repo.lookup(changeset)
   579         n = self.repo.lookup(changeset)
   691                         if value is None:
   671                         if value is None:
   692                             value = form[k]
   672                             value = form[k]
   693                         form[name] = value
   673                         form[name] = value
   694                     del form[k]
   674                     del form[k]
   695 
   675 
       
   676             if form.has_key('manifest'):
       
   677                 changeid = req.form['manifest'][0]
       
   678                 try:
       
   679                     req.changectx = self.repo.changectx(changeid)
       
   680                 except hg.RepoError:
       
   681                     man = self.repo.manifest
       
   682                     mn = man.lookup(changeid)
       
   683                     req.changectx = self.repo.changectx(man.linkrev(mn))
       
   684 
   696         self.refresh()
   685         self.refresh()
   697 
   686 
   698         expand_form(req.form)
   687         expand_form(req.form)
   699 
   688 
   700         m = os.path.join(self.templatepath, "map")
   689         m = os.path.join(self.templatepath, "map")
   769 
   758 
   770     def do_changeset(self, req):
   759     def do_changeset(self, req):
   771         req.write(self.changeset(req.form['node'][0]))
   760         req.write(self.changeset(req.form['node'][0]))
   772 
   761 
   773     def do_manifest(self, req):
   762     def do_manifest(self, req):
   774         req.write(self.manifest(req.form['manifest'][0],
   763         req.write(self.manifest(req.changectx,
   775                                 self.cleanpath(req.form['path'][0])))
   764                                 self.cleanpath(req.form['path'][0])))
   776 
   765 
   777     def do_tags(self, req):
   766     def do_tags(self, req):
   778         req.write(self.tags())
   767         req.write(self.tags())
   779 
   768