Client: add command "complete".

This commit is contained in:
Grégoire Henry 2016-10-16 21:57:56 +02:00
parent 3f864ae113
commit 69261aa542
9 changed files with 72 additions and 0 deletions

View File

@ -345,6 +345,7 @@ CLIENT_LIB_INTFS := \
client/client_version.mli \ client/client_version.mli \
client/client_node_rpcs.mli \ client/client_node_rpcs.mli \
client/client_generic_rpcs.mli \ client/client_generic_rpcs.mli \
client/client_helpers.mli \
client/client_aliases.mli \ client/client_aliases.mli \
client/client_keys.mli \ client/client_keys.mli \
client/client_protocols.mli \ client/client_protocols.mli \
@ -354,6 +355,7 @@ CLIENT_LIB_IMPLS := \
client/client_config.ml \ client/client_config.ml \
client/client_node_rpcs.ml \ client/client_node_rpcs.ml \
client/client_generic_rpcs.ml \ client/client_generic_rpcs.ml \
client/client_helpers.ml \
client/client_aliases.ml \ client/client_aliases.ml \
client/client_keys.ml \ client/client_keys.ml \
client/client_protocols.ml \ client/client_protocols.ml \

View File

@ -0,0 +1,35 @@
(**************************************************************************)
(* *)
(* Copyright (c) 2014 - 2016. *)
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
(* *)
(* All rights reserved. No warranty, explicit or implicit, provided. *)
(* *)
(**************************************************************************)
let () =
let open Cli_entries in
register_group "helpers" "Various helpers"
let unique = ref false
let unique_arg =
"-unique",
Arg.Set unique,
"Fail when there is more than one possible completion."
let commands () = Cli_entries.[
command
~desc: "Lookup for the possible completion of a \
given prefix of Base48Check-encoded hash. This actually \
works only for blocks and operations."
~args: [unique_arg]
(prefixes [ "complete" ] @@ string "prefix" "the prefix of the Base48Check-encoded hash to be completed" @@ stop)
(fun prefix () ->
Client_node_rpcs.complete prefix >>= fun completions ->
match completions with
| [] -> Pervasives.exit 3
| _ :: _ :: _ when !unique -> Pervasives.exit 3
| completions ->
List.iter print_endline completions ;
Lwt.return_unit)
]

View File

@ -0,0 +1,10 @@
(**************************************************************************)
(* *)
(* Copyright (c) 2014 - 2016. *)
(* Dynamic Ledger Solutions, Inc. <contact@tezos.com> *)
(* *)
(* All rights reserved. No warranty, explicit or implicit, provided. *)
(* *)
(**************************************************************************)
val commands: unit -> Cli_entries.command list

View File

@ -150,6 +150,8 @@ let inject_operation ?(wait = true) ?force operation =
call_service0 Services.inject_operation (operation, wait, force) call_service0 Services.inject_operation (operation, wait, force)
let inject_protocol ?(wait = true) ?force protocol = let inject_protocol ?(wait = true) ?force protocol =
call_service0 Services.inject_protocol (protocol, wait, force) call_service0 Services.inject_protocol (protocol, wait, force)
let complete prefix =
call_service1 Services.complete prefix ()
let describe ?recurse path = let describe ?recurse path =
let prefix, arg = RPC.forge_request Services.describe () recurse in let prefix, arg = RPC.forge_request Services.describe () recurse in
get_json (prefix @ path) arg >>= get_json (prefix @ path) arg >>=

View File

@ -104,6 +104,8 @@ module Protocols : sig
(Protocol_hash.t * Store.protocol option) list Lwt.t (Protocol_hash.t * Store.protocol option) list Lwt.t
end end
val complete: string -> string list Lwt.t
val describe: ?recurse:bool -> string list -> RPC.Description.directory_descr Lwt.t val describe: ?recurse:bool -> string list -> RPC.Description.directory_descr Lwt.t
(** Low-level *) (** Low-level *)

View File

@ -31,6 +31,7 @@ let main () =
Client_generic_rpcs.commands @ Client_generic_rpcs.commands @
Client_keys.commands () @ Client_keys.commands () @
Client_protocols.commands () @ Client_protocols.commands () @
Client_helpers.commands () @
Client_version.commands_for_version version in Client_version.commands_for_version version in
Client_config.parse_args ~version Client_config.parse_args ~version
(Cli_entries.usage commands) (Cli_entries.usage commands)

View File

@ -434,6 +434,11 @@ let build_rpc_directory node =
let implementation () = let implementation () =
RPC.Answer.return Data_encoding.Json.(schema (Error_monad.error_encoding ())) in RPC.Answer.return Data_encoding.Json.(schema (Error_monad.error_encoding ())) in
RPC.register0 dir RPC.Error.service implementation in RPC.register0 dir RPC.Error.service implementation in
let dir =
RPC.register1 dir Services.complete
(fun s () ->
Base48.decode_partial s >>= fun l ->
RPC.Answer.return (List.map Base48.encode l)) in
let dir = let dir =
RPC.register_describe_directory_service dir Services.describe in RPC.register_describe_directory_service dir Services.describe in
dir dir

View File

@ -583,6 +583,19 @@ let inject_protocol =
(obj1 (req "injectedProtocol" Protocol_hash.encoding))) (obj1 (req "injectedProtocol" Protocol_hash.encoding)))
RPC.Path.(root / "inject_protocol") RPC.Path.(root / "inject_protocol")
let complete =
let prefix_arg =
let destruct s = Ok s
and construct s = s in
RPC.Arg.make ~name:"prefix" ~destruct ~construct () in
RPC.service
~description: "Try to complete a prefix of a Base48Check-encoded data. \
This RPC is actually able to complete hashes of \
black and hashes of operations."
~input: empty
~output: (list string)
RPC.Path.(root / "complete" /: prefix_arg )
let describe = let describe =
RPC.Description.service RPC.Description.service
~description: "RPCs documentation and input/output schema" ~description: "RPCs documentation and input/output schema"

View File

@ -132,5 +132,7 @@ val inject_protocol:
(unit, unit, (unit, unit,
(Store.protocol * bool * bool option), Protocol_hash.t tzresult) RPC.service (Store.protocol * bool * bool option), Protocol_hash.t tzresult) RPC.service
val complete: (unit, unit * string, unit, string list) RPC.service
val describe: val describe:
(unit, unit, bool option, RPC.Description.directory_descr) RPC.service (unit, unit, bool option, RPC.Description.directory_descr) RPC.service