Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Manually sync from internal repo #44

Merged
merged 68 commits into from
Aug 21, 2020
Merged

Commits on Aug 21, 2020

  1. remotefilelog: do not resolve linkrev for changelog.add

    Summary: The value of linkrev is invalid with segmented changelog. Do not resolve it.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036079
    
    fbshipit-source-id: 8f8b097458bc694327db6ba4e2dc4107bdf44157
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    1941cd0 View commit details
    Browse the repository at this point in the history
  2. commits: add double write commits backend

    Summary:
    This allows us to try segmented changelog while maintaining revlog
    compatibility.
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970583
    
    fbshipit-source-id: 7c43cdadd76300e76e89f38aac5ed3ecc0cff728
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    0ff7fc4 View commit details
    Browse the repository at this point in the history
  3. commits: add a trait to describe storage backend and use-cases

    Summary: This will be used to describe what the commit graph backend is.
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970577
    
    fbshipit-source-id: 753efdbdd4466730ece758d9f4789fbd21e2801b
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    44056e3 View commit details
    Browse the repository at this point in the history
  4. renderdag: move to dag

    Summary:
    This allows dag to use renderdag in tests to verify graph result. Previously
    it was hard because dag <-> renderdag would form circular dependency.
    
    It also make it possible to implement more efficient and integrated fast paths
    for graph rendering.
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970570
    
    fbshipit-source-id: 526497339bd7aa8898d1af4aa9cf6d2a6797aae0
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    fa9f8ef View commit details
    Browse the repository at this point in the history
  5. dag: add import_and_flush API

    Summary:
    This allows importing from other DAGs. It will be used to import revlog DAG to
    the new segmented format.
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970572
    
    fbshipit-source-id: 0a183e7b64831574cc9c60d4639124d02d19cf43
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    c14a1d7 View commit details
    Browse the repository at this point in the history
  6. pydag: update bindings

    Summary: Update bindings to expose the DoubleWrite backend and the DescribeBackend API.
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970574
    
    fbshipit-source-id: bdb52ff21dd0b9ffa0be214b4a4824025f460092
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    ce91c9d View commit details
    Browse the repository at this point in the history
  7. SAI API 1.6.3

    Summary: As titled.
    
    Differential Revision: D23216535
    
    fbshipit-source-id: 4d278cd1f5d4c661eddda265d92f51d391192404
    shri-khare authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    490ed99 View commit details
    Browse the repository at this point in the history
  8. Remove all remaining calls to completeInThread

    Reviewed By: iahs
    
    Differential Revision: D23035578
    
    fbshipit-source-id: 24e68e693751cc7e7f7b3c0db966581b72469f0a
    Alfred Fuller authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    53ea2be View commit details
    Browse the repository at this point in the history
  9. mononoke: try to print warning about expensive getbundle earlier

    Summary:
    We already had a logic that prints if we are about to run an expensive
    getbundle. However this logic prints a warning after we've fetched 1M commits
    already, and user would have to wait for a long time to get this message.
    
    However in some cases we can give this warning very quickly. For example, if
    the lowest "heads" generation number is >1M commits away from highest "common"
    generation number, then we can print the warning right away.
    
    Differential Revision: D23213482
    
    fbshipit-source-id: 67e2399ca958703129cf3c22d82ce48cbbdcd2d1
    StanislavGlebik authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    ce20dc7 View commit details
    Browse the repository at this point in the history
  10. mononoke_api: resolve_bookmark should still check the db on cache miss

    Summary:
    If the warm bookmarks cache doesn't contain the bookmark we are looking for,
    this might just be because it's a scratch bookmark, which aren't included in
    that cache.
    
    Always request the bookmark from the backing db if the cache misses.
    
    Reviewed By: StanislavGlebik
    
    Differential Revision: D23238009
    
    fbshipit-source-id: c8843f1974ba14f148e30ba78a38eb710e7383b6
    markbt authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    41cf292 View commit details
    Browse the repository at this point in the history
  11. bgprogress: Stdio is only used on Unix

    Summary: This fixes the Windows build.
    
    Reviewed By: farnz
    
    Differential Revision: D23212195
    
    fbshipit-source-id: 159f3ddebf6a97f52f9b6c80ef19315c8f4b0c85
    markbt authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    15b750e View commit details
    Browse the repository at this point in the history
  12. commitcloud: only send most recent obsmarkers

    Summary:
    Large numbers of pending obsmarkers can cause commit cloud `update_references`
    requests to fail.
    
    Prevent this from happening by only syncing the most recent obsmarkers.
    Obsmarkers are in the process of being deprecated and removed, so this
    shouldn't be a problem for long.
    
    Reviewed By: farnz
    
    Differential Revision: D23211621
    
    fbshipit-source-id: 56a2e103722c3c162eacdb62638ff8ff614d5815
    markbt authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    4739bdb View commit details
    Browse the repository at this point in the history
  13. commitcloud: don't send obsmarkers if evolution is not enabled

    Summary: Avoid trying to send local obsmarkers if evolution is not enabled.
    
    Reviewed By: farnz
    
    Differential Revision: D23210800
    
    fbshipit-source-id: dc247a18e92f6f5454eeed520854dd6254f66257
    markbt authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    ca498c6 View commit details
    Browse the repository at this point in the history
  14. commitcloud: complete the transaction to sync from the cloud

    Summary:
    If a cloud sync requires both fetching from the cloud and uploading new state to the cloud,
    commit the transaction between the two steps, so that a successful cloud fetch is not
    rolled back by failure to send to the cloud.
    
    While we're here, limit the number of sync attempts to 3 in one go.
    
    Reviewed By: farnz
    
    Differential Revision: D23211846
    
    fbshipit-source-id: fa97165d94eee973284ff3d00466387b3041306c
    markbt authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    fd38fba View commit details
    Browse the repository at this point in the history
  15. mononoke_api: add tests for resolve_bookmark and list_bookmarks

    Summary:
    Add tests for basic functionality of `resolve_bookmark` and `list_bookmarks`,
    ensuring that they correctly go through the warm bookmarks cache.
    
    `list_bookmarks` was still using old-style streams, so upgrade it to new streams.
    
    Differential Revision: D23239250
    
    fbshipit-source-id: f78abae2d382263be76c34f1488249677134a74d
    markbt authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    faa88db View commit details
    Browse the repository at this point in the history
  16. mononoke_api: remove a use of old futures

    Summary: The `map_err` call can be done with the new future from `compat()`.
    
    Reviewed By: StanislavGlebik
    
    Differential Revision: D23239251
    
    fbshipit-source-id: c80609ae0a975bc54253784e002a07a048651aa3
    markbt authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    048520e View commit details
    Browse the repository at this point in the history
  17. configs: handle timestamp anomalies in dynamicconfigs

    Summary:
    Dynamicconfigs compares the timestamp of config files with the current
    timestamp to determine when to regenerate. If the timestamp of the config file
    is newer than the current timestamp, Rust throws an exception. Let's handle that
    case and treat it as if the file was just created instead of crashing.
    
    Reviewed By: quark-zju
    
    Differential Revision: D23230216
    
    fbshipit-source-id: ca185de7dfca46953e04ec08c84668eda6d749bd
    DurhamG authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    5e28ee0 View commit details
    Browse the repository at this point in the history
  18. mononoke/repo_import: removed callsign command argument for repo_import

    Summary:
    Related commits: D23214677 (facebook@dcb5654), D23213192
    
    In the previous commits we added phabricator callsigns to the repo configs.
    Since we can extract the callsigns from them, we don't need the callsign
    flag for repo_import tool. This diff removes the flag and uses the config variable.
    
    Reviewed By: StanislavGlebik
    
    Differential Revision: D23240398
    
    fbshipit-source-id: d8b853d37e21be97af42e9f50658b9f471f8fc48
    Viet Hung Nguyen authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    5cea9f8 View commit details
    Browse the repository at this point in the history
  19. mercurial: tidy up eden import helper mononoke detection

    Summary:
    We've been using a hard coded list to determine whether
    mononoke is available, and that list is falling behind the current
    state of our backend migration.
    
    This commit removes the hard coded list in favor of testing
    `remotefile.reponame`.  If that is configured then it holds
    the mononoke reponame.
    
    I'm making the assumption that it being set implies that mononoke
    is available for that repo.  That may not be 100% true, but
    it appears to be effectively true for the intersection of repos
    known to `fbclone` and the migrated set of repos.
    
    If this code decides that mononoke is supported, the behavior
    in EdenFS is to then attempt to use the SCS to fetch tree
    data using the returned `repo.name`.  That appears to be the
    only way that this information is used today.
    
    Reviewed By: quark-zju
    
    Differential Revision: D23214471
    
    fbshipit-source-id: 17b6475b891df5423dca0c18ddae0838795f713a
    wez authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    71eb608 View commit details
    Browse the repository at this point in the history
  20. Configuration menu
    Copy the full SHA
    093ac35 View commit details
    Browse the repository at this point in the history
  21. add an option to serve commit cloud smartlog from the original

    Summary:
    This option is needed to validate Mononoke Smartlog against the original
    infinitepush Commit Cloud Smartlog. This option is advanced and can be removed
    after full migration to the Mononoke backend.
    
    Reviewed By: markbt
    
    Differential Revision: D23241251
    
    fbshipit-source-id: e550334b104d18bb58d39acb8540ebdc9e711c4e
    Liubov Dmitrieva authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    3d6715e View commit details
    Browse the repository at this point in the history
  22. Configuration menu
    Copy the full SHA
    81afe81 View commit details
    Browse the repository at this point in the history
  23. doctor: repair hgcommits directory too

    Summary: Make `hg doctor` repair the `hgcommits` directory.
    
    Reviewed By: singhsrb
    
    Differential Revision: D23249534
    
    fbshipit-source-id: fd252479638e1e8ed4665531a804d2862993d25e
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    83459bf View commit details
    Browse the repository at this point in the history
  24. commands: add debugchangelog command

    Summary: For now it just prints some details about the changelog backend.
    
    Reviewed By: DurhamG, sfilipco
    
    Differential Revision: D22970573
    
    fbshipit-source-id: 719a5e5bb6f3856df3c9357e47daa9e7c8584952
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    59b6a5d View commit details
    Browse the repository at this point in the history
  25. pydag: add an API to migrate from one DAG to segmented DAG

    Summary:
    This will be used for migrating revlog DAG to segmented changelog. It does not
    migrate commit text data (which can take 10+ minutes).
    
    Reviewed By: DurhamG, sfilipco
    
    Differential Revision: D22970582
    
    fbshipit-source-id: 125a8726d48e15ceb06edb139d6d5b2fc132a32c
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    197cb53 View commit details
    Browse the repository at this point in the history
  26. changelog2: add ways to migrate between formats

    Summary: This allows migrating between a few changelog formats we have.
    
    Reviewed By: DurhamG
    
    Differential Revision: D22970571
    
    fbshipit-source-id: d6b577ae5beb72a43fff999c26c35fcdc33e8f83
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    329be4a View commit details
    Browse the repository at this point in the history
  27. changelog: expose algorithmbackend API

    Summary:
    This allows certain code paths to use `dageval` with the idea that `dageval` is
    going to be faster.
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970576
    
    fbshipit-source-id: ba4536a55691de63640e574c898320629c6d7b2f
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    bab1b11 View commit details
    Browse the repository at this point in the history
  28. changelog: tonodes(idset) has a fast path

    Summary:
    By default, `torevs` calls Python iteration for non-list, non-spans Python
    objects. The `idset` object has the `spans` which can be used as a fast
    path.
    
    Reviewed By: DurhamG
    
    Differential Revision: D22970580
    
    fbshipit-source-id: f491404ba803c4468c17cd74daaea90f46b8b38b
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    d4f46ea View commit details
    Browse the repository at this point in the history
  29. changelog: do not use nullid as "master node"

    Summary: The Rust "flush(masternodes)" API does not handle nullid. Filter it out from Python.
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970578
    
    fbshipit-source-id: 671fe950948067a0b3f97c5b65ff2b9b7ed4b631
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    452b5f9 View commit details
    Browse the repository at this point in the history
  30. smartset: add Rust nameset wrapper

    Summary:
    The nameset serves as a bridge for Rust NameSet sets. It's different from the
    Rust IdSet in a way that it supports all kinds of Rust NameSet (lazy or
    non-lazy).
    
    Unlike the native Rust binding, the added nameset uses rev numbers and fit in
    the Python smartset framework.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036066
    
    fbshipit-source-id: 060b3927dda6cd2275af21b093729c7e0e88ee7c
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    70179af View commit details
    Browse the repository at this point in the history
  31. changelog2: preserve laziness of 'ancestors'

    Summary:
    This is important for performance. Especially, `copies.py` uses it, and a
    non-lazy `ancestors` would slow down common operations like rebase or histedit
    or `log -p` because they all use `copies.py`.
    
    Before, `log -pr. -T. --profile>/dev/null`:
    
    ```
      2859        \ pathcopies                      copies.py:234
      2858         | _forwardcopies                 copies.py:202
      2858         | _committedforwardcopies        copies.py:166
        11          \ computeforwardmissing         remotefilelog/__init__.py:508
         3            \ _computeforwardmissing      copies.py:156
         7            \ prefetch                    fileserverclient.py:237
         5             | __get__                    util.py:982
         5             | fileslog                   shallowrepo.py:47
         5             | __init__                   remotefilelog.py:465
         5             | makeruststore              remotefilelog.py:519
    * 2836          \ ancestors                     changelog2.py:462
         3        \ difffn                          patch.py:2696
         3         | trydiff                        remotefilelog/__init__.py:667
         3         | prefetch                       fileserverclient.py:237
    Total time: 3114 ms
    ```
    
    After:
    
    ```
       11        \ pathcopies                       copies.py:234
       10         | _forwardcopies                  copies.py:202
       10         | _committedforwardcopies         copies.py:166
       10         | computeforwardmissing           remotefilelog/__init__.py:508
        3          \ _computeforwardmissing         copies.py:156
        7          \ prefetch                       fileserverclient.py:237
        5           | __get__                       util.py:982
        5           | fileslog                      shallowrepo.py:47
        5           | __init__                      remotefilelog.py:465
        5           | makeruststore                 remotefilelog.py:519
        3        \ difffn                           patch.py:2696
        3         | trydiff                         remotefilelog/__init__.py:667
        2         | prefetch                        fileserverclient.py:237
    ```
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036057
    
    fbshipit-source-id: 815cb167d38d0e5d1640ea6156b0891c72253933
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    a1aa47a View commit details
    Browse the repository at this point in the history
  32. dag: drop inverse DAG

    Summary:
    The only intended use of the inverse DAG is to implement the Python dag
    interface in `dagutil.py`. D22519589 (facebook@2d4d44c) stack changed it so the Python dag
    interface becomes optional. Therefore there is no need to keep the inverse DAG
    interface, which is a bit tricky on sorting.
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970581
    
    fbshipit-source-id: 58a126b41d992e75beaf76ece25cb578ee84760b
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    0718e0b View commit details
    Browse the repository at this point in the history
  33. dag: add NameDag::snapshot_dag

    Summary:
    Make it possible to snapshot a Dag. This is useful for cases where another
    struct wants access to the Dag without lifetimes. Namely, the LazySet can
    might want to keep a snapshot of Dag.
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970568
    
    fbshipit-source-id: 508c38d3ffac2ffcd2e682578c3c5e5787ea3bcf
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    320e04e View commit details
    Browse the repository at this point in the history
  34. dag: add DagAlgorithm::snapshot_dag

    Summary:
    This API allows the underlying Dag to provide a snapshot. The snapshot can then
    be used in places that do not want a lifetime (ex. NameSet).
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970579
    
    fbshipit-source-id: ededff82009fd5b4583f871eef084ec907b45d33
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    38b9ef8 View commit details
    Browse the repository at this point in the history
  35. dag: fix re-assigning master flush

    Summary:
    Before this change, `flush` with empty changes but `master` moves will cause an
    error, because the `parents_func` only contains "pending changes", aka. new
    vertexes. The `parents_func` does not know `master` and `master` is needed to
    re-assign them from the non-master to the master group.
    
    With the snapshot API, things become easier. We just take a snapshot before
    reloading, and use the snapshot to answer parent_names.
    
    Reviewed By: sfilipco
    
    Differential Revision: D22970569
    
    fbshipit-source-id: 99a25857ba98792edff69985c16df118a560ffb0
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    865013e View commit details
    Browse the repository at this point in the history
  36. nameset: new metaset for separate iter+contains lazy/fast paths

    Summary:
    For sets like `obsolete()`, `merge()`, they could have a fast "contains" path:
    Just check the given commit without calculating a full set. It's also possible
    to have a relatively efficient code path to return StaticSet (for obsolete()),
    or IdStaticSet (for merge(), by checking flat segments). This diff adds a
    `MetaSet` that allows defining two fast paths separately.
    
    This will be used for the `obsolete()` set in upcoming changes.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036059
    
    fbshipit-source-id: 06e6f90e7e9511626a12cfa729c306ff539256d2
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    cf9e639 View commit details
    Browse the repository at this point in the history
  37. nameset: do not swap x & y if they come from different graphs

    Summary:
    If `x` and `y` come from a same graph, `x & y` is more efficient than
    `y & x` if `y` is larger. However, if `x` and `y` are from different
    graphs, the `FULL` hint can no longer accurately predict which one
    is larger. Therefore the swap should be avoided.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036081
    
    fbshipit-source-id: fe3970fc38c853b36689bfd0ee1dec20643ace78
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    a050d97 View commit details
    Browse the repository at this point in the history
  38. nameset: use real dag snapshot instead of a pointer in hints

    Summary:
    This trades a bit performance (calculating the snapshot) for correctness (no
    pointer reuse issues) and convenience (set captures dag information with them
    and enables use-cases like converting NameSet from another dag to the
    current dag without requiring extra `dag` objects).
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036067
    
    fbshipit-source-id: 2e691f09ad401ba79dbc635e908d79e54dadca5e
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    7c98850 View commit details
    Browse the repository at this point in the history
  39. nameset: use real id map snapshot instead of a pointer in hints

    Summary: This is similar to the previous change. This allows "binding" IdMaps to sets.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036058
    
    fbshipit-source-id: ec1b1ec73e949ad4865aecf17bfcc5c1ca723e0d
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    079e879 View commit details
    Browse the repository at this point in the history
  40. nameset: a & b should not use id-based fast path if id map is incompa…

    …tible
    
    Summary:
    If two sets have different IdMap, their Ids cannot be compared directly
    for correctness.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036068
    
    fbshipit-source-id: e800e8273b95c1f8174236e0f30445db7fd44556
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    acaeda8 View commit details
    Browse the repository at this point in the history
  41. nameset: add flatten API

    Summary: This will be useful for the `obsolete()` set.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036072
    
    fbshipit-source-id: 2f944ef31cf19f902622d90545fa02b7dda89221
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    ffe13c5 View commit details
    Browse the repository at this point in the history
  42. dag: make to_set API bind the dag

    Summary:
    This affects the `tonodes` API in the Python world. Practically this will bind
    the main commit graph to sets like draft, public.
    
    The `ToSet` requirement on `DagAlgorithm` has to be removed to avoid stack
    overflow of rustc resolving constraints.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036077
    
    fbshipit-source-id: 912b924e29611680ab6b2ee4dbcd7ab39824409a
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    1316e7f View commit details
    Browse the repository at this point in the history
  43. dag: make IdMap::assign_head calculate flat segments

    Summary:
    While testing the `obsolete()` set, I found an in-memory segmented DAG takes
    10x time to build than a HashMap DAG.
    
    Part of the inefficiency is to use a translated "parent_func" that round-trips
    through Id and Vertex, used by segment building logic. This diff makes
    `IdMap::assign_head` return flat segments, so we don't need a translated
    "parent_func" to build flat segments.
    
    This diff only adds checks to make sure the parent_func (Id version) matches
    the segments. The next diff switches the segment building to not use the
    translated parent_func.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036060
    
    fbshipit-source-id: 99137f4b5be455cdf43218ba23eb3954b6d9e05a
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    d4851b9 View commit details
    Browse the repository at this point in the history
  44. dag: improve segment building perf by using precalculated flat segments

    Summary:
    Follow up of the previous change by actually using the flat segments to build
    segments. This significantly improved the perf. `cargo bench --bench dag_ops`
    shows:
    
      building segments (old)                           774.109 ms
      building segments (new)                           143.879 ms
    
    Besides, a `O(N^2)` update to `head_ids` is changed. It improves performance
    when the graph has many heads (ex. the mutation graph).
    
    Reviewed By: sfilipco
    
    Differential Revision: D23036080
    
    fbshipit-source-id: 033565700f253c6f20e30a00adb6b579921d6679
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    5b4dcb2 View commit details
    Browse the repository at this point in the history
  45. dag: add some tracing spans

    Summary: This is useful to investigate internals of dag calculations.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23095473
    
    fbshipit-source-id: 4750c1b4ffad32b1317051d17db9659aaaed59c4
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    8eb0bd8 View commit details
    Browse the repository at this point in the history
  46. dag: test high-level segments building for non-master

    Summary:
    I noticed that high-level segments are somehow not built for non-master vertexes.
    Add a test to demonstrate the issue.
    
    Reviewed By: DurhamG, sfilipco
    
    Differential Revision: D23095466
    
    fbshipit-source-id: c5a6da14bdfabcf7c432f6c6dfe096c71cc10ee9
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    9bc8aab View commit details
    Browse the repository at this point in the history
  47. dag: fix non-master high-level segments building

    Summary:
    If there is no new master segments, it's still possible to have new non-master
    segments. Fix the loop condition so we don't skip building non-master segments.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23095465
    
    fbshipit-source-id: 46eb9d5b5f2b04241981558646e0bc090652abce
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    0d66952 View commit details
    Browse the repository at this point in the history
  48. mutationstore: optimize get_dag

    Summary:
    Optimize get_dag:
    - Avoid parsing mutation entries once they are parsed, by keeping an in-memory
      `parent_map`.
    - Pass `heads` to `add_heads` so the segments are less fragmented, cycle break
      helper is more efficient.
    
    The `heads` optimization is effective. Practically this makes `get_dag` about 2x faster.
    
    This has a subtle change on cycle handling - full cycle without any non-cycle heads will
    be ignored. Practically cycles are rare so it might be okay.
    
    Together with improvements on the `dag` side, `get_dag` is about 4x faster.
    
    Reviewed By: markbt
    
    Differential Revision: D23036062
    
    fbshipit-source-id: 3dc407b562f7ebf2543a87c5cd651ad6a2339d67
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    00dd327 View commit details
    Browse the repository at this point in the history
  49. mutationstore: add a native path to calculate 'obsolete()'

    Summary:
    The new path does not calculate the complicated `successorssets`, and is
    known to make wez's repo operations significantly faster (which, I suspect is
    slowed by a very long chain).
    
    The new code is about 3x faster on my repo too:
    
      # before
      In [1]: list(repo.nodes('draft()'))
      In [2]: %time len(m.mutation.obsoletenodes(repo))
      CPU times: user 246 ms, sys: 42.2 ms, total: 288 ms
      Wall time: 316 ms
      Out[2]: 1127
    
      # after
      In [1]: list(repo.nodes('draft()'))
      In [2]: %time len(m.mutation.obsoletenodes(repo))
      CPU times: user 74.3 ms, sys: 7.92 ms, total: 82.3 ms
      Wall time: 82.3 ms
      Out[2]: 1127
    
    Reviewed By: markbt
    
    Differential Revision: D23036063
    
    fbshipit-source-id: afd6ac122bb5d8d513b5cdc033e04d2c377286eb
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    c587f36 View commit details
    Browse the repository at this point in the history
  50. pymutationstore: make getdag support selecting successors or predeces…

    …sors
    
    Summary: Expose the Rust API so `getdag` can choose to skip successors or predecessors.
    
    Reviewed By: markbt
    
    Differential Revision: D23036056
    
    fbshipit-source-id: 30cd437c5420d2d10176e33ef9de98814046f4ce
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    0928200 View commit details
    Browse the repository at this point in the history
  51. commitcloud: optimize revset for segmented changelog backend

    Summary:
    The `notbackedup()` revset is used as part of `summary` that prints information
    at the end of `smartlog`. It can take hundreds of milliseconds if there are
    many heads. Detect segmented changelog and use a fast path for it.
    
    Practically this reduces `summary` from 594ms to 91ms for me:
    
    With segmented changelog (doublewrite backend) and new code path:
    
        91    \ summary                             status.py:23
         2      \ currentworkspace                  workspace.py:121
         3       | _get (2 times)                   workspace.py:110
         3       | read (2 times)                   config.py:195
         3       | parse (2 times)                  config.py:116
         2       | compile (14 times)               util.py:1464
         3      \ __init__                          syncstate.py:44
        82      \ revs                              localrepo.py:1203
    
    With revlog and old code path:
    
       594    \ summary                             status.py:23
         2      \ currentworkspace                  workspace.py:121
         4       | _get (2 times)                   workspace.py:110
         3       | read (2 times)                   config.py:195
         3       | parse (2 times)                  config.py:116
         3       | compile (14 times)               util.py:1464
         3      \ __init__                          syncstate.py:44
        46      \ revs                              localrepo.py:1203
       539      \ _iterfilter                       smartset.py:647
       538       | <lambda> (1565 times)            commitcloud/__init__.py:371
       537       | __contains__ (1565 times)        smartset.py:1039
       533       | _consumegen (17355 times)        smartset.py:1122
    
    Reviewed By: markbt
    
    Differential Revision: D23036075
    
    fbshipit-source-id: 09dcc34f34a42814c6526e558d40b4d75ba9d75f
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    9d1183a View commit details
    Browse the repository at this point in the history
  52. test-smartlog: use explicit template

    Summary:
    The `compact` template is rarely used and is coupled with rev numbers (ex. rev
    number decides what "parents" to show). Use explicit templates.  This makes the
    test change easier to check.
    
    Reviewed By: DurhamG
    
    Differential Revision: D23036076
    
    fbshipit-source-id: f2cc0f25191711fa7d846a8ad38aee8fb9171273
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    5fbb8e8 View commit details
    Browse the repository at this point in the history
  53. test-smartlog: avoid using rev numbers

    Summary: Migrated by `./fix-revnum.py`.
    
    Reviewed By: DurhamG
    
    Differential Revision: D23036082
    
    fbshipit-source-id: cf456b3625e39329c817c696691494dc6725bc22
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    47048cc View commit details
    Browse the repository at this point in the history
  54. smartlog: migrate some revset calculation to a faster path

    Summary:
    Detect the "segments" backend and calculate the revset differently.
    
    Practically, with collapse-obsolete disabled, the time of related revset
    calculation drops from 0.14s to 0.03s in my fbsource repo.
    
    The `obsolete()` set calculation is expensive (0.4-0.6s) and a bit more
    expensive with the new DAG APIs, which will be addressed in upcoming
    changes. EDIT: Addressed by D23036063.
    
    Reviewed By: DurhamG
    
    Differential Revision: D23036055
    
    fbshipit-source-id: 71140a88599cc68bfa90d564c786da89b3ebd38b
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    7a78f7b View commit details
    Browse the repository at this point in the history
  55. configs: fix osx test runs

    Summary:
    OSX doesn't support touch -d. Let's just skip that part of the test on
    that platform. This fixes the OSX build.
    
    Reviewed By: singhsrb
    
    Differential Revision: D23253475
    
    fbshipit-source-id: 0eccb884cbdd4bf0a4068fbf943ba7dac9df4e04
    DurhamG authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    180ad7e View commit details
    Browse the repository at this point in the history
  56. Updating submodules

    Summary:
    GitHub commits:
    
    facebook/fbthrift@07f7124
    
    Reviewed By: jurajh-fb
    
    fbshipit-source-id: 4226a740b5e431e54f5115a79f878ef139c5ab38
    svcscm authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    f01f617 View commit details
    Browse the repository at this point in the history
  57. revset: optimize revset functions using rust fast paths

    Summary:
    Add alternative paths will be faster if changelog2 is used, since they are
    backed by native paths.
    
    Add a config option to disable the fast paths if they cause issues.
    
    Reviewed By: DurhamG
    
    Differential Revision: D23036074
    
    fbshipit-source-id: 489b6eac64148867c209d595623d0b9c21ad1d5a
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    2767501 View commit details
    Browse the repository at this point in the history
  58. gitdag: crate to build segmented dag from git history

    Summary:
    Read git commit graph and migrate them to `dag::Dag`.
    
    This allows using Rust dag abstractions on the git
    commit graph.
    
    Reviewed By: DurhamG
    
    Differential Revision: D23095471
    
    fbshipit-source-id: 2163701350ce82ce6e97074e56ad5877f3c9c158
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    575fb57 View commit details
    Browse the repository at this point in the history
  59. hgcommits: use concrete error types

    Summary: Migrate to concrete types so it can be typechecked.
    
    Reviewed By: DurhamG
    
    Differential Revision: D23095469
    
    fbshipit-source-id: 27c6da30ca8a1329df544cd2ded7d9734593e48a
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    92ede8b View commit details
    Browse the repository at this point in the history
  60. hgcommits: add gitsegments backend

    Summary:
    The backend translates git commit graph to segments. It's useful for
    benchmarking on git commit graphs.
    
    Reviewed By: DurhamG
    
    Differential Revision: D23095470
    
    fbshipit-source-id: 21a28869e91ef8f38bbf9925443eb4ac26f05e3d
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    0aeb52a View commit details
    Browse the repository at this point in the history
  61. changelog2: initial support for segmented git changelog

    Summary:
    The immediate goal is to run benchmarks on a commit graph provided by a git
    repo without converting a whole (large) repo from git to hg. Note git repos can
    be cloned in a shallow way so it only contains the commit graph. For example:
    
      git clone https://github.com/torvalds/linux --filter=tree:0 -n
    
    Note: The above command writes repositoryformat=1 in `.git/config`
    which is not supported by libgit2. Manually editing it to repositoryformat=0
    would enable libgit2 to read it for this crate's use-case.
    
    In the longer term we might want to extend the support so refs/trees/files can
    be read/written directly via the git repo based on this work. However that's
    currently beyond scope.
    
    Reviewed By: DurhamG
    
    Differential Revision: D23095467
    
    fbshipit-source-id: 868beb0c7de60453b47962639863eb8f7e3f5753
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    c82c7dc View commit details
    Browse the repository at this point in the history
  62. changelog2: add SHA1 verification

    Summary: Ensure that the commit text is verified, but do not verify git hashes.
    
    Reviewed By: DurhamG
    
    Differential Revision: D23095464
    
    fbshipit-source-id: e62341f6c7258c6f18b7cc75088c25dfc7040ab1
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    949598d View commit details
    Browse the repository at this point in the history
  63. dag: fix fuzz tests

    Summary:
    The fuzz tests need `TestContext::id_dag()`, which was removed by D20471712 (facebook@1fb5acf).
    Restore it so fuzz tests can run. This is mainly to check the new `range`
    function.
    
    The `range` fuzz test does find an issue caused by `>` written as `>=`
    relatively quickly.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23106176
    
    fbshipit-source-id: e9540cc932503a9d54246d24c70bac829fcb13df
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    d25a767 View commit details
    Browse the repository at this point in the history
  64. Updating submodules

    Summary:
    GitHub commits:
    
    facebook/fbthrift@cb9cdc2
    facebook/proxygen@88cd0b8
    
    Reviewed By: jurajh-fb
    
    fbshipit-source-id: a860a5a46fccf0a7c77a7c89c9c4f3e0a87de406
    svcscm authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    242743b View commit details
    Browse the repository at this point in the history
  65. add undelete workspace command

    Summary: The command is needed to restore a deleted workspace
    
    Reviewed By: markbt
    
    Differential Revision: D23250376
    
    fbshipit-source-id: e24a7cbc0aad004291853b4c34d7474789aa9c2b
    Liubov Dmitrieva authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    16ba1fc View commit details
    Browse the repository at this point in the history
  66. Updating submodules

    Summary:
    GitHub commits:
    
    facebook/folly@91a2c0c
    facebook/mcrouter@6be67b4
    facebook/rocksdb@a1b5484
    
    Reviewed By: jurajh-fb
    
    fbshipit-source-id: 6f5da4baf85787d8e812b0626145997629748e42
    svcscm authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    5709cca View commit details
    Browse the repository at this point in the history
  67. test-git-changelog: fix the test on Windows

    Summary:
    Use `git config core.autocrlf false` to silent warnings like:
    
    ```
       $ git add alpha
    +  warning: LF will be replaced by CRLF in alpha.
    +  The file will have its original line endings in your working directory
    ```
    
    Reviewed By: sfilipco
    
    Differential Revision: D23270146
    
    fbshipit-source-id: af3bf241edb9f615bcc285b51cc491385f208039
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    65659eb View commit details
    Browse the repository at this point in the history
  68. hgcommands: show milliseconds on RUST_LOG output

    Summary: This makes it a bit easier to track down perf issues printed by RUST_LOGs.
    
    Reviewed By: sfilipco
    
    Differential Revision: D23095463
    
    fbshipit-source-id: 78221a1992389f512fac6e6e633be6d19123e04a
    quark-zju authored and quark committed Aug 21, 2020
    Configuration menu
    Copy the full SHA
    6e3b0d3 View commit details
    Browse the repository at this point in the history