X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=hippotat.git;a=blobdiff_plain;f=hippotatd;h=0ef6369559c295b90d69e45aa78e0ce4129e7886;hp=e9b62b7442bdde0a854b9d0cdad18f20d09b96e3;hb=1d5be5f2b5f6a4fb08a3a811b0ea5d251abff3de;hpb=eed788f8959bb06e7631f2d2bbb57d0783314727 diff --git a/hippotatd b/hippotatd index e9b62b7..0ef6369 100755 --- a/hippotatd +++ b/hippotatd @@ -5,22 +5,25 @@ # # Copyright 2017 Ian Jackson # -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version, with the "CAF Login -# Exception" as published by Ian Jackson (version 2, or at your option -# any later version) as an Additional Permission. +# AGPLv3+ + CAFv2+ # -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU Affero General Public +# License as published by the Free Software Foundation, either +# version 3 of the License, or (at your option) any later version, +# with the "CAF Login Exception" as published by Ian Jackson +# (version 2, or at your option any later version) as an Additional +# Permission. # -# You should have received a copy of the GNU Affero General Public -# License and the CAF Login Exception along with this program, in the -# file AGPLv3+CAFv2. If not, email Ian Jackson -# . +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public +# License and the CAF Login Exception along with this program, in +# the file AGPLv3+CAFv2. If not, email Ian Jackson +# . from hippotatlib import * @@ -231,17 +234,25 @@ class IphttpResource(NotStupidResource): log_debug(DBG.HTTP_CTRL, '...', idof=id(request)) return NOT_DONE_YET + # instantiator should set + # self.hippotat_sources = (source_names[0], source_names[1]) + def __init__(self): + self.hippotat_sources = [None, None] + super().__init__() + def render_GET(self, request): log_debug(DBG.HTTP, 'GET request') - return b''' - -hippotat -

-source -(and that of dependency packages) -available - -''' + s = 'hippotat\n' + (s0,s1) = self.hippotat_sources + if s0: + s += '

source\n' % s0 + if self.hippotat_sources[1]: + s += ('(and that of dependency packages)\n' % s1) + s += 'available' + else: + s += 'TESTING' + s += '' + return s.encode('utf-8') def start_http(): resource = IphttpResource() @@ -262,16 +273,26 @@ def start_http(): ssp = SourceShipmentPreparer(td) ssp.logger = partial(log_debug, DBG.OWNSOURCE) - ssp.generate() - - resource.putChild(b'source', twisted.web.static.File(ssp.output_paths[0])) - resource.putChild(b'srcpkgs', twisted.web.static.File(ssp.output_paths[1])) + if DBG.OWNSOURCE in debug_set: ssp.stream_debug = sys.stdout + ssp.download_packages = opts.ownsource >= 2 + if opts.ownsource >= 1: ssp.generate() + + for ix in (0,1): + bn = ssp.output_names[ix] + op = ssp.output_paths[ix] + if op is None: continue + resource.hippotat_sources[ix] = bn + subresource =twisted.web.static.File(op) + resource.putChild(bn.encode('utf-8'), subresource) reactor.callLater(0.1, (lambda: log.info('hippotatd started', dflag=False))) #---------- config and setup ---------- -def process_cfg(putative_servers, putative_clients): +def process_cfg(_opts, putative_servers, putative_clients): + global opts + opts = _opts + global c c = ConfigResults() c.server = cfg.get('SERVER','server') @@ -320,6 +341,18 @@ def catch_termination(): for sig in (signal.SIGINT, signal.SIGTERM): signal.signal(sig, partial(signal_handler, sig.name)) +optparser.add_option('--ownsource', default=2, + action='store_const', dest='ownsource', const=2, + help='source download fully enabled (default)') + +optparser.add_option('--ownsource-local', + action='store_const', dest='ownsource', const=1, + help='source download is local source code only') + +optparser.add_option('--no-ownsource', + action='store_const', dest='ownsource', const=0, + help='source download disabled (for testing only)') + common_startup(process_cfg) catch_termination() ipif = start_ipif(c.ipif_command, (lambda p,s,d: route(p,"[ipif]",s,d)))