1. 05 May, 2019 5 commits
    • Joe Loser's avatar
      Add non-const data() method to FBString (#1116) · e1ab01a5
      Joe Loser authored
      Summary:
      - As of C++17, `std::string` contains a non-const `data()` member function.
        This is useful when working with C APIs that have `char*` output parameters.
      - Implements P0272 for `FBString`:
        http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0272r1.html
      
      Example of workaround without this:
      
      ```
        fbstring s{};
        some_api(&s.front());
      ```
      
      - The expression `&s.front()` above causes undefined behavior since the string
        is empty.
      
      - Add non-const public member function `data()` to `fbstring` which
        delegates to `fbstring_core`.
      Pull Request resolved: https://github.com/facebook/folly/pull/1116
      
      Reviewed By: Orvid
      
      Differential Revision: D15213884
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: f533542db0a7e34c09a622e5257d7c1e66ab75e2
      e1ab01a5
    • Yedidya Feldblum's avatar
      small_vector<T>::get_allocator() · b6b647e6
      Yedidya Feldblum authored
      Summary:
      [Folly] `small_vector<T>::get_allocator()` for compatibility with other container types.
      
      While `small_vector` is not actually parameterizable over the allocator types, compatibility with generic interfaces such as the presorted-ctor interfaces of `sorted_vector_set` and `sorted_vector_map` require `get_allocator`.
      
      Reviewed By: vitaut
      
      Differential Revision: D15194509
      
      fbshipit-source-id: 3a7842d5640f8e95a09c4cd8e2a9ab6ffc4fe9ac
      b6b647e6
    • Yedidya Feldblum's avatar
      container_type member alias for sorted-vector types · 5e74cab3
      Yedidya Feldblum authored
      Summary: [Folly] container_type member alias for `sorted_vector_set` and `sorted_vector_map`, following the protocol from `std::queue`, `std::priority_queue`, and `std::stack` container adaptors.
      
      Reviewed By: vitaut
      
      Differential Revision: D15194108
      
      fbshipit-source-id: 91332478c66779690f415d598b99274b8ee52df4
      5e74cab3
    • Yedidya Feldblum's avatar
      kGlibcxxVer, from _GLIBCXX_RELEASE · 9c081d10
      Yedidya Feldblum authored
      Summary: [Folly] `kGlibcxxVer`, from `_GLIBCXX_RELEASE` if available.
      
      Differential Revision: D15209042
      
      fbshipit-source-id: 077e94db623f33ebc3ec2cb93a5d7774d384a863
      9c081d10
    • Yedidya Feldblum's avatar
      Always include bits/c++config.h if possible · 02f942e3
      Yedidya Feldblum authored
      Summary: [Folly] Always `#include <bits/c++config.h>` if possible from `folly/portability/Config.h`. This is the libstdc++ (glibcxx) version/config/features header, so include it alongside the corresponding glibc version/config/features header.
      
      Differential Revision: D15209040
      
      fbshipit-source-id: 6f624283f58523d74317f3d998aa99c1c50ee2b3
      02f942e3
  2. 04 May, 2019 2 commits
    • Krishna Kondaka's avatar
      Split validateRecord to allow validating header and data separately · 0669cd92
      Krishna Kondaka authored
      Summary:
      Split validateRecord to allow validating header and data separately. This is
      useful when the header is used while storing records on storage devices.
      Validating header alone before validating the record helps avoiding unnecessary
      device reads. It also helps avoiding unnecessary memory allocations while trying to read invalid dataLength bytes present in an invalid header.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D15184763
      
      fbshipit-source-id: e1f008df82cf2d040322b8d62135ea2b5e0dcc0e
      0669cd92
    • Yedidya Feldblum's avatar
      Use noexcept in IOBuf, supporting -fno-exceptions · baa4c665
      Yedidya Feldblum authored
      Summary: [Folly] Use `noexcept` in `IOBuf` v.s. reimplementing it via explicit `catch` and `abort`, with the intended side-effect of adding support for `-fno-exceptions`.
      
      Reviewed By: simpkins
      
      Differential Revision: D15208427
      
      fbshipit-source-id: bcf9d7b0f1a556e43d996c84b1df43ff891da974
      baa4c665
  3. 03 May, 2019 33 commits
    • Chad Austin's avatar
      Revert D15073229: [folly] detect at runtime whether SKIP should fail · 846587f4
      Chad Austin authored
      Differential Revision:
      D15073229
      
      Original commit changeset: 417a1f4e42d0
      
      fbshipit-source-id: 689b010627482e9a05f3dd34e89baae485875025
      846587f4
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add `build --no-deps` flag · e8c7b488
      Wez Furlong authored
      Summary:
      This is useful especially on Windows where the up-to-date
      checks for the dependencies take a long time.
      
      The idea is that you might run this to start:
      
      ```
      $ getdeps.py build eden
      ```
      
      and then while in the edit/debug/build iteration cycle:
      
      ```
      $ getdeps.py build --no-deps eden
      ```
      
      Reviewed By: pkaush
      
      Differential Revision: D15200352
      
      fbshipit-source-id: 086f2f49db967ef4d1914a69fa80067104d79136
      e8c7b488
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add sqlite3 builder · a4179ec0
      Wez Furlong authored
      Summary:
      Previously, we were using autoconf to build sqlite,
      but that isn't available on Windows.  Instead, here's a builder
      that generates a little cmake configuration for building and
      installing sqlite.
      
      Using cmake for this means that we can test the same builder
      on all platforms that need to pull in sqlite.
      
      Reviewed By: simpkins
      
      Differential Revision: D15179387
      
      fbshipit-source-id: fccf969182565982bd5be55545a2d2625aa99124
      a4179ec0
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add LFS caching for ArchiveFetcher · 3a777987
      Wez Furlong authored
      Summary:
      When running in FB infra, prefer to download from our local LFS
      server rather than going out to the internet.
      
      Fall back to a normal internet download if the LFS get fails for some reason.
      
      Upload to LFS after successfully verifying the hash for the downloaded archive.
      
      Add a subcommand that performs a fetch for all possible platforms so that it
      is easier to ensure that the lfs-pointers file is up to date.
      
      Reviewed By: simpkins
      
      Differential Revision: D14978660
      
      fbshipit-source-id: 240fc32fc7003d1e06c88b80d85054dae36e2f31
      3a777987
    • Wez Furlong's avatar
      eden: getdeps: add fb-mercurial dep to enable treemanifest · 13356782
      Wez Furlong authored
      Summary:
      In order to pull in the treemanifest and other libraries
      from our mercurial repo, add a manifest file for it, and then
      adjust the logic in our cmake module to look for it.
      
      The fb-mercurial manifest just copies the source tree to the
      installation dir.  In the future, we could teach it to invoke
      the build for real.
      
      Reviewed By: simpkins
      
      Differential Revision: D14969806
      
      fbshipit-source-id: cb270c5003a1c134eeea92c7481a84938f1c5957
      13356782
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add `show-inst-dir` and `show-source-dir` commands · 52efa89a
      Wez Furlong authored
      Summary:
      This prints out the installation or source prefix for a given project.
      This is useful in eg: packaging scripts to figure out where they can
      find the built artifacts.
      
      Reviewed By: simpkins
      
      Differential Revision: D14967378
      
      fbshipit-source-id: 7e1b5de2ca7219af24cfb07b4b42de22aa410469
      52efa89a
    • Wez Furlong's avatar
      fbcode_builder: getdeps: use testpilot when available to record tests · 13e19d08
      Wez Furlong authored
      Summary:
      If `testpilot` is available, generate a buck compatible json file describing the available test binaries and feed that to testpilot to have it run the tests.
      
      A later (yet to be written) diff will be able to pass appropriate flags down to testpilot in continuous runs and that will allow testpilot to auto-disable and file tasks for tests in the opensource builds.
      
      Reviewed By: simpkins
      
      Differential Revision: D14766856
      
      fbshipit-source-id: 4e144ff18f6788cf5e830d29788eabd2dbbae46a
      13e19d08
    • Wez Furlong's avatar
      fbcode_builder: getdeps: introduce loader class · 0c771cad
      Wez Furlong authored
      Summary:
      The loader makes it possible to monkey patch the functions
      that are responsible for loading manifests.  It is intended to be use
      in tests that are run in bucks sandboxed environment and that don't
      have direct access to the manifest files on disk.
      
      Reviewed By: simpkins
      
      Differential Revision: D14781326
      
      fbshipit-source-id: 18f69f8ce5768dc605b1a9388a80b7b7b9ffe0f4
      0c771cad
    • Wez Furlong's avatar
      fbcode_builder: getdeps: beef up hash computation · 31984a34
      Wez Furlong authored
      Summary:
      previously, a relatively lame hash was computed to use
      for the build directory based on some hash of the source directory.
      That was good enough to get things off the ground, but in the
      interest of being able to cache the build outputs and safely
      invalidate them we need a slightly more rigorous implementation.
      
      This diff computes a hash based on the manifest contents and
      relevant environmental factors.
      
      The hash is used to name the build directory which will ultimately
      be cached eg: using the travis/appveyor cache directory configuration
      and some other means for the FB internal CI.
      
      The hash needs to be sufficient that we change the hash when
      the manifests change.  We can tolerate a false positive change
      in hash (it just means that a build will take longer), but
      cannot tolerate a false negative (which would result in an
      incorrect build).
      
      Reviewed By: simpkins
      
      Differential Revision: D14710332
      
      fbshipit-source-id: ebc2e74eafc6f3305d4412a82195bc9fb9dfa615
      31984a34
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add `sandcastle` subcommand · 04e33cde
      Wez Furlong authored
      Summary:
      This command schedules a facebook specific sandcastle job for the current
      commit in your repo for each of the platforms we have support for in
      sandcastle.
      
      You can use `--dry-run` to have it print out the job specs.
      
      To support this, I've moved around some of the support utilities
      to make it easier to import them.
      
      Reviewed By: simpkins
      
      Differential Revision: D14710330
      
      fbshipit-source-id: fb1e2a2ce78e52894291159514977da97028b37f
      04e33cde
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add testing concept · 624b16f9
      Wez Furlong authored
      Summary:
      Adds a `test` subcommand that runs the tests for project.
      We're mostly interested in the 1st party facebook projects for this.
      
      The `sandcastle` flow will run the `test` subcommand just for the "leaf" project--the one named on the command line.
      
      Reviewed By: simpkins
      
      Differential Revision: D14710331
      
      fbshipit-source-id: 7d04a46cfd723894d61018de2f230140b52285ac
      624b16f9
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add clean command · 5e3d6786
      Wez Furlong authored
      Summary:
      This cleans up the scratch dir, removing everything except
      for downloaded tarballs.
      
      Reviewed By: simpkins
      
      Differential Revision: D14781328
      
      fbshipit-source-id: 9304e44a268cf7996c5e572a2eca219aefbf4b46
      5e3d6786
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add flag to use the real shipit · 2fbf3798
      Wez Furlong authored
      Summary:
      This fixes a TODO; in our CI environment we want to use the
      real shipit, so we'll use this flag to make that happen.
      
      Reviewed By: simpkins
      
      Differential Revision: D14695576
      
      fbshipit-source-id: 64ee72c210e2472d295dcbd39c86549273b68452
      2fbf3798
    • Wez Furlong's avatar
      watchman: add cmake option to select whether we build with eden · 9b351f60
      Wez Furlong authored
      Summary:
      This makes it possible to disable eden (and thus thrift) support.
      
      I've defaulted this to off so that we don't break the existing
      watchman CI.
      
      Reviewed By: simpkins, strager
      
      Differential Revision: D14726767
      
      fbshipit-source-id: 0f4d0597d901a91850f1ba6d71609c059c064c22
      9b351f60
    • Wez Furlong's avatar
      getdeps: add build subcommand · 0b6ff0f3
      Wez Furlong authored
      Summary:
      adds the command that is used to drive a build.
      
      The dependencies of the named project are computed using
      the same mechanism behind the `list-deps` subcommand.
      If a manifest specifies that it uses the `cmake` builder then
      a dependency on `cmake` is synthesized so that we can download
      a recent version of cmake ahead of time.
      
      The build command uses the fetcher to update the src and then
      executes the builder.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691011
      
      fbshipit-source-id: 31ae59614651ef021a9505e89c13b5717b440071
      0b6ff0f3
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add NopBuilder · b4135123
      Wez Furlong authored
      Summary:
      this could do with a better name; the NopBuilder doesn't actually
      build anything, but instead copies some files to the destination location.
      
      This is used together with eg: cmake to install pre-built binaries downloaded
      from a tarball.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691015
      
      fbshipit-source-id: a938e977aa4ec5a664bdb8085ff708319a204594
      b4135123
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add Boost builder · b09be4e0
      Wez Furlong authored
      Summary:
      the boost builder knows how to perform the non-standard
      configure and build for boost.
      
      Ideally we'd just build this statically and be happy but there are
      some nuances I've observed while building on different platforms:
      
      * One of our projects (thrift or wangle) explicitly requests static
        boost linkage for reasons unspecified
      * on darwin the install_name is broken when building dynamic libs
      
      For the sake of expediency in getting getdeps up and running, the
      solution for the moment is to build static on posix systems and
      build both static and shared on windows systems.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691009
      
      fbshipit-source-id: 634770a6f53c3ada42d1877cc6c3dacc6eed7d18
      b09be4e0
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add OpenSSL builder · 73da623a
      Wez Furlong authored
      Summary:
      the openssl builder knows how to perform the non-standard
      configuration and build steps to build openssl.
      
      On Linux systems the manifests for our projects don't mention
      openssl, causing them to pick up the system openssl.
      
      On Mac, apple don't ship openssl headers so we need to build our own.
      On Windows there is no standard openssl installation so we also need
      to build our own.
      
      As a result, this builder only works on windows and mac.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691010
      
      fbshipit-source-id: 9f8979f9eaeb5209c290cf4f43c97c0cb43d13a2
      73da623a
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add NinjaBootstrap builder · 5a16dcf3
      Wez Furlong authored
      Summary:
      this builder is used to bootstrap the ninja build tool.
      
      On Windows and mac the manifest for ninja is set to download a pre-built executable.
      While pre-built executables are available for linux they aren't portable enough
      for our purposes so we need to be able to build it for ourselves.
      
      Reviewed By: simpkins
      
      Differential Revision: D14690992
      
      fbshipit-source-id: b60fd02ad04f58dc7c2931280341791270609737
      5a16dcf3
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add CMakeBuilder · 1f158eff
      Wez Furlong authored
      Summary:
      the cmake builder knows how to use cmake to configure a build
      for (preferably) and out-of-src build.  The `cmake.defines` section of
      the manifest is used to pass `-Dkey=value` options to the cmake configure
      command line.
      
      We prefer to use `ninja` to execute the build so that we can use more
      cores than 1 on Windows and just for consistency across platforms
      with mac and linux.
      
      Reviewed By: simpkins
      
      Differential Revision: D14690998
      
      fbshipit-source-id: 8102e8b4a47da515ca001772788ed0e5f2645ad7
      1f158eff
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add AutoconfBuilder · 840ee5bb
      Wez Furlong authored
      Summary:
      the autoconf builder performs an out-of-source build using
      the autoconf suite to configure the build rules.
      
      The `autoconf.args` section from the manifest is passed to the `./configure`
      command line.
      
      If an `autogen.sh` script is present then it will be used to regenerate
      a missing `configure` script, otherwise we'll try `autoreconf`.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691002
      
      fbshipit-source-id: ab8cceafb833dab513d5a50c65f4c895a4f40047
      840ee5bb
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add MakeBuilder · 06b37c9d
      Wez Furlong authored
      Summary:
      the make builder runs `make` in the source directory.
      The `make.args` section from the manifest is passed as arguments
      to the `make` invocation.
      
      Reviewed By: simpkins
      
      Differential Revision: D14690996
      
      fbshipit-source-id: 180d657ad05f0c0266a8c1d30979d8d1473958c9
      06b37c9d
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add BuilderBase class · 1274933e
      Wez Furlong authored
      Summary:
      a builder knows how to build and install a project.
      
      Later diffs add concrete implementations of the BuilderBase
      
      Reviewed By: simpkins
      
      Differential Revision: D14691018
      
      fbshipit-source-id: 89b14614b5160353cd7e59f27037afcdf6229eb7
      1274933e
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add list-deps subcommand · 1034b669
      Wez Furlong authored
      Summary:
      While the command isn't necessarily super useful
      on its own, it does show that the plumbing for walking the
      deps is functioning, and that is important when it comes
      to building.
      
      The output lists the projects in the order that they
      would be built.
      
      The `fetch` command has been augmented to add a `--recursive`
      flag that uses the same mechanism to recursively fetch
      the dependencies.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691004
      
      fbshipit-source-id: b00bf6ad4742f8bb0a70698f71a5fe03d6a1f453
      1034b669
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add fetch subcommand · 655e8e63
      Wez Furlong authored
      Summary:
      Adds a command that can be used to trigger a fetch for a project
      
      ```
      $  ./opensource/fbcode_builder/getdeps.py fetch zstd
      Cloning https://github.com/facebook/zstd.git...
       ---
      + git clone --depth=100 https://github.com/facebook/zstd.git /data/users/wez/scratch/dataZusersZwezZfbsource/fbcode_builder_getdeps/repos/github.com-facebook-zstd.git
      Cloning into '/data/users/wez/scratch/dataZusersZwezZfbsource/fbcode_builder_getdeps/repos/github.com-facebook-zstd.git'...
      remote: Enumerating objects: 3816, done.
      remote: Counting objects: 100% (3816/3816), done.
      remote: Compressing objects: 100% (1415/1415), done.
      remote: Total 3816 (delta 2556), reused 3312 (delta 2288), pack-reused 0
      Receiving objects: 100% (3816/3816), 2.93 MiB | 9.59 MiB/s, done.
      Resolving deltas: 100% (2556/2556), done.
      Updating /data/users/wez/scratch/dataZusersZwezZfbsource/fbcode_builder_getdeps/repos/github.com-facebook-zstd.git -> v1.3.8
       ---
      + git -C /data/users/wez/scratch/dataZusersZwezZfbsource/fbcode_builder_getdeps/repos/github.com-facebook-zstd.git fetch origin v1.3.8
      From https://github.com/facebook/zstd
       * tag               v1.3.8     -> FETCH_HEAD
       ---
      + git -C /data/users/wez/scratch/dataZusersZwezZfbsource/fbcode_builder_getdeps/repos/github.com-facebook-zstd.git checkout FETCH_HEAD
      Note: checking out 'FETCH_HEAD'.
      
      You are in 'detached HEAD' state. You can look around, make experimental
      changes and commit them, and you can discard any commits you make in this
      state without impacting any branches by performing another checkout.
      
      If you want to create a new branch to retain commits you create, you may
      do so (now or later) by using -b with the checkout command again. Example:
      
        git checkout -b <new-branch-name>
      
      HEAD is now at 470344d Merge pull request #1479 from facebook/visualTest
       ---
      + git -C /data/users/wez/scratch/dataZusersZwezZfbsource/fbcode_builder_getdeps/repos/github.com-facebook-zstd.git submodule update --init
      ```
      
      Reviewed By: simpkins
      
      Differential Revision: D14691008
      
      fbshipit-source-id: 3afa391360518a08ebd6ff97f5b8b4993f10c4e8
      655e8e63
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add SimpleShipitTransformer fetcher · 1c6eb0c9
      Wez Furlong authored
      Summary:
      This fetcher knows how to transform a 1st party project
      from fbsource into approximately the same shape as ShipIt produces
      for the github repo mirrors.  It does this by reading shipit
      mapping information from the manifest file for the project.
      
      Since this fetcher uses data in the manifest and is implemented
      directly in the getdeps codebase, it is suitable for iterating
      on the opensource builds directly out of fbsource on both devservers
      and laptops inside FB.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691012
      
      fbshipit-source-id: 05f68a7be64a2e465937b24b8825d25d3348ed13
      1c6eb0c9
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add ShipitTransformer fetcher · a64ea0a2
      Wez Furlong authored
      Summary:
      This fetcher knows how to take a 1st party FB project
      from fbsource and transform it to the same shape as our github
      repos using ShipIt.  The transformation creates a transformed
      mirror of the code in scratch space (rather than mutating fbsource
      directly).
      
      This can only be used in environments where shipit is available.
      A later diff implements an alternative that works in more environments.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691013
      
      fbshipit-source-id: 539e307755c9fc0a098a235868ab622652061494
      a64ea0a2
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add ArchiveFetcher · d84ca6e6
      Wez Furlong authored
      Summary:
      this fetcher knows how to download a URL that references
      an archive and extract the sources from it.  Compressed tarballs
      and zipfiles are supported.
      
      Reviewed By: simpkins
      
      Differential Revision: D14690994
      
      fbshipit-source-id: ffbbd1d9479b0d5aa3e5cd13fe11a560e9d01c2a
      d84ca6e6
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add GitFetcher · 755d61bb
      Wez Furlong authored
      Summary: this fetcher knows how to check out sources via git.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691000
      
      fbshipit-source-id: 60f1ffbfed7b32a019aef6aa70ae0903f2782451
      755d61bb
    • Wez Furlong's avatar
      fbcode_builder: getdeps: define the Fetcher interface · 0263a36f
      Wez Furlong authored
      Summary:
      Fetchers are used to fetch a source directory from a
      source defined in a manifest file.
      
      More details can be found in comments on the various methods.
      
      The Manifest class offers a create_fetcher method for constructing
      an appropriate fetcher.  This is just a stub in this commit, but
      will expand over the course of the next few diffs as concrete
      fetcher instances are added.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691001
      
      fbshipit-source-id: 8c9038eacae3345e9403d5d1304bf979a9ee1555
      0263a36f
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add build options · e2b81155
      Wez Furlong authored
      Summary:
      The build options class contains some environmental and
      build related information that will be passed down to fetcher
      and builder objects that will be introduced in later diffs.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691007
      
      fbshipit-source-id: e8fe7322f590667ac28a5a3925a072056df0b3e3
      e2b81155
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add platform type tuple helper · b499111d
      Wez Furlong authored
      Summary:
      This will feed into the manifest context for system
      dependent manifest sections.  This is essentially the same
      code borrowed from the watchman and eden getdeps.py.
      
      Reviewed By: simpkins
      
      Differential Revision: D14690997
      
      fbshipit-source-id: 3d3ae146237a2cd49609aaa2bd0e785ebe21f02c
      b499111d
    • Wez Furlong's avatar
      fbcode_builder: getdeps: add copytree helper · a520cc43
      Wez Furlong authored
      Summary:
      this module adds some functions that help with copying
      directory trees.  The copytree function is aware of eden and will
      issue a prefetch prior to walking the directory.
      
      Reviewed By: simpkins
      
      Differential Revision: D14691006
      
      fbshipit-source-id: 079bf850756f61aca17978453d07bc73b2f91788
      a520cc43