sapling/eden/mononoke
Stanislau Hlebik ae737fe22c mononoke: change fetch_bonsai_range semantics
Summary:
Previously fetch_bonsai_range returned all commits between `ancestor` and
`descendant`, but `ancestor` was included. This is usually not what we want and
it might be surprising and can lead to subtle bugs. As an example, next commit
in the stack might have failed pushrebases when it shouldn't do that.

This diff changes the semantic of the function to exclude an ancestor. This
function was used for 2 use cases:
1) Find changed files. find_rebased_set function was manually removing the
ancestor anyway, so there's no change in behaviour
2) To check that there are no case conflicts. Previously we were checking the
case conflicts with ancestor included, but that wasn't necessary. To prove that
let's go over the two possible situation:
i) This is a first iteration of the pushrebase

```
     CB
SB    |
|    ...
...  CA
SA
|  /
root

```

in that case files introduced by root commit will be used to check if we have
case conflicts or not. But this is not necessary, because pushrebase assumption
is that CA::CB should not introduce any new case conflicts. Besides, even if
they added a case conflict then checking with just the files that were changed by root commit is
not enough to verify that.
Similar logic goes to SA::SB commits. Checking if root has any conflicts with
SA::SB commits doesn't make sense.

ii) This is not the first iteration of the pushrebase

```
     CB
SB    |
|    ...
...  CA
SA
|
O <- latest pushrebase attempt
...     <- we rebased over these commits on the previous attempts

|  /
root

```

In this case it's even easier. Commit O was verified on the previous iteration,
so no need to add it here again.

Reviewed By: aslpavel

Differential Revision: D24110710

fbshipit-source-id: 90dff253cba0013e9d5e401474132a152d473cae
2020-10-05 12:49:04 -07:00
..
benchmark blobrepo: instantiate segmented changelog as an attribute 2020-09-02 17:20:42 -07:00
blobimport_lib Update formatter to rustfmt 2.0 2020-09-09 07:52:33 -07:00
blobrepo mononoke: remove assert_present from Blobstore trait 2020-10-01 01:23:52 -07:00
blobrepo_utils move existing changeset derivation logic to mercurial_derived_data 2020-09-09 07:56:32 -07:00
blobstore Make SQLBlob overwrite on put rather than ignoring 2020-10-02 10:41:12 -07:00
blobstore_sync_queue commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
bonsai_git_mapping improve error messages for mapping length errors 2020-09-21 08:39:12 -07:00
bonsai_globalrev_mapping improve error messages for mapping length errors 2020-09-21 08:39:12 -07:00
bonsai_hg_mapping Update formatter to rustfmt 2.0 2020-09-09 07:52:33 -07:00
bookmarks mononoke_api: most bookmark movements errors are request errors 2020-09-21 08:39:12 -07:00
bulkops Regenerate all Cargo.tomls after upgrade to futures 0.3.5 2020-07-06 20:49:43 -07:00
cache_warmup Regenerate all Cargo.tomls after upgrade to futures 0.3.5 2020-07-06 20:49:43 -07:00
changesets Update formatter to rustfmt 2.0 2020-09-09 07:52:33 -07:00
cmdlib commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
cmds commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
commit_rewriting RFC: [mononoke] make unsafe_sync_commit accept version override 2020-10-05 02:02:13 -07:00
common common: add iterhelpers 2020-10-04 23:51:03 -07:00
derived_data mononoke: remove get_fsnode_id 2020-09-18 02:52:47 -07:00
edenapi_server edenapi: Hide edenapi wire types from externally visible API 2020-09-23 17:27:08 -07:00
fastreplay mononoke: deprecate preamble in favor of metadata 2020-09-15 10:28:38 -07:00
filenodes Remove crate_root from Rust dependency info 2020-08-31 14:43:24 -07:00
filestore commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
git move existing changeset derivation logic to mercurial_derived_data 2020-09-09 07:56:32 -07:00
gotham_ext gotham_ext: ^ is not ** 2020-09-28 03:41:24 -07:00
hgcli mononoke/hgcli: log hgcli server data to Scuba 2020-10-01 05:22:47 -07:00
hgproto commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
hook_tailer move interngraph token from disk to keychain service 2020-10-02 06:56:49 -07:00
hooks commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
lfs_import_lib autocargo: regenerate 2020-05-19 16:08:40 -07:00
lfs_protocol mononoke: try to compress values if they above cachelib limit 2020-06-20 01:05:54 -07:00
lfs_server gotham_ext: make StreamBody take an infallible byte stream 2020-09-18 22:49:55 -07:00
load_limiter Regenerate all Cargo.tomls after upgrade to futures 0.3.5 2020-07-06 20:49:43 -07:00
manifest Update formatter to rustfmt 2.0 2020-09-09 07:52:33 -07:00
mercurial commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
metaconfig Added S3 blobstore 2020-09-22 04:15:34 -07:00
microwave mononoke: allow logging censored scuba accesses to file 2020-09-04 07:37:14 -07:00
mononoke_api scs xrepo-lookup: accept candidate selection hint 2020-10-01 17:33:23 -07:00
mononoke_commitcloud_bookmarks_filler add setup runbook to README 2020-09-29 05:37:30 -07:00
mononoke_hg_sync_job commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
mononoke_types third-party/rust: bump third-party code versions 2020-09-26 18:13:40 +02:00
mutable_counters Update formatter to rustfmt 2.0 2020-09-09 07:52:33 -07:00
newfilenodes commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
permission_checker mononoke: deprecate preamble in favor of metadata 2020-09-15 10:28:38 -07:00
phases shed/sql: make queries! macros work with new Rust mysql client 2020-09-11 06:33:37 -07:00
pushrebase mononoke: change fetch_bonsai_range semantics 2020-10-05 12:49:04 -07:00
reachabilityindex impl LCAHint for Arc<impl LCAHint> 2020-09-11 16:56:13 -07:00
regenerate_hg_filenodes mononoke/regenerate_hg_filenodes: make regenerate_hg_filenodes public (#39) 2020-07-30 06:50:54 -07:00
repo_client commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
repo_import commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
revset Prepare for rustfmt 2.0 2020-09-08 07:33:16 -07:00
scs_server scs xrepo-lookup: accept candidate selection hint 2020-10-01 17:33:23 -07:00
segmented_changelog Update formatter to rustfmt 2.0 2020-09-09 07:52:33 -07:00
server adding per repo ACL checking 2020-09-24 08:12:35 -07:00
sshrelay commit_rewriting: use is_empty() where possible 2020-10-04 10:03:42 -07:00
tests mononoke/integration tests: use $LOCALIP instead of ::1 or 127.0.0.1 (#65) 2020-10-05 07:51:19 -07:00
time_window_counter mononoke/lfs_server: popularity: add ODS counters, timeouts and tests 2020-07-15 03:39:23 -07:00
tunables mononoke: add a tunable for ratio of master fallbacks 2020-10-01 01:06:28 -07:00
unbundle_replay move interngraph token from disk to keychain service 2020-10-02 06:56:49 -07:00
walker mononoke: add error context to file content scrub 2020-09-22 05:26:23 -07:00
Cargo.toml common: add iterhelpers 2020-10-04 23:51:03 -07:00
README.md mononoke: add README.md and the missing pieces for supporting cargo (#13) 2020-02-13 00:12:36 -08:00

Mononoke

Mononoke is a next-generation server for the Mercurial source control system, meant to scale up to accepting thousands of commits every hour across millions of files. It is primarily written in the Rust programming language.

Caveat Emptor

Mononoke is still in early stages of development. We are making it available now because we plan to start making references to it from our other open source projects.

The version that we provide on GitHub does not build yet.

This is because the code is exported verbatim from an internal repository at Facebook, and not all of the scaffolding from our internal repository can be easily extracted. The key areas where we need to shore things up are:

  • Full support for a standard cargo build.
  • Open source replacements for Facebook-internal services (blob store, logging etc).

The current goal is to get Mononoke working on Linux. Other Unix-like OSes may be supported in the future