def execute_setup(ui_, host, port, tmp, cfg_file=None): """ Run the setup command. """ def connection_failure(msg): """ INTERNAL: Display a warning string. """ ui_.warn(msg) ui_.warn("It looks like your FCP host or port might be wrong.\n") ui_.warn("Set them with --fcphost and/or --fcpport and try again.\n") raise util.Abort("Connection to FCP server failed.") # Fix defaults. if host == '': host = '127.0.0.1' if port == 0: port = 9481 if cfg_file is None: cfg_file = os.path.expanduser(DEFAULT_CFG_PATH) existing_name = ui_.config('infocalypse', 'cfg_file', None) if not existing_name is None: existing_name = os.path.expanduser(existing_name) ui_.status(MSG_HGRC_SET % existing_name) cfg_file = existing_name if os.path.exists(cfg_file): ui_.status(MSG_CFG_EXISTS % cfg_file) raise util.Abort("Refusing to modify existing configuration.") tmp = setup_tmp_dir(ui_, tmp) if not is_writable(tmp): raise util.Abort("Can't write to temp dir: %s\n" % tmp) # Test FCP connection. timeout_secs = 20 connection = None default_private_key = None try: ui_.status("Testing FCP connection [%s:%i]...\n" % (host, port)) connection = FCPConnection(PolledSocket(host, port)) started = time.time() while (not connection.is_connected() and time.time() - started < timeout_secs): connection.socket.poll() time.sleep(.25) if not connection.is_connected(): connection_failure(("\nGave up after waiting %i secs for an " + "FCP NodeHello.\n") % timeout_secs) ui_.status("Looks good.\nGenerating a default private key...\n") # Hmmm... this waits on a socket. Will an ioerror cause an abort? # Lazy, but I've never seen this call fail except for IO reasons. client = FCPClient(connection) client.message_callback = lambda x, y: None # Disable chatty default. default_private_key = client.generate_ssk()[1]['InsertURI'] except FCPError: # Protocol error. connection_failure("\nMaybe that's not an FCP server?\n") except socket.error: # Not an IOError until 2.6. # Horked. connection_failure("\nSocket level error.\n") except IOError: # Horked. connection_failure("\nSocket level error.\n") cfg = Config() cfg.defaults['HOST'] = host cfg.defaults['PORT'] = port cfg.defaults['TMP_DIR'] = tmp cfg.defaults['DEFAULT_PRIVATE_KEY'] = default_private_key Config.to_file(cfg, cfg_file) ui_.status("""\nFinished setting configuration. FCP host: %s FCP port: %i Temp dir: %s cfg file: %s Default private key: %s The config file was successfully written! """ % (host, port, tmp, cfg_file, default_private_key))
def execute_setup(ui_, host, port, tmp, cfg_file = None): """ Run the setup command. """ def connection_failure(msg): """ INTERNAL: Display a warning string. """ ui_.warn(msg) ui_.warn("It looks like your FCP host or port might be wrong.\n") ui_.warn("Set them with --fcphost and/or --fcpport and try again.\n") raise util.Abort("Connection to FCP server failed.") # Fix defaults. if host == '': host = '127.0.0.1' if port == 0: port = 9481 if cfg_file is None: cfg_file = os.path.expanduser(DEFAULT_CFG_PATH) existing_name = ui_.config('infocalypse', 'cfg_file', None) if not existing_name is None: existing_name = os.path.expanduser(existing_name) ui_.status(MSG_HGRC_SET % existing_name) cfg_file = existing_name if os.path.exists(cfg_file): ui_.status(MSG_CFG_EXISTS % cfg_file) raise util.Abort("Refusing to modify existing configuration.") tmp = setup_tmp_dir(ui_, tmp) if not is_writable(tmp): raise util.Abort("Can't write to temp dir: %s\n" % tmp) # Test FCP connection. timeout_secs = 20 connection = None default_private_key = None try: ui_.status("Testing FCP connection [%s:%i]...\n" % (host, port)) connection = FCPConnection(PolledSocket(host, port)) started = time.time() while (not connection.is_connected() and time.time() - started < timeout_secs): connection.socket.poll() time.sleep(.25) if not connection.is_connected(): connection_failure(("\nGave up after waiting %i secs for an " + "FCP NodeHello.\n") % timeout_secs) ui_.status("Looks good.\nGenerating a default private key...\n") # Hmmm... this waits on a socket. Will an ioerror cause an abort? # Lazy, but I've never seen this call fail except for IO reasons. client = FCPClient(connection) client.message_callback = lambda x, y:None # Disable chatty default. default_private_key = client.generate_ssk()[1]['InsertURI'] except FCPError: # Protocol error. connection_failure("\nMaybe that's not an FCP server?\n") except socket.error: # Not an IOError until 2.6. # Horked. connection_failure("\nSocket level error.\n") except IOError: # Horked. connection_failure("\nSocket level error.\n") cfg = Config() cfg.defaults['HOST'] = host cfg.defaults['PORT'] = port cfg.defaults['TMP_DIR'] = tmp cfg.defaults['DEFAULT_PRIVATE_KEY'] = default_private_key Config.to_file(cfg, cfg_file) ui_.status("""\nFinished setting configuration. FCP host: %s FCP port: %i Temp dir: %s cfg file: %s Default private key: %s The config file was successfully written! """ % (host, port, tmp, cfg_file, default_private_key))