13 import hg, scmutil, util, revlog, copies, error, bookmarks |
13 import hg, scmutil, util, revlog, copies, error, bookmarks |
14 import patch, help, encoding, templatekw, discovery |
14 import patch, help, encoding, templatekw, discovery |
15 import archival, changegroup, cmdutil, hbisect |
15 import archival, changegroup, cmdutil, hbisect |
16 import sshserver, hgweb |
16 import sshserver, hgweb |
17 import extensions |
17 import extensions |
18 from hgweb import server as hgweb_server |
|
19 import merge as mergemod |
18 import merge as mergemod |
20 import minirst, revset, fileset |
19 import minirst, revset, fileset |
21 import dagparser, context, simplemerge, graphmod, copies |
20 import dagparser, context, simplemerge, graphmod, copies |
22 import random, operator |
21 import random, operator |
23 import setdiscovery, treediscovery, dagutil, pvec, localrepo, destutil |
22 import setdiscovery, treediscovery, dagutil, pvec, localrepo, destutil |
5999 raise error.RepoError(_("there is no Mercurial repository" |
5998 raise error.RepoError(_("there is no Mercurial repository" |
6000 " here (.hg not found)")) |
5999 " here (.hg not found)")) |
6001 o = repo |
6000 o = repo |
6002 |
6001 |
6003 app = hgweb.hgweb(o, baseui=baseui) |
6002 app = hgweb.hgweb(o, baseui=baseui) |
6004 service = httpservice(ui, app, opts) |
6003 service = hgweb.httpservice(ui, app, opts) |
6005 cmdutil.service(opts, initfn=service.init, runfn=service.run) |
6004 cmdutil.service(opts, initfn=service.init, runfn=service.run) |
6006 |
|
6007 class httpservice(object): |
|
6008 def __init__(self, ui, app, opts): |
|
6009 self.ui = ui |
|
6010 self.app = app |
|
6011 self.opts = opts |
|
6012 |
|
6013 def init(self): |
|
6014 util.setsignalhandler() |
|
6015 self.httpd = hgweb_server.create_server(self.ui, self.app) |
|
6016 |
|
6017 if self.opts['port'] and not self.ui.verbose: |
|
6018 return |
|
6019 |
|
6020 if self.httpd.prefix: |
|
6021 prefix = self.httpd.prefix.strip('/') + '/' |
|
6022 else: |
|
6023 prefix = '' |
|
6024 |
|
6025 port = ':%d' % self.httpd.port |
|
6026 if port == ':80': |
|
6027 port = '' |
|
6028 |
|
6029 bindaddr = self.httpd.addr |
|
6030 if bindaddr == '0.0.0.0': |
|
6031 bindaddr = '*' |
|
6032 elif ':' in bindaddr: # IPv6 |
|
6033 bindaddr = '[%s]' % bindaddr |
|
6034 |
|
6035 fqaddr = self.httpd.fqaddr |
|
6036 if ':' in fqaddr: |
|
6037 fqaddr = '[%s]' % fqaddr |
|
6038 if self.opts['port']: |
|
6039 write = self.ui.status |
|
6040 else: |
|
6041 write = self.ui.write |
|
6042 write(_('listening at http://%s%s/%s (bound to %s:%d)\n') % |
|
6043 (fqaddr, port, prefix, bindaddr, self.httpd.port)) |
|
6044 self.ui.flush() # avoid buffering of status message |
|
6045 |
|
6046 def run(self): |
|
6047 self.httpd.serve_forever() |
|
6048 |
|
6049 |
6005 |
6050 @command('^status|st', |
6006 @command('^status|st', |
6051 [('A', 'all', None, _('show status of all files')), |
6007 [('A', 'all', None, _('show status of all files')), |
6052 ('m', 'modified', None, _('show only modified files')), |
6008 ('m', 'modified', None, _('show only modified files')), |
6053 ('a', 'added', None, _('show only added files')), |
6009 ('a', 'added', None, _('show only added files')), |