def do_freenet_insert(ui_, repo, params, insert_uri, progress_func): """ INTERNAL: Helper does the actual insert. Caller must delete TMP_DUMP_DIR! """ default_mime_type = "text/plain" # put_complex_dir() default. Hmmmm. if not params['ISWIKI']: site_root = os.path.join(repo.root, params['SITE_DIR']) else: # Because wiki html files have no extension to guess from. default_mime_type = 'text/html' ui_.status("Dumping wiki as HTML...\n") site_root = os.path.join(params['TMP_DIR'], TMP_DUMP_DIR) dump_wiki_html(os.path.join(repo.root, params['WIKI_ROOT']), site_root, params['OVERLAYED']) ui_.status('Default file: %s\n' % params['SITE_DEFAULT_FILE']) ui_.status('Reading files from:\n%s\n' % site_root) infos = get_file_infos(site_root) try: set_index_file(infos, params['SITE_DEFAULT_FILE']) except ValueError: raise util.Abort("Couldn't read %s" % params['SITE_DEFAULT_FILE']) ui_.status('--- files ---\n') for info in infos: ui_.status('%s %s\n' % (info[0], info[1])) ui_.status('---\n') if params['DRYRUN']: ui_.status('Would have inserted to:\n%s\n' % insert_uri) ui_.status('But --dryrun was set.\n') return client = FCPClient.connect(params['FCP_HOST'], params['FCP_PORT']) client.in_params.default_fcp_params['DontCompress'] = False client.message_callback = progress_func try: ui_.status('Inserting to:\n%s\n' % insert_uri) try: request_uri = client.put_complex_dir(insert_uri, infos, default_mime_type)[1]['URI'] show_request_uri(ui_, params, request_uri) except FCPError, err: if err.is_code(9): # magick number for collision ui_.warn('An update was already inserted on that index.\n' + 'Set a later index with --index and try again.\n') raise util.Abort("Key collision.") else: ui_.warn(str(err) + '\n') raise util.Abort("FCP Error") finally: client.close()
def _start_freesite_insert(self): """ INTERNAL: Start asynchronous insert of Wiki freesite. """ assert self.update_sm is None self.debug("start_freesite_insert -- starting insert of edition: %i" % (latest_site_index(self.repo) + 1)) self.update_sm = setup_sm(self.ui_, self.repo, self.runner, self.params) # LATER: Replace UICallbacks and back out dorky chaining? self.update_sm.transition_callback = ( ChainedCallback.chain((self.update_sm.transition_callback, self._freesite_transition))) # DCI: try block, with file cleanup # DCI: need to check that there are no uncommited files! site_root = os.path.join(self.params['TMP_DIR'], HTML_DUMP_DIR) dump_wiki_html(os.path.join(self.repo.root, self.params['WIKI_ROOT']), site_root, False) infos = get_file_infos(site_root) set_index_file(infos, self.params['SITE_DEFAULT_FILE']) self.debug('start_freesite_insert -- dumped %i files' % len(infos)) self.trace('--- files ---') for info in infos: self.trace('%s %s' % (info[0], info[1])) self.trace('---') request = StatefulRequest(self.update_sm) request.tag = 'freesite_insert' request.in_params.definition = PUT_COMPLEX_DIR_DEF request.in_params.fcp_params = self.params.copy() request.in_params.fcp_params['DontCompress'] = False request.in_params.fcp_params['URI'] = self._freesite_insert_uri() # dir_data_source() creates an IDataSource which allows # the FCPConnection to slurp the files up over the # FCP socket as one contiguous blob. # Sets up in_params for ClientPutComplexDir as a side effect. request.custom_data_source = ( dir_data_source(infos, request.in_params, 'text/html')) request.cancel_time_secs = (time.time() + self.params['CANCEL_TIME_SECS']) self.update_sm.start_single_request(request)
def _start_freesite_insert(self): """ INTERNAL: Start asynchronous insert of Wiki freesite. """ assert self.update_sm is None self.debug("start_freesite_insert -- starting insert of edition: %i" % (latest_site_index(self.repo) + 1)) self.update_sm = setup_sm(self.ui_, self.repo, self.runner, self.params) # LATER: Replace UICallbacks and back out dorky chaining? self.update_sm.transition_callback = (ChainedCallback.chain( (self.update_sm.transition_callback, self._freesite_transition))) # DCI: try block, with file cleanup # DCI: need to check that there are no uncommited files! site_root = os.path.join(self.params['TMP_DIR'], HTML_DUMP_DIR) dump_wiki_html(os.path.join(self.repo.root, self.params['WIKI_ROOT']), site_root, False) infos = get_file_infos(site_root) set_index_file(infos, self.params['SITE_DEFAULT_FILE']) self.debug('start_freesite_insert -- dumped %i files' % len(infos)) self.trace('--- files ---') for info in infos: self.trace('%s %s' % (info[0], info[1])) self.trace('---') request = StatefulRequest(self.update_sm) request.tag = 'freesite_insert' request.in_params.definition = PUT_COMPLEX_DIR_DEF request.in_params.fcp_params = self.params.copy() request.in_params.fcp_params['DontCompress'] = False request.in_params.fcp_params['URI'] = self._freesite_insert_uri() # dir_data_source() creates an IDataSource which allows # the FCPConnection to slurp the files up over the # FCP socket as one contiguous blob. # Sets up in_params for ClientPutComplexDir as a side effect. request.custom_data_source = (dir_data_source(infos, request.in_params, 'text/html')) request.cancel_time_secs = (time.time() + self.params['CANCEL_TIME_SECS']) self.update_sm.start_single_request(request)