646 del form[k] |
646 del form[k] |
647 |
647 |
648 def rewrite_request(req): |
648 def rewrite_request(req): |
649 '''translate new web interface to traditional format''' |
649 '''translate new web interface to traditional format''' |
650 |
650 |
|
651 def spliturl(req): |
|
652 def firstitem(query): |
|
653 return query.split('&', 1)[0].split(';', 1)[0] |
|
654 |
|
655 base = '' |
|
656 if req.env.has_key('REPO_NAME'): |
|
657 base = '/' + req.env['REPO_NAME'] |
|
658 elif req.env.get('SCRIPT_NAME'): |
|
659 base = req.env['SCRIPT_NAME'] |
|
660 |
|
661 pi = req.env.get('PATH_INFO') |
|
662 if pi: |
|
663 if pi.startswith(base): |
|
664 if len(pi) > len(base): |
|
665 base += '/' |
|
666 query = pi[len(base):] |
|
667 else: |
|
668 if req.env.has_key('REPO_NAME'): |
|
669 # We are using hgwebdir |
|
670 base += '/' |
|
671 else: |
|
672 base += '?' |
|
673 query = firstitem(req.env['QUERY_STRING']) |
|
674 else: |
|
675 base += '/' |
|
676 query = pi[1:] |
|
677 else: |
|
678 base += '?' |
|
679 query = firstitem(req.env['QUERY_STRING']) |
|
680 |
|
681 return (base, query) |
|
682 |
|
683 req.url, query = spliturl(req) |
|
684 |
651 if req.form.has_key('cmd'): |
685 if req.form.has_key('cmd'): |
652 # old style |
686 # old style |
653 return |
687 return |
654 if req.env.has_key('SCRIPT_URL'): |
|
655 # run through web server |
|
656 base = req.env['SCRIPT_URL'] |
|
657 # strip repo and leading '/' or '?' |
|
658 query = req.env['REQUEST_URI'][len(base)+1:] |
|
659 else: |
|
660 query = req.env['PATH_INFO'][1:] |
|
661 |
688 |
662 args = query.split('/', 2) |
689 args = query.split('/', 2) |
663 if not args or not args[0]: |
690 if not args or not args[0]: |
664 return |
691 return |
665 |
692 |
666 cmd = args.pop(0) |
693 cmd = args.pop(0) |
667 style = cmd.rfind('-') |
694 style = cmd.rfind('-') |
668 if style != -1: |
695 if style != -1: |
669 req.form['style'] = [cmd[:style]] |
696 req.form['style'] = [cmd[:style]] |
670 cmd = cmd[style+1:] |
697 cmd = cmd[style+1:] |
671 req.form['cmd'] = [cmd] |
698 # avoid accepting e.g. style parameter as command |
|
699 if hasattr(self, 'do_' + cmd): |
|
700 req.form['cmd'] = [cmd] |
672 |
701 |
673 if args and args[0]: |
702 if args and args[0]: |
674 node = args.pop(0) |
703 node = args.pop(0) |
675 req.form['node'] = [node] |
704 req.form['node'] = [node] |
676 if args: |
705 if args: |
699 b = os.path.basename("map-" + style) |
728 b = os.path.basename("map-" + style) |
700 p = os.path.join(self.templatepath, b) |
729 p = os.path.join(self.templatepath, b) |
701 if os.path.isfile(p): |
730 if os.path.isfile(p): |
702 m = p |
731 m = p |
703 |
732 |
704 port = req.env["SERVER_PORT"] |
733 if not req.url: |
705 port = port != "80" and (":" + port) or "" |
734 port = req.env["SERVER_PORT"] |
706 uri = req.env["REQUEST_URI"] |
735 port = port != "80" and (":" + port) or "" |
707 if "?" in uri: |
736 uri = req.env["REQUEST_URI"] |
708 uri = uri.split("?")[0] |
737 if "?" in uri: |
709 url = "http://%s%s%s" % (req.env["SERVER_NAME"], port, uri) |
738 uri = uri.split("?")[0] |
|
739 req.url = "http://%s%s%s" % (req.env["SERVER_NAME"], port, uri) |
|
740 |
710 if not self.reponame: |
741 if not self.reponame: |
711 self.reponame = (self.repo.ui.config("web", "name") |
742 self.reponame = (self.repo.ui.config("web", "name") |
712 or uri.strip('/') or self.repo.root) |
743 or req.env.get('REPO_NAME') |
|
744 or req.url.strip('/') or self.repo.root) |
713 |
745 |
714 self.t = templater.templater(m, templater.common_filters, |
746 self.t = templater.templater(m, templater.common_filters, |
715 defaults={"url": url, |
747 defaults={"url": req.url, |
716 "repo": self.reponame, |
748 "repo": self.reponame, |
717 "header": header, |
749 "header": header, |
718 "footer": footer, |
750 "footer": footer, |
719 "rawfileheader": rawfileheader, |
751 "rawfileheader": rawfileheader, |
720 }) |
752 }) |