mercurial/hgweb/hgweb_mod.py
changeset 3206 79fd7a92f3e2
parent 3205 48395d2692de
child 3208 e7b7906cc47e
equal deleted inserted replaced
3205:48395d2692de 3206:79fd7a92f3e2
   291         files = []
   291         files = []
   292         mf = self.repo.manifest.read(changes[0])
   292         mf = self.repo.manifest.read(changes[0])
   293         parity = 0
   293         parity = 0
   294         for f in changes[3]:
   294         for f in changes[3]:
   295             files.append(self.t("filenodelink",
   295             files.append(self.t("filenodelink",
   296                                 filenode=hex(mf.get(f, nullid)), file=f,
   296                                 node=hex(n), file=f,
   297                                 parity=parity))
   297                                 parity=parity))
   298             parity = 1 - parity
   298             parity = 1 - parity
   299 
   299 
   300         def diff(**map):
   300         def diff(**map):
   301             yield self.diff(p1, n, None)
   301             yield self.diff(p1, n, None)
   311                      desc=changes[4],
   311                      desc=changes[4],
   312                      date=changes[2],
   312                      date=changes[2],
   313                      files=files,
   313                      files=files,
   314                      archives=self.archivelist(nodeid))
   314                      archives=self.archivelist(nodeid))
   315 
   315 
   316     def filelog(self, f, filenode):
   316     def filelog(self, fctx):
       
   317         f = fctx.path()
   317         cl = self.repo.changelog
   318         cl = self.repo.changelog
   318         fl = self.repo.file(f)
   319         fl = fctx.filelog()
   319         filenode = hex(fl.lookup(filenode))
       
   320         count = fl.count()
   320         count = fl.count()
   321 
   321 
   322         def entries(**map):
   322         def entries(**map):
   323             l = []
   323             l = []
   324             parity = (count - 1) & 1
   324             parity = (count - 1) & 1
   325 
   325 
   326             for i in range(count):
   326             for i in range(count):
   327                 n = fl.node(i)
   327                 n = fl.node(i)
   328                 lr = fl.linkrev(n)
   328                 lr = fl.linkrev(n)
   329                 cn = cl.node(lr)
   329                 ctx = self.repo.changectx(lr)
   330                 cs = cl.read(cl.node(lr))
       
   331 
   330 
   332                 l.insert(0, {"parity": parity,
   331                 l.insert(0, {"parity": parity,
   333                              "filenode": hex(n),
       
   334                              "filerev": i,
   332                              "filerev": i,
   335                              "file": f,
   333                              "file": f,
   336                              "node": hex(cn),
   334                              "node": hex(ctx.node()),
   337                              "author": cs[1],
   335                              "author": ctx.user(),
   338                              "date": cs[2],
   336                              "date": ctx.date(),
   339                              "rename": self.renamelink(fl, n),
   337                              "rename": self.renamelink(fl, n),
   340                              "parent": self.siblings(fl.parents(n),
   338                              "parent": self.siblings(fl.parents(n),
   341                                                      fl.rev, file=f),
   339                                                      fl.rev, file=f),
   342                              "child": self.siblings(fl.children(n),
   340                              "child": self.siblings(fl.children(n),
   343                                                     fl.rev, file=f),
   341                                                     fl.rev, file=f),
   344                              "desc": cs[4]})
   342                              "desc": ctx.description()})
   345                 parity = 1 - parity
   343                 parity = 1 - parity
   346 
   344 
   347             for e in l:
   345             for e in l:
   348                 yield e
   346                 yield e
   349 
   347 
   350         yield self.t("filelog", file=f, filenode=filenode, entries=entries)
   348         yield self.t("filelog", file=f, node=hex(fctx.node()), entries=entries)
   351 
   349 
   352     def filerevision(self, f, node):
   350     def filerevision(self, fctx):
   353         fl = self.repo.file(f)
   351         f = fctx.path()
   354         n = fl.lookup(node)
   352         text = fctx.data()
   355         node = hex(n)
   353         fl = fctx.filelog()
   356         text = fl.read(n)
   354         n = fctx.filenode()
   357         changerev = fl.linkrev(n)
       
   358         cl = self.repo.changelog
       
   359         cn = cl.node(changerev)
       
   360         cs = cl.read(cn)
       
   361         mfn = cs[0]
       
   362 
   355 
   363         mt = mimetypes.guess_type(f)[0]
   356         mt = mimetypes.guess_type(f)[0]
   364         rawtext = text
   357         rawtext = text
   365         if util.binary(text):
   358         if util.binary(text):
   366             mt = mt or 'application/octet-stream'
   359             mt = mt or 'application/octet-stream'
   373                        "linenumber": "% 6d" % (l + 1),
   366                        "linenumber": "% 6d" % (l + 1),
   374                        "parity": self.stripes(l)}
   367                        "parity": self.stripes(l)}
   375 
   368 
   376         yield self.t("filerevision",
   369         yield self.t("filerevision",
   377                      file=f,
   370                      file=f,
   378                      filenode=node,
       
   379                      path=_up(f),
   371                      path=_up(f),
   380                      text=lines(),
   372                      text=lines(),
   381                      raw=rawtext,
   373                      raw=rawtext,
   382                      mimetype=mt,
   374                      mimetype=mt,
   383                      rev=changerev,
   375                      rev=fctx.rev(),
   384                      node=hex(cn),
   376                      node=hex(fctx.node()),
   385                      author=cs[1],
   377                      author=fctx.user(),
   386                      date=cs[2],
   378                      date=fctx.date(),
   387                      parent=self.siblings(fl.parents(n), fl.rev, file=f),
   379                      parent=self.siblings(fl.parents(n), fl.rev, file=f),
   388                      child=self.siblings(fl.children(n), fl.rev, file=f),
   380                      child=self.siblings(fl.children(n), fl.rev, file=f),
   389                      rename=self.renamelink(fl, n),
   381                      rename=self.renamelink(fl, n),
   390                      permissions=self.repo.manifest.read(mfn).execf(f))
   382                      permissions=fctx.manifest().execf(f))
   391 
   383 
   392     def fileannotate(self, f, node):
   384     def fileannotate(self, fctx):
   393         fctx = self.repo.filectx(f, fileid=node)
   385         f = fctx.path()
   394         n = fctx.filenode()
   386         n = fctx.filenode()
   395         fl = fctx.filelog()
   387         fl = fctx.filelog()
   396 
   388 
   397         def annotate(**map):
   389         def annotate(**map):
   398             parity = 0
   390             parity = 0
   405                     parity = 1 - parity
   397                     parity = 1 - parity
   406                     last = fnode
   398                     last = fnode
   407 
   399 
   408                 yield {"parity": parity,
   400                 yield {"parity": parity,
   409                        "node": hex(f.node()),
   401                        "node": hex(f.node()),
   410                        "filenode": hex(fnode),
       
   411                        "rev": f.rev(),
   402                        "rev": f.rev(),
   412                        "author": name,
   403                        "author": name,
   413                        "file": f.path(),
   404                        "file": f.path(),
   414                        "line": l}
   405                        "line": l}
   415 
   406 
   416         yield self.t("fileannotate",
   407         yield self.t("fileannotate",
   417                      file=f,
   408                      file=f,
   418                      filenode=node,
       
   419                      annotate=annotate,
   409                      annotate=annotate,
   420                      path=_up(f),
   410                      path=_up(f),
   421                      rev=fctx.rev(),
   411                      rev=fctx.rev(),
   422                      node=hex(fctx.node()),
   412                      node=hex(fctx.node()),
   423                      author=fctx.user(),
   413                      author=fctx.user(),
   680                 except hg.RepoError:
   670                 except hg.RepoError:
   681                     man = self.repo.manifest
   671                     man = self.repo.manifest
   682                     mn = man.lookup(changeid)
   672                     mn = man.lookup(changeid)
   683                     req.changectx = self.repo.changectx(man.linkrev(mn))
   673                     req.changectx = self.repo.changectx(man.linkrev(mn))
   684 
   674 
       
   675             if form.has_key('filenode'):
       
   676                 changeid = req.form['filenode'][0]
       
   677                 path = self.cleanpath(req.form['file'][0])
       
   678                 try:
       
   679                     req.changectx = self.repo.changectx(changeid)
       
   680                     req.filectx = req.changectx.filectx(path)
       
   681                 except hg.RepoError:
       
   682                     req.filectx = self.repo.filectx(path, fileid=changeid)
       
   683                     req.changectx = req.filectx.changectx()
       
   684 
   685         self.refresh()
   685         self.refresh()
   686 
   686 
   687         expand_form(req.form)
   687         expand_form(req.form)
   688 
   688 
   689         m = os.path.join(self.templatepath, "map")
   689         m = os.path.join(self.templatepath, "map")
   772     def do_filediff(self, req):
   772     def do_filediff(self, req):
   773         req.write(self.filediff(self.cleanpath(req.form['file'][0]),
   773         req.write(self.filediff(self.cleanpath(req.form['file'][0]),
   774                                 req.form['node'][0]))
   774                                 req.form['node'][0]))
   775 
   775 
   776     def do_file(self, req):
   776     def do_file(self, req):
   777         req.write(self.filerevision(self.cleanpath(req.form['file'][0]),
   777         req.write(self.filerevision(req.filectx))
   778                                     req.form['filenode'][0]))
       
   779 
   778 
   780     def do_annotate(self, req):
   779     def do_annotate(self, req):
   781         req.write(self.fileannotate(self.cleanpath(req.form['file'][0]),
   780         req.write(self.fileannotate(req.filectx))
   782                                     req.form['filenode'][0]))
       
   783 
   781 
   784     def do_filelog(self, req):
   782     def do_filelog(self, req):
   785         req.write(self.filelog(self.cleanpath(req.form['file'][0]),
   783         req.write(self.filelog(req.filectx))
   786                                req.form['filenode'][0]))
       
   787 
   784 
   788     def do_heads(self, req):
   785     def do_heads(self, req):
   789         resp = " ".join(map(hex, self.repo.heads())) + "\n"
   786         resp = " ".join(map(hex, self.repo.heads())) + "\n"
   790         req.httphdr("application/mercurial-0.1", length=len(resp))
   787         req.httphdr("application/mercurial-0.1", length=len(resp))
   791         req.write(resp)
   788         req.write(resp)