{"action":"created","issue":{"url":"https://api.github.com/repos/ocaml/opam-repository/issues/3679","labels_url":"https://api.github.com/repos/ocaml/opam-repository/issues/3679/labels{/name}","comments_url":"https://api.github.com/repos/ocaml/opam-repository/issues/3679/comments","events_url":"https://api.github.com/repos/ocaml/opam-repository/issues/3679/events","html_url":"https://github.com/ocaml/opam-repository/pull/3679","id":60131392,"number":3679,"title":"core suite 112.24.00","user":{"login":"trefis","id":118852,"avatar_url":"https://avatars.githubusercontent.com/u/118852?v=3","gravatar_id":"","url":"https://api.github.com/users/trefis","html_url":"https://github.com/trefis","followers_url":"https://api.github.com/users/trefis/followers","following_url":"https://api.github.com/users/trefis/following{/other_user}","gists_url":"https://api.github.com/users/trefis/gists{/gist_id}","starred_url":"https://api.github.com/users/trefis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trefis/subscriptions","organizations_url":"https://api.github.com/users/trefis/orgs","repos_url":"https://api.github.com/users/trefis/repos","events_url":"https://api.github.com/users/trefis/events{/privacy}","received_events_url":"https://api.github.com/users/trefis/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":3,"created_at":"2015-03-06T17:20:32Z","updated_at":"2015-03-11T09:50:05Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/ocaml/opam-repository/pulls/3679","html_url":"https://github.com/ocaml/opam-repository/pull/3679","diff_url":"https://github.com/ocaml/opam-repository/pull/3679.diff","patch_url":"https://github.com/ocaml/opam-repository/pull/3679.patch"},"body":"Note: as the last commit shows we are not releasing async_ssl because it uses a version of ctypes which is not on OPAM yet.\r\n@yallop : I know this is an annoying question but do you have any ETA for the next release of ctypes?\r\n\r\n## 112.24.00\r\n\r\n### async\r\n\r\nKeep up to date with interface changes in `Async_kernel`, `Async_extra` and\r\n`Async_unix`.\r\n\r\n### async_extended\r\n\r\n- Fixed misspelling in `Command_rpc.Connection`, renaming `propogate_stderr` as\r\n  `propagate_stderr`.\r\n\r\n### async_extra\r\n\r\n- Changed `Log` to not eagerly run the rotation loop when an\r\n  `Output.Rotating_file` is created.\r\n- Changed `Log.Output.combine` to write log outputs in sequence rather than\r\n  parallel, to give the correct semantics when the same output is included\r\n  multiple times in `Log.create`.\r\n\r\n  This fixed a test that was failing in `lib_test/log_test.ml`.\r\n\r\n- Remove `Log.Rotation.t_of_sexp`.\r\n- Made `Command.async*` functions flush `stdout` and `stderr` before calling\r\n  shutdown, to avoid timeouts causing data to be dropped.\r\n\r\n  For now, we're making this change in `Command` rather than `Writer`.\r\n  `Writer` already has `at_shutdown` handlers.  We've observed that they\r\n  don't behave well for command-line programs w.r.t. stderr.  So, the\r\n  thinking of this feature is to try out a different `at_shutdown`\r\n  behavior, just for `Command` executables and just for `stdout` and\r\n  `stderr`.  If it works out, maybe we move it into `Writer` proper.\r\n  Putting the change in `Command` for now reduces the scope of what is\r\n  affected by the experiment, and hopefully correlates well with where\r\n  the change is likely to help.\r\n\r\n- In `Rpc`, catch exceptions raised by blocking-RPC implementations.\r\n\r\n- Added functionality to `Versioned_typed_tcp.Repeater`.\r\n\r\n  Added to `create` an argument `is_client_allowed : Client_name.t -> bool`.\r\n\r\n  Added to `start` an argument:\r\n\r\n      on_connecting_error  : (client_name    : Client_name.t\r\n                              -> server_name : Server_name.t\r\n                              -> Error.t -> unit)\r\n\r\n- Fixed a race in `Versioned_typed_tcp` in which a message can be dropped\r\n  between `Server.create` and `Server.listen`\r\n\r\n- Simplified the implementation of `Rpc`.\r\n\r\n  Rpc has an internal Response_handler module, which is just a record containing\r\n  a response-handling function and an `already_removed` boolean field.  It turns\r\n  out that this is unnecessary:  `already_removed` is set to true when the\r\n  function returns ``remove`, but if it returns ``remove` then it will also be\r\n  removed from a hash table, and we only call the function immediately after\r\n  looking it up in that hash table.\r\n\r\n  This wasn't always pointless:  this function used to return deferred values and\r\n  run inside a throttle.  The simplification is only possible because we made it\r\n  synchronous a while ago.\r\n\r\n- Added `Tcp.Server.num_connections` function.\r\n\r\n- Added creation functions for `Versioned_rpc` menus, for use in clients of an\r\n  RPC proxy.\r\n\r\n  In `Menu`:\r\n\r\n      val create : Implementation.Description.t list -> t\r\n\r\n  In `Connection_with_menu`:\r\n      val create_directly : Connection.t -> Menu.t -> t\r\n\r\n  These are for use in clients of an RPC proxy, which can't use the\r\n  regular menu mechanism since they each need to have many menus (one\r\n  for each potential target) but should only need to have one connection\r\n  (to the proxy).\r\n\r\n- Added to `Rpc` expert submodules, `Implementations.Expert` and `Rpc.Expert`,\r\n  with low-level access for implementing a proxy that can handle queries without\r\n  knowing their names, types, etc. in advance.\r\n\r\n- Renamed `Rpc.Implementation.Description` as `Rpc.Description`.\r\n\r\n- Added `Rpc.{Rpc,Pipe_rpc,State_rpc}.description` accessor functions.\r\n\r\n- Added `Rpc.Implementation.descriptions`, which returns all RPCs in an\r\n  `Rpc.Implementations.t`.\r\n  This was needed for the `rpc_discovery` library: given an `Implementations.t` we want to advertise at\r\n\r\n      prefix/<rpc_name>/<rpc_version>/host_and_port = <host_and_port>\r\n\r\n- Added combinators to `Rpc.Implementations`: `lift`, `add`, `add_exn`.\r\n\r\n### async_kernel\r\n\r\n- Now depends on `Core_kernel` instead of `Core`.\r\n\r\n  `Async_kernel.Clock` uses `Core_kernel.Time_ns` and\r\n  `Core_kernel.Timing_wheel_ns` rather than `Core.Time` and\r\n  `Core.Timing_wheel_float`.\r\n\r\n- Added `Async_kernel.Types` module to deal with the mutual recrsion of\r\n  `Async_kernel`'s types.\r\n\r\n  This should help eliminate the complexity and make it easier to make changes\r\n  without running into as many constraints due to module/type ordering.\r\n\r\n  Merged `Types.Jobs` into `Types.Scheduler`.\r\n\r\n- Improved the performance of `Deferred.bind`, eliminating an allocation in\r\n  `Ivar.connect`.\r\n\r\n- Optimized `Deferred.bind`, removing a closure allocation by inlining\r\n  `Deferred.create`.\r\n\r\n- Added `Pipe.interleave_pipe`, which is like `interleave`, but takes a pipe\r\n  rather than a list.\r\n\r\n### async_ssl\r\n\r\n- By default OpenSSL ignores the result of certificate validation, so we need to\r\n  tell it not to.\r\n\r\n- Expose session details such as checked certificates and negotiated version.\r\n  Add session resumption.\r\n\r\n### async_unix\r\n\r\n- Made `Process.env` type equal `Core.Std.Unix.env` type, effectively adding the\r\n  ``Replace_raw` variant.\r\n- Renamed `Process.wait` as `collect_output_and_wait`, and added a `wait`\r\n  function that is a thin wrapper around `waitpid`.\r\n\r\n  Also renamed:\r\n\r\n      wait_stdout       --> collect_stdout_and_wait\r\n      wait_stdout_lines --> collect_stdout_lines_and_wait\r\n\r\n- Added `Unix.getgrouplist`, a wrapper around the eponymous function in core\r\n- Change the Async scheduler to run external actions immediately upon\r\n  dequeueing them, rather than first enqueueing them in the normal job queue.\r\n\r\n  Also, made external actions be jobs rather than closures.\r\n\r\n- Changed `Unix.Inet_addr.of_string_or_gethostbyname` to not use a sequencer.\r\n\r\n  We had used a sequencer to workaround bugs in winbind, which we don't\r\n  use anymore.\r\n\r\n  Reported on github: https://github.com/janestreet/async_unix/issues/4\r\n\r\n### bignum\r\n\r\n- Fixed exception raised by `Bignum.sexp_of_t` when the denominator is zero.\r\n\r\n### bin_prot\r\n\r\nMinor commit: comments.\r\n\r\n### core\r\n\r\n- Renamed `Dequeue` as `Deque`.\r\n- Added `Fdeque`, a functional deque (a double-ended `Fqueue`, or a functional `Deque`).\r\n- Changed `Fqueue`'s bin-io format, and added a stable type.\r\n\r\n  Deprecated deque-like functions in favor of `Fdeque`.\r\n\r\n- Added `Fheap`, a functional heap implementation based on pairing heaps.\r\n- Reverted the change to `Or_error`'s bin-io format made in 112.17, going back\r\n  to the format in 112.16 and before.\r\n- Added to `Unix.env` type a ``Replace_raw` variant, as used in `exec` and\r\n  `fork_exec`.\r\n- Added `Array.Permissioned` module, which has a permissioned array type and\r\n  permissioned versions of all the regular array functions.\r\n- Added `Date.week_number : t -> int`.\r\n- Added values to `Day_of_week`: `of_int_exn`, `iso_8601_weekday_number`,\r\n  `weekdays`.\r\n\r\n       val of_int_exn : int -> t\r\n       val iso_8601_weekday_number : t -> int\r\n       val weekdays : t list (- [ Mon; Tue; Wed; Thu; Fri ] *)\r\n\r\n- Switched `Float` IEEE functions to use `Int63.t` for the mantissa rather than\r\n  `int`, so they work on 32-bit platforms.\r\n- Added a `length` field to the `Map.t` record, making `Map.length` `O(1)`\r\n  rather than `O(n)`.\r\n- Moved a fragment of `Time_ns` from `Core` to `Core_kernel`, enough so that\r\n  `Async_kernel` can use `Core_kernel.Time_ns` and ultimately only depend on\r\n  `Core_kernel`.\r\n- Fixed compilation of `Time_ns` 32-bit Linux.\r\n- Added `Bounded_int_table.clear`.\r\n- Fixed the `module_name` passed to `Identifiable.Make` for a number of modules.\r\n\r\n  The module name must be an absolute module path.\r\n\r\n  Reported here: https://github.com/janestreet/core/issues/52\r\n\r\n- Added `Tuple.Binable` functor, for making binable tuples.\r\n- Sped up a `Time_stamp_counter` unit test.\r\n\r\n  `Time_stamp_counter` unit test has an 18s unit test, which seems\r\n  excessive.  Take a couple of orders of magnitude off the number of\r\n  iterations.\r\n\r\n- Added `Time_ns.pause`, whose implementation is the same as `Time.pause`.\r\n\r\n  This involved moving the `nanosleep` C code from `Core` to\r\n  `Core_kernel`.\r\n\r\n  This was necessary so that `Async_kernel` can pause without introducing\r\n  a dependence of Async on Core.\r\n\r\n- Made `Core_kernel.Time_ns.Alternate_sexp` use a similar format to `Core.Time_ns`.\r\n\r\n  This was needed so that `Async_kernel` can use a nice sexp format for\r\n  time spans.\r\n\r\n- Changed `Timing_wheel` implementation to use `Time_ns`, and moved to\r\n  `Core_kernel.Timing_wheel_ns`; made `Core.Timing_wheel` a wrapper around\r\n  `Timing_wheel_ns`.\r\n\r\n  Generalized the timing-wheel interface to be parametric in `Time`, so\r\n  that one interface applies to both `Timing_wheel` and\r\n  `Timing_wheel_ns`.\r\n\r\n  Generalized the timing-wheel unit tests to a functor,\r\n  `Timing_wheel_unit_tests.Make`, that is used to test both\r\n  `Timing_wheel_ns` and `Timing_wheel_float`.  Moved a few tests that\r\n  depend on `Time` and `Date` from the functor into\r\n  `timing_wheel_float_unit_tests.ml`.\r\n\r\n  Split out `Timing_wheel.Debug` into a separate functor,\r\n  `Timing_wheel_debug.Make`.\r\n\r\n  This was done in so that `Async_kernel` can depend only on\r\n  `Core_kernel` and not `Core`.\r\n\r\n- Added optional arguments to `Command.group`: `?body` and\r\n  `?preserve_subcommand_order`.\r\n\r\n  `preserve_subcommand_order : unit` causes subcommands to be in the order\r\n  they are specified, rather than sorted.\r\n\r\n  `body : (path:string list -> unit)` is called when no additional\r\n  arguments are passed.\r\n\r\n- Added accessor function `Command.summary : t -> string`.\r\n- Fixed a bug in `Time.Span` robust comparison.\r\n- Changed `Command`'s tab-completion bash code so that it is possible for\r\n  programs to return completions containing spaces.\r\n\r\n  Actually knowing when and how to do so is difficult, because of course there's escaping to\r\n  worry about. Adding helper functions to make that sort of thing manageable is left for\r\n  future work.\r\n\r\n- In `Command`, made the `-version` and `-build-info` flags work at the top\r\n  level when there are subcommands.\r\n- Added `Sequence.interleaved_cartesian_product`, which implements cartesian\r\n  product of potentially infinite sequences.\r\n\r\n### core_extended\r\n\r\n- Added to `Shell.set_defaults` a `?preserve_euid:bool` argument, which causes\r\n  `Shell` to use `bash -p`.\r\n- Removed `Array.Access_control`, now that there is\r\n  `Core.Std.Array.Permissioned`.\r\n- Removed `Fast_int_div`.\r\n\r\n### core_kernel\r\n\r\n- Added `Time_ns` module.\r\n\r\n  A fragment of `Core.Std.Time_ns` is now in `Core_kernel.Std.Time_ns` such that\r\n  `Async_kernel` can use `Time_ns` and only depend on `Core_kernel`.\r\n\r\n- Renamed `Dequeue` as `Deque`.\r\n  `Dequeue` remains for backward compatibility, but should not be used anymore.\r\n  Use `Deque` instead.\r\n\r\n- Added `Fdeque` module, a functional version `Deque`.\r\n  Deprecate deque-like functions in `Fqueue`.\r\n\r\n### custom_printf\r\n\r\n- Added syntax to use `Sexp.to_string_mach` rather than `Sexp.to_string_hum`.\r\n\r\n  Added syntax `%{sexp#mach:<type>}`, which is like `%{sexp:<type>}`,\r\n  except it calls `Sexplib.Sexp.to_string_mach` instead of\r\n  `Sexplib.Sexp.to_string_hum`.\r\n\r\n  In fact, you can put any identifier after the `sexp#` and it will call\r\n  `Sexplib.Sexp.to_string_<that identifier>`; however, there are no other\r\n  such functions right now.\r\n\r\n### jenga\r\n\r\n- Interns strings, significantly reducing memory use.\r\n\r\n### ocaml_plugin\r\n\r\nMinor update: follow Async evolution.\r\n\r\n### pa_ounit\r\n\r\n- Added `-verbose` switch to time unit tests, so we can easily see which ones\r\n  are taking a long time.\r\n\r\n### pa_test\r\n\r\n- Reduce code generated by `pa_test` in favor of more code in `pa_test_lib`.\r\n  + Less generated code means less time spent compiling it.\r\n  + Reducing code in `pa_test.ml` is good, because:\r\n      a) Staging semantics make this code hard to understand.\r\n      b) This code is written using the less familiar revised OCaml syntax.\r\n      b) We get less code to migrate to syntax extensions.\r\n\r\n- Re-used location code in `pa_here`; side benefit that we get full path names\r\n  in (Loc...) instead of just the file's basename.\r\n\r\n### patdiff\r\n\r\nMinor update: doc.\r\n\r\n### patience_diff\r\n\r\nUpdate references to `Core.Std.Dequeue` to refer to `Core.Std.Deque`\r\n\r\n### rpc_parallel\r\n\r\n- Added `Parallel.State.get` function, to check whether `Rpc_parallel` has been\r\n  initialized correctly.\r\n- Added `Map_reduce` module, which is an easy-to-use parallel map/reduce library.\r\n\r\n  It can be used to map/fold over a list while utilizing multiple cores on multiple machines.\r\n\r\n  Also added support for workers to keep their own inner state.\r\n\r\n- Fixed bug in which  zombie process was created per spawned worker.\r\n\r\n  Also fixed shutdown on remote workers\r\n\r\n- Made it possible for workers to spawn other workers, i.e.  act as masters.\r\n\r\n- Made the connection timeout configurable and bumped the default to 10s.\r\n\r\n### sexplib\r\n\r\nMinor update: documentation.\r\n\r\n### typerep\r\n\r\n- Remove unused \"bin_proj\" rewriter.\r\n"},"comment":{"url":"https://api.github.com/repos/ocaml/opam-repository/issues/comments/78233000","html_url":"https://github.com/ocaml/opam-repository/pull/3679#issuecomment-78233000","issue_url":"https://api.github.com/repos/ocaml/opam-repository/issues/3679","id":78233000,"user":{"login":"trefis","id":118852,"avatar_url":"https://avatars.githubusercontent.com/u/118852?v=3","gravatar_id":"","url":"https://api.github.com/users/trefis","html_url":"https://github.com/trefis","followers_url":"https://api.github.com/users/trefis/followers","following_url":"https://api.github.com/users/trefis/following{/other_user}","gists_url":"https://api.github.com/users/trefis/gists{/gist_id}","starred_url":"https://api.github.com/users/trefis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trefis/subscriptions","organizations_url":"https://api.github.com/users/trefis/orgs","repos_url":"https://api.github.com/users/trefis/repos","events_url":"https://api.github.com/users/trefis/events{/privacy}","received_events_url":"https://api.github.com/users/trefis/received_events","type":"User","site_admin":false},"created_at":"2015-03-11T09:50:05Z","updated_at":"2015-03-11T09:50:05Z","body":"@AltGr travis reports this fails on 4.01 and 4.00 but when I look at the log the only errors I see are things like:\r\n\r\n```\r\n[ERROR] No packages found.\r\n'opam list async.112.24.00' failed.\r\nPackage unavailable.\r\nAvailable packages for system:\r\nasync  --  Monadic concurrency library\r\nPackage is unavailable on this configuration, skipping:\r\n[ERROR] Version 112.24.00 of \"async\" is not available for your compiler or your OS.\r\n'opam install async.112.24.00 --dry-run' failed.\r\n```\r\nWhich is expected, considering the version constraint on the packages.\r\n\r\nLooking more carefully, the same message is reported for `async_find` while it should be available. I have no idea what's going on here."}}