Commit Graph

321 Commits

Author SHA1 Message Date
Mateusz Kwapich
75c069b199 heurestics to resolve a obs/non-obs ambiguity
Summary:
This particular situation happens in the wild when the amend doesn't rebase
because of conflicts and users work on their stack using `hg prev` and `hg next
--rebase`. In this case when there's non-obsolete child that's always the child
we want to choose.

We're verbose about what we're doing so it's not confusing to the users.

Reviewed By: quark-zju

Differential Revision: D14560584

fbshipit-source-id: a453c0301a5156eea0d19ceb40d9a64e80b7fca7
2019-03-22 03:38:52 -07:00
Jun Wu
cb0ad2f23a smartlog: move ancestor calcuation to smartlog revset
Summary:
Move the logic of adding the common ancestor to make the DAG connected to the
smartlog revset. This makes it handy for power users to just use `log` and
`smartlog` revset to get interesting graphs. `sl` is now a very thin wrapper
around the `smartlog` revset function.

Reviewed By: DurhamG

Differential Revision: D14461520

fbshipit-source-id: 78e3991059c9da7ef4410e252a2b69b1e54918cb
2019-03-21 17:33:45 -07:00
Jun Wu
2fef3bf971 smartlog: wrap user-provided revs with smartlog revset function
Summary:
Wrap user-provided revs with `smartlog` revset function. This makes more sense
together with the next change.

The test change is because "parents" of drafts are selected.

Reviewed By: DurhamG

Differential Revision: D14461519

fbshipit-source-id: 2a48931680f0dc50b80b87cea827152c21cf4791
2019-03-21 17:33:45 -07:00
Jun Wu
524fc6b566 smartlog: remove ancestorcache
Summary:
With the last change, the benefit of ancestorcache is limited.  Therefore just
remove it to reduce complexity. This also makes `smartlog` closer to `log`.

Reviewed By: DurhamG

Differential Revision: D14461523

fbshipit-source-id: eb108a09e12b07e5012f70aef0b2940b07d746fb
2019-03-21 17:33:45 -07:00
Jun Wu
2a2d39e021 smartlog: use revset to calculate ancestors
Summary:
Use the `ancestor` revset to replace the adhoc ancestor calcuation. This makes
the code much shorter.

It's in theory slightly different from the old logic. But there are no test changes.

The new code can no longer take advantage of ancestorcache. Fortunately, with
optimizations, it is pretty close to a fully warmed up ancestorcache. Of course,
it's much faster than a cold ancestorcache.

Before (ancestorcache disabled):

  quark@devvm33994 ~/fbcode/scm/hg % ./hg sl -T '.' --time --pager=off --all --config smartlog.useancestorcache=0  >/dev/null
  time: real 75.050 secs (user 52.540+0.000 sys 22.520+0.000)

Before (ancestorcache warmed up):

  quark@devvm33994 ~/fbcode/scm/hg % ./hg sl -T '.' --time --pager=off --all --config smartlog.useancestorcache=1 >/dev/null
  time: real 2.670 secs (user 2.550+0.000 sys 0.100+0.000)

After:

  quark@devvm33994 ~/fbcode/scm/hg % ./hg sl -T '.' --time --pager=off --all --config smartlog.useancestorcache=0  >/dev/null
  time: real 2.970 secs (user 2.760+0.000 sys 0.160+0.000)

There are 5110 commits in the above smartlog graph.

Reviewed By: DurhamG

Differential Revision: D14461524

fbshipit-source-id: 68bee3c4397be833e381c582c20a849b768b144d
2019-03-21 17:33:45 -07:00
Jun Wu
dfb1e22f42 smartlog: change masterfallback to null if --rev is passed
Summary:
Previously, the default master is `.^` when `--rev` is passed. Change it to
null so we're not adding unexpected "master" if `--rev` is used.

Reviewed By: DurhamG, sfilipco

Differential Revision: D14516266

fbshipit-source-id: ce93f5e905d674c21cc07bb5a2957d0fad302722
2019-03-21 17:33:45 -07:00
Durham Goode
1186282722 workers: flush mutable data before forking workers
Summary:
We encountered a bug where if a file descriptor was not flushed prior
to forking the process, then both processes would end up flushing the same data
to the file, resulting in duplicate data and a corrupt file.

The real fix is to stop using fork, but for now let's address the most visible
problem by flushing pack files before forking.

Reviewed By: kulshrax

Differential Revision: D14569005

fbshipit-source-id: e002abe72c8014cbe49ccffab6159f8372affdb0
2019-03-21 16:20:36 -07:00
Liubov Dmitrieva
f30ce27cd8 commitcloud: deprecate filtration of the push side
Summary: Deprecate due to complexity of the code.

Reviewed By: mitrandir77

Differential Revision: D14561405

fbshipit-source-id: 6184317f549c0ab84335b09c4b48efccdf31f7fc
2019-03-21 10:27:13 -07:00
Aida Getoeva
220e4c9879 add loose files size and count metrics
Summary: Added new metrics to log loose files size and number during repack. We need it to understand how much better the pack files work in terms of disc and memory usage.

Reviewed By: markbt

Differential Revision: D14544811

fbshipit-source-id: 5a4d894bd5a3358c7e0f93ecc9db5e9f2c2f2372
2019-03-21 09:59:44 -07:00
Liubov Dmitrieva
805a3aee56 add logic for safe switching cloud sync between Mercurial and Mononoke and back
Summary:
Basically we should check that the commits have been backed up.
If this is not true and the commits are local we can just back them up.
If they are not known by this repo, pull from the old one and then back them
up.

Reviewed By: markbt

Differential Revision: D14508239

fbshipit-source-id: 3fdd83335cb937b153510ec3c7510ecd1167d0ca
2019-03-21 09:02:23 -07:00
Jun Wu
b40af5890c metrics: add metrics about fetching remote data
Summary: Log data about round-trip count, and object count for files, trees, and SSH calls.

Differential Revision: D14515776

fbshipit-source-id: cce416fd7dccdad3c73a9f1751a04ddac0d2c507
2019-03-20 22:49:18 -07:00
Jun Wu
ea16e76336 metrics: make ui.metrics.gauge log to the sampling extension
Summary:
Make it possible to use `ui.metrics.gauge` to collect metrics for a single
command, via the sampling extension.

Differential Revision: D14515775

fbshipit-source-id: e8a53549b00c1bc7b6509a5990a51d955d767d7e
2019-03-20 22:49:18 -07:00
Jun Wu
0dfbf77f04 extensions: always enable the sampling extension
Summary: This makes sure `ui.log` always runs through the sampling code path.

Differential Revision: D14515774

fbshipit-source-id: 585cd14eaecda12a9c2dd6ed003f0a457d67daf1
2019-03-20 22:49:18 -07:00
Jun Wu
6a4c2ea9b5 metrics: slightly change the API
Summary:
Before this patch, metrics was designed to send stats to a global counter. I'd
like to use it for stats local to the current command (ex. count of file
fetching, count of round-trips, etc).

Change the API so "entity=None" forbids stats from sending to a global counter.

Differential Revision: D14515779

fbshipit-source-id: b5b3b040d674c71f467153c308b56aa6f506eb0c
2019-03-20 22:49:18 -07:00
Jun Wu
d47e205e87 ignore: disable hgignore by default
Summary:
Disable parsing `.hgignore` and related fileset `hgignore()` by default. They can
still be enabled via configuration. The plan is to completely remove them
later.

A replacement for `hgignore()` fileset was added as `gitignore()`.

The `hgignore()` fileset seems to be only used by zertosh in the past 3 months.

Reviewed By: singhsrb

Differential Revision: D14543232

fbshipit-source-id: f2385062a0e816331f693239f62448979876078a
2019-03-20 22:32:58 -07:00
Stefan Filip
5a8929ed08 extlib: add cargo workspace
Summary: This simplifies testing setup for all crates in CI.

Reviewed By: quark-zju

Differential Revision: D14543989

fbshipit-source-id: 83693fada6e64b7c21fd89a880d6452d811ea90d
2019-03-20 19:56:14 -07:00
Durham Goode
ccf3279f33 hggit: stop git-updatemeta walk when we finish commits with extras
Summary:
Part way through our hg-git repo's history we started adding the git
hash to the extras so it was easier to generate the map files. Let's make
git-updatemeta stop when it passes this boundary.

This is useful for speeding up internal infrastructure that needs to generate
the mapfile from scratch.

Reviewed By: kulshrax

Differential Revision: D14542354

fbshipit-source-id: 7c17fb1b1439f9b4c0c0acf8b5a85790d02a0861
2019-03-20 14:33:58 -07:00
Durham Goode
3be0c68bfe hggit: improve git-updatemeta performance
Summary:
git-updatemeta performance starts to matter when we have to run
it from scratch in new containers. Let's optimize this a bit. In a large repo
this improves the speed by 30%.

Reviewed By: quark-zju

Differential Revision: D14542339

fbshipit-source-id: 34f06369543b8d4d22838fd4e3878c6bec9a597c
2019-03-20 14:33:58 -07:00
Mark Thomas
4ff8d42e03 commitcloud: improve performance of backup revsets
Summary:
Improve the performance of the revsets that calculate which commits to back up
by limiting them to consider only the non-obsolete commits that are also draft.

Reviewed By: quark-zju

Differential Revision: D14544883

fbshipit-source-id: db9ed4a7abd81956762f56140321242dbccf2df0
2019-03-20 13:26:08 -07:00
Xavier Deguillard
209816d791 remotefilelog: override repo.close to close repo.fileservice
Summary:
Not every command requires a valid repo, but when one is used, it is always
properly closed. Hence, let's simply wrap the repo.close method instead of
wrapping around the runcommand function.

Reviewed By: kulshrax

Differential Revision: D14531515

fbshipit-source-id: bcdbe6530c94041c1185b18570846ba609b5f605
2019-03-20 11:30:36 -07:00
Mark Thomas
94f7ff0991 commitcloud: add detection of workspace oscillation
Summary:
Attempt to detect oscillation of commit cloud workspaces by comparing the new
state after the current sync with the state before the previous application of
cloud changes.  If the version number is incremented by 1, the workspace is
brought back to the same state, and less than a minute has passed since the
last time that commit cloud sync ran, abort the current sync step.

This happens after the commits have been backed up, but before the new cloud
workspace is synced to the commit cloud service.  This prevents further
oscillation whilst ensuring the user's commits are still backed up.

Reviewed By: quark-zju

Differential Revision: D14540355

fbshipit-source-id: 20e4b0333f5a7e34b512967a03099625f62ff9d5
2019-03-20 11:24:22 -07:00
Mark Thomas
5cbf536bf3 infinitepushbackup: use better revset for determining what to back up
Summary:
Change how infinitepush determines what to back up.

Commits to back up are all draft ancestors of non-obsolete commits, *plus* all
draft ancestors of bookmarked commits, which may be obsolete.

Previously, in a stack of the form:
```
  | x B (obsolete, bookmarked)
  | |
  | o A
  |/
  o
```
neither A or B would be backed up, despite normally being visible to the user.

Reviewed By: liubov-dmitrieva

Differential Revision: D14540356

fbshipit-source-id: 0d6ad330c53c818b08f736a9af64704cf0be7cd5
2019-03-20 11:24:22 -07:00
Mark Thomas
29d2bc3201 commitcloud: use better revsets for determining what to sync
Summary:
Change how commit cloud determines what to sync and what has been successfully
synced when some commits fail to push.

Commits to sync are all draft ancestors of non-obsolete commits, *plus* all
draft ancestors of bookmarked commits.

Commits to sync when only some commits have successfully been pushed are
ancestors of the newly pushed heads, *plus* ancestors of the commits to be
synced that were successfully synced last time.

Reviewed By: liubov-dmitrieva

Differential Revision: D14540357

fbshipit-source-id: c082a2f2822f8bce4cd2bbac93a70e27e2ffaa59
2019-03-20 11:24:22 -07:00
Liubov Dmitrieva
96ec46f70d infinitepush - fix tests
Summary:
Now at the beginning of pushbackup we always check what the server already
have, this triggered changes in the output of the tests.

Before the limit of the check was 3 heads. I made it to 0 by default earlier and broke tests. Now we have fast way to check on the server side, so the limit 3 was not good. There is no reason to re-back up those.

Basically before we could backup the same thing again.

Reviewed By: markbt

Differential Revision: D14539582

fbshipit-source-id: 569b354580128c944a95fa64c0c964304a2cca8b
2019-03-20 07:57:36 -07:00
Xavier Deguillard
98dab40761 ui: do not enable SIGPIPE when running the pager
Summary:
SIGPIPE is a weird signal. It is sent to a process that tries to write to a
pipe (or socket) whose other end has been closed. On top of the signal being
sent, the write will also fails with EPIPE, and thus SIGPIPE is sometimes used
to avoid checking the return status of write (!!!) and to gracefully exit.

In Mercurial, the SIGPIPE is used to raise an exception to do exactly this, but
it also appears that the writes to stdout/stderr are already checking the
return value and doing the right thing, hence SIGPIPE is unecessary.

In the case of Mercurial, catching SIGPIPE has another interesting behavior.
The command `hg log -p` has a different behavior once the pager is killed
depending on whether HGPLAIN is set or not. When unset, `stderr` is also
redirected to the pipe, and thus any logs printed after the pipe is closed will
force Mercurial to quit. While this is the expected behavior in most cases,
it is not when the logs are happening during cleanup, as they will effectively
abort the teardown process.

Overall, it's better to just not install a SIGPIPE handler, so let's remove it.

Reviewed By: kulshrax

Differential Revision: D14528603

fbshipit-source-id: f51fb13016cc7b8d622e91c60d4c5286c7b404e5
2019-03-19 16:09:18 -07:00
Jun Wu
3039c8dbfb util: trust st_nlink for known filesystems
Summary:
The check was added to "distrust" st_nlink, to workaround issues on CIFS [1].
The check only works for filesystem supporting hardlinks.

If a filesystem is marked as "st_nlink cannot be trusted", then vfs.py will take
a conservative approach to break hardlinks when writing, by copying the file
followed by a rename.

Therefore, filesystems without hardlink support (esp. edenfs) would go through
the slow path - every file written via vfs.py would be copied unnecessarily.

Fix it by skipping the check for known filesystems, including edenfs.

[1]: https://bz.mercurial-scm.org/1866

Reviewed By: DurhamG

Differential Revision: D14527370

fbshipit-source-id: 579111f5c72fa3d016f98c248b29c96afdc59086
2019-03-19 15:39:19 -07:00
Liubov Dmitrieva
fa5c6b56af fix test for infinitepush, the remote check in shouldn't be fatal
Summary:
the test have been broken

```
 buck test mode/dev scm/hg/fb/tests:fb_run_tests -- 'test_sl_output_t \(scm\.hg\.fb\.tests\.unittestify\.hgtests\)'
```

In the test the remote is not defined, so the test failed to check with the
server what has been backed up

Reviewed By: ikostia

Differential Revision: D14521930

fbshipit-source-id: 3363bb3055941decdfc65165860e1ef25a7a7891
2019-03-19 09:45:42 -07:00
Liubov Dmitrieva
0f92ee62d4 pushbackup - now the overhead of checking is minimal, so let's always
Summary:
This is particulary useful for `hg cloud sync` when it calls pushbackup in the
background to the secondary storage at the end of cloud sync.

Pushbackup is not smart enough, so it will back up again what we just pulled from cloud sync.
However, all those commits are probably already backed up on the secondary
storage on another machine while cloud sync.

Reviewed By: singhsrb

Differential Revision: D14386616

fbshipit-source-id: e62ed0afb89c28fe6880346077c279e6705da602
2019-03-19 07:29:15 -07:00
Liubov Dmitrieva
1aa918af76 infinitepush: use faster server side check of what has been backed up
Summary:
Using lookup command is slow because if something is not backed up, it throws
exception and we have to re-establish ssh connection

Differential Revision: D14386150

fbshipit-source-id: 8d5caea93516571ff36c80adb6406b0347d90384
2019-03-19 07:29:15 -07:00
Xavier Deguillard
23b335785f remotefilelog: enable buffering of reads from memcache
Summary:
Reading a line over a pipe involves reading every character of the line
individually. This is extremely inefficient and slow, which cause prefetch to
be overly slow when most of the data isn't in memcache.

Using buffered reads tries to read 4096 bytes at a time, drastically reducing
the cost of reading a missing path/node pair from memcache.

Reviewed By: ikostia

Differential Revision: D14507063

fbshipit-source-id: e0910d7a303e15fe2d3c61fe2739e6c13370058f
2019-03-18 13:03:33 -07:00
Harvey Hunt
9f82b1f8e8 hg: Add ability to check repo lock status from hgsql
Summary:
As part of the mononoke write path rollout we want to be
able to dynamically block writes to a repo. This is implemented as
a table in hgsql (repo_lock) that both hg and mononoke can read, but
will only be updated by scmadmin.

Expose a function that can be used by in-process hooks to check if a repo is
locked for mercurial.

Reviewed By: quark-zju

Differential Revision: D14279169

fbshipit-source-id: f8bb4afeeeda67796cf806ab7f3fe42f4089818f
2019-03-18 09:42:37 -07:00
Liubov Dmitrieva
c318e1f569 remove unused code
Summary: This is removal of unused code that left from D14455360

Reviewed By: ikostia

Differential Revision: D14502837

fbshipit-source-id: df1912c7997847b0628b492b3fe735d5e3d7f201
2019-03-18 09:13:22 -07:00
Johan Schuijt-Li
3e436ef80b util: increase chunk size from 128KB to 2MB
Summary:
On connections that might experience higher latency the throughput for a clone
is easy to spike, raising the chunk size results in more consistent throughput.

Given that hardware these days has plenty of memory, this change shouldn't make
any significant difference either.

Reviewed By: farnz

Differential Revision: D14502443

fbshipit-source-id: 0e90f955304e9955df0ec69b5733db7c34b09e83
2019-03-18 07:30:23 -07:00
Jun Wu
3ca494b062 revset: optimize ancestor revset function
Summary:
Change `ancestor` to send 24 revs to the native ancestor logic at a time,
instead of 2 revs at a time.

This makes it much faster when calculating ancestor of many commits.

Before:

  quark@devvm33994 ~/fbcode/scm/hg % hg.real log -r 'ancestor(limit(draft(),6000))' -T '{node}\n' --time --hidden
  ca4beab06459e016ac1b4041400029165b701afa
  time: real 66.620 secs (user 44.800+0.010 sys 21.840+0.000)

After:

  quark@devvm33994 ~/fbcode/scm/hg % ./hg log -r 'ancestor(limit(draft(),6000))' -T '{node}\n' --time --hidden
  ca4beab06459e016ac1b4041400029165b701afa
  time: real 3.470 secs (user 2.380+0.000 sys 1.000+0.020)

This also affects `merge.preferancestor`. That's a dangerous config option and
seems fine to be ignored in the revset implementation.

Reviewed By: DurhamG

Differential Revision: D14461521

fbshipit-source-id: ec00921aece0adc6aaca49e5580bff52784c4ca5
2019-03-14 20:14:37 -07:00
Jun Wu
770a8f102c smartlog: clean up master logic
Summary:
Use "interestingmaster()" to make it easier to see how "master" gets decided.

Change the type of "master" argument taken by "smartlog" revset from string to
revset.  This is more consistent with other revset functions.

Reviewed By: DurhamG

Differential Revision: D14436003

fbshipit-source-id: 5aa166b523f36672f77dc4f161ae8d64c2b50579
2019-03-14 20:14:37 -07:00
Jun Wu
728438892a smartlog: add interestingmaster() revset
Summary:
Similar to `interestingbookmarks()`, this exposes more smartlog logic to the
user.

Reviewed By: DurhamG

Differential Revision: D14436004

fbshipit-source-id: bd4ef1dcee8e7b29c43ce43fe6c1a3e7b5286774
2019-03-14 20:14:37 -07:00
Jun Wu
4c4ec3513a smartlog: change smartlog revset to take heads
Summary:
Make `heads` in `smartlog` customizable. This makes smartlog more flexible.
Instead of using the default selection, the user can choose draft branches, and
potentially pass in `interestingbookmarks()` to include bookmarks and remote
bookmarks. For example, `smartlog(.::)` shows the current branch and the public
commit it bases on.

Drop `recentdays` as it can now be expressed using `heads` directly. See the
test change.

This would also hopefully make test-fb-hgext-smartlog-hide-before.t stable,
as it no longer uses `time.time()`.

Reviewed By: DurhamG, sfilipco

Differential Revision: D14436007

fbshipit-source-id: 5e0a76e4424b01312fef02fae23a3abd74e863c6
2019-03-14 20:14:37 -07:00
Jun Wu
f0dcadfa28 smartlog: rewrite part of the logic using efficent revset
Summary:
The old code basically selects ancestors of heads.

Rewrite the logic using revsets. Assuming we're only interested in ancestors
that are drafts, we can take advantage of `draft() & ::x` optimization.

The new logic also assumes master rev is public. Otherwise it can be slightly
different from the old logic.

The new code is much faster on my repo:

New code:

  quark@devvm33994 ~/fbcode/scm/hg % ./hg log -r 'smartlog()' --hidden -T . --time | wc -c
  time: real 0.630 secs (user 0.550+0.000 sys 0.030+0.000)
  6716

Old code:

  quark@devvm33994 ~/fbcode/scm/hg % hg.real log -r 'smartlog()' --hidden -T . --time | wc -c
  time: real 5.470 secs (user 3.920+0.000 sys 1.550+0.000)
  6716

This might make the ancestorcache hack (D5135746) unnecessary.

Reviewed By: DurhamG, sfilipco

Differential Revision: D14436008

fbshipit-source-id: 3c3bf47ccb67ea0e238542995009da9b9250b43b
2019-03-14 20:14:37 -07:00
Jun Wu
cf609702c4 smartlog: expose interestingbookmarks revset
Summary:
The `smartlog()` revset does a lot of things.
Add a new revset `interestingbookmarks()` to expose part of the smartlog features.

Reviewed By: DurhamG, sfilipco

Differential Revision: D14436006

fbshipit-source-id: 15b8d203b6547e63f8d062660ad27bdbc25b2c1c
2019-03-14 20:14:36 -07:00
Jun Wu
fa37745dd0 smartlog: change unmaned head query to heads(draft())
Summary:
The code falls back to head() if there are no remotenames. We don't need that
behavior. Therefore just simplify it by always using `heads(draft())`.

Reviewed By: DurhamG

Differential Revision: D14436009

fbshipit-source-id: 25c2d245ed64a29e3e1677ededb4c2ba7b4a3ceb
2019-03-14 20:14:36 -07:00
Arun Kulshreshtha
260d3c9c44 remotefilelog: add required arguments to httprequestpacks
Summary: D14387734 added 2 new arguments to the `httprequestpacks` function, but didn't update the callsite to pass those arguments. This diff fixes the problem.

Differential Revision: D14468592

fbshipit-source-id: 7e573838916067fc2cc12204ea1da460eb3955c8
2019-03-14 20:08:04 -07:00
Durham Goode
ee7f2e0275 archive: prefetch remotefilelog files before executing archive
Summary:
Currently archive is almost useless because it fetches each file
one-by-one. Let's add prefetching.

Differential Revision: D14460880

fbshipit-source-id: 1f06e1ac9d03aae3ab27d3064f9fe6141051be06
2019-03-14 14:57:50 -07:00
Liubov Dmitrieva
7f2828e4a0 commit cloud code clean up
Summary:
In preparation to support Mononoke clean up the features that are Mercurial
specific and Mercurial infinitepush implementation specific.

For Mononoke migration we will to write a whole new set of logic what to do if
the "infinitepush" path has been changed. So, clean up is useful before
writing this logic.

Reviewed By: singhsrb

Differential Revision: D14455360

fbshipit-source-id: d15c3a9032b4888a1aa391da34ad5e499aba9a15
2019-03-14 10:41:48 -07:00
Saurabh Singh
3c301d160d phrevset: fix using diff numbers for WWW repository
Summary: See linked task for details.

Reviewed By: quark-zju

Differential Revision: D14448507

fbshipit-source-id: 07af703e2b28ca8423a0da309190698da6f61594
2019-03-13 18:35:09 -07:00
Saurabh Singh
d4c9456be9 fbconduit: fix resolving phabricator callsign for WWW
Summary: See the linked task for details.

Reviewed By: quark-zju

Differential Revision: D14448505

fbshipit-source-id: fc2efa71510b718c25a2cea3acf39663d280f19a
2019-03-13 18:35:09 -07:00
Saurabh Singh
cad659f28a hgext: reformat using black
Summary: See title

Reviewed By: quark-zju

Differential Revision: D14448508

fbshipit-source-id: ef0a2c443a64fc154e80bbb7bcd3545666c7f3fd
2019-03-13 18:35:09 -07:00
Saurabh Singh
6525966fd1 memcommit: enforce target parent to be original parent
Summary:
After going over the code review for D14332967, I have decided to keep
things simple for now and only allow making commits to same target parent as
the original parent. This was already the intention with the existing code.
Therefore, this commit just further enforces the requirement.

Reviewed By: quark-zju

Differential Revision: D14422351

fbshipit-source-id: 2f786fc3596b17c5020de9906adf8f22b50be4dd
2019-03-13 11:50:42 -07:00
Liubov Dmitrieva
93057c645f codeformat - remove weird looking + for string concat on the same line
Summary:
These was probably introduced by moving to black.

The changes in the diff were generated by script.

Reviewed By: mitrandir77, singhsrb

Differential Revision: D14439667

fbshipit-source-id: 54f6e0bdcc59c1c6deb4eea46dc6f865bcd48cf8
2019-03-13 11:40:26 -07:00
Saurabh Singh
5e33e6eafc memcommit: identify original parent and target parent as separate entities
Summary:
The code currently assumes that the target parent is the same as the
original parent by totally ignoring the original parent which can seem
surprising and more importantly, hinders supporting behaviors such as allowing
commits to a new parent. Therefore, this commit fixes the code to identify the
original and target parent separately.

Reviewed By: quark-zju

Differential Revision: D14422352

fbshipit-source-id: bc175f2fe636f9bf47a68f64c8efd52660e3b1b7
2019-03-13 10:07:32 -07:00
Saurabh Singh
6f84e1a07e fbconduit: fail gracefully when dealing with unknown revision
Summary: See linked task for details.

Reviewed By: quark-zju

Differential Revision: D14430008

fbshipit-source-id: f75823ec936ff14122753ef94d11132ac4d9a099
2019-03-13 09:58:30 -07:00
Mark Thomas
9fcabe0254 commitcloud: restore omitted bookmarks for hidden commits
Summary:
D14183009 made commit cloud accept cloud bookmarks for hidden commits, rather
that omitting them.  However, this only works for future bookmarks.  If the
bookmark was already omitted, then `_checkomissions` would not recover the
situation for the same reason.

Update `_checkomissions` to also allow cloud bookmarks on hidden commits.

Reviewed By: liubov-dmitrieva

Differential Revision: D14437656

fbshipit-source-id: 2372323022a59bfd4210bc76f39b9a74872d5efe
2019-03-13 07:33:58 -07:00
Xavier Deguillard
93a29ed8e7 remotefilelog: do not wait for hg_memcache_client to exit
Summary:
Now that hg_memcache_client will voluntarily exit when hg terminates, we no
longer need to wait for hg_memcache_client to finish before exiting hg.

Reviewed By: DurhamG

Differential Revision: D14396510

fbshipit-source-id: 7e73d9b70d481e58a0c47cd0f408580e6d548fd9
2019-03-12 15:09:56 -07:00
Saurabh Singh
f6eb9864da memcommit: allow specifying destination parents while serializing commits
Summary:
This is useful for testing the `memcommit` command as the clients can
specify different destination parents than the original parents of the commit.

Differential Revision: D14410213

fbshipit-source-id: 846e0d764b9606f00aed95995c694f379457eec7
2019-03-12 12:27:39 -07:00
Saurabh Singh
14081b0ae9 memcommit: use a better error message for disallowing unrelated roots
Summary:
Earlier message suggested the feature is not supported when in fact it
is allowed via a configuration.

Differential Revision: D14410214

fbshipit-source-id: 0ec2a22920417c378cf3ac596565f9d2fa5f6d5c
2019-03-12 12:27:38 -07:00
Xavier Deguillard
05226564c2 remotefilelog: run repack after prefetch
Summary:
Operations like `hg log -p` will inherently cause many requests to
hg_memcache_client. This will force many small packfiles to be created which
will significantly slow down future invocation of hg.

Now that `hg repack --incremental --packsonly` is fast, we can afford to run it
when mercurial exit after a prefetch operation was run.

Differential Revision: D14387735

fbshipit-source-id: 45f89f1120458c8b2471a1c55cafb6bc87263dd0
2019-03-12 10:51:57 -07:00
Xavier Deguillard
f4072c3d0a remotefilelog: split fetching data and history
Summary:
When using packfiles, history and data are in different files, and thus it's
possible to only fetch one.

For now, besides the requests coming from contentstore and metadatastore, both
will be fetched, as the code hasn't been audited to know whether we only want
history or data.

Differential Revision: D14387734

fbshipit-source-id: 6aafd477ff486b9316458ce0e80636152db45b89
2019-03-12 10:51:57 -07:00
Liubov Dmitrieva
1867f70c46 cloud sync + pushbackup: record remotepath to the local state
Summary:
For pushbackup it is needed to make hg rage more informative because we store
states for different paths separately anyway.

For cloud sync we will have to write some migration logic: if the remotepath
has been changed, we have to check what the server has to make sure everything
is backed up as cloud sync would expect.

Differential Revision: D14420713

fbshipit-source-id: 2046e9d7b16291a49d1bc40da5285de58017f4f2
2019-03-12 09:34:50 -07:00
Xavier Deguillard
41d275ad36 revisionstore: ignore transient errors during repack
Summary:
Corrupted packfiles, or background removal of them could cause repack to fail,
let's simply ignore these transient errors and continue repacking.

Reviewed By: DurhamG

Differential Revision: D14373901

fbshipit-source-id: afe88e89a3bd0d010459975abecb2fef7f8dff6f
2019-03-11 18:15:45 -07:00
Jun Wu
be6f884be4 remotenames: fix crash with hg-git + remotefilelog
Summary:
Fixes the below type error when pulling from a git repo using hg-git on my laptop:

    File "edenscm/hgext/remotenames.py", line 225, in expull
      pullremotenames(repo, remote, bookmarks)
    File "edenscm/hgext/remotenames.py", line 314, in pullremotenames
      path = activepath(repo.ui, remote)
    File "edenscm/hgext/remotenames.py", line 1464, in activepath
      rpath = _normalizeremote(remote.url)
    File "edenscm/hgext/remotenames.py", line 1439, in _normalizeremote
      u = util.url(remote)
    File "edenscm/hgext/hggit/__init__.py", line 164, in _url
      if not (path.startswith(pycompat.ossep) and ":" in path):
    AttributeError: 'function' object has no attribute 'startswith'

Basically, `peer.url()` is the API, `peer._url` is a private field that does
not always exist somehow.

Besides, further remove named branches that can crash hg-git with
NotImplementedError:

    File "edenscm/hgext/remotenames.py", line 225, in expull
      pullremotenames(repo, remote, bookmarks)
    File "edenscm/hgext/remotenames.py", line 322, in pullremotenames
      for branch, nodes in remote.branchmap().iteritems():
    File "edenscm/hgext/hggit/gitrepo.py", line 73, in branchmap
      raise NotImplementedError

Reviewed By: DurhamG

Differential Revision: D14144462

fbshipit-source-id: 2e886c639cf6689480f84626eaf0d5ec25512ea0
2019-03-11 15:23:46 -07:00
Liubov Dmitrieva
ea8ba67697 fix infinitepush state files in hg rage
Summary:
Since state files have been changed, now it is one per path, we should dump
them in a correct way

Reviewed By: markbt

Differential Revision: D14406311

fbshipit-source-id: 8d74a51e63028ec81bcf5e55ad117d3c960b4651
2019-03-11 12:13:05 -07:00
Jun Wu
28b4dfbb38 smartlog: show more commits
Summary:
To make "draft()" bounded and train users to hide unused commits manually,
change smartlog to "hide commits before <a static date>", instead of
"hide commits that are older than <a static time span>". Then we can
incrementally decrease the static date, and eventually show everything, and
force the user to think about what commits to keep or hide.

Reviewed By: singhsrb

Differential Revision: D13993584

fbshipit-source-id: 1a2b56f50d7f014a589f798cd2feaa6931e64fe3
2019-03-11 11:11:59 -07:00
Jun Wu
9e0a7c41a4 subrepo: remove subrepo support
Summary:
Subrepo is another unloved features that we don't want to support.

Aggressively remove it everywhere, instead of just turning off configs.

I didn't spend much time to split this commit so it's smaller and more friendly
to review. But it seems tests are passing.

Reviewed By: sfilipco

Differential Revision: D14220099

fbshipit-source-id: adc512a047d99cd4bafd0362e3e9b24e71defe13
2019-03-11 10:43:55 -07:00
Mark Thomas
dbe1d30cf0 treemanifest: include all trees when infinitepush rebundle converts trees
Summary:
If an infinitepush bundle contains flat manifests and is served from a
treemanifest repository, it can potentially fail to send all the needed data to
the client.

Understanding the bug requires two bits of context:
1. When sending commits from a tree server to a tree client, we generally don't
send any trees because they can be fetched by the client ondemand later. The one
exception to this is for infinitepush bundles, where the trees inside the bundle
cannot be served ondemand, and therefore must be served at pull time. To do this
we check if a given manifest node exists in the repositories permanent storage,
and if it doesn't, we assume it came from an infinitepush bundle and serve it
with the pull.
2. When we lookup a manifest and fail to find a tree, our last resort is the
ondemandstore which knows how to convert a flat manifest into a tree manifest.
On the server, this is responsible for converting each of the flat bundle's
manifests into treemanifests before we serve the bundle to the client. As part
of converting the flat manifests into treemanifests, it writes the new tree
data into a pack file.

The bug is then, when serving a stack of commits, if we try to package up the
top tree first (i.e. the most recent tree), we end up converting the entire
stack from flat into trees, which inserts the bottom most trees into the
temporary pack file.  Because they exist in the temporary pack file, when we
later check if they are part of the repositories store we end up finding them,
which causes us to treat them as not-infinitepush-trees which means we don't
serve them to the client.

The fix is to change the infinitepush tree-serving code to not consider the
mutable packs when checking if it should send trees.

Reviewed By: mitrandir77

Differential Revision: D14403925

fbshipit-source-id: 38043dfc49df5ff9ea2fae1d3cac341c4936509c
2019-03-11 05:39:49 -07:00
Mark Thomas
4578cd921f infinitepush: don't include nullid in bundle roots
Summary:
When calculating bundleroots (the commits that are the common ancestors for the
infinitepush bundle), we currently include all the `nullid` parents (i.e. p2 for
most commits).  This bloats the size of the list, and is unnecessary.

Reviewed By: quark-zju

Differential Revision: D14385912

fbshipit-source-id: c518b8b1aa27cff8562c2358a024b8a08ced8cba
2019-03-11 04:25:20 -07:00
Jun Wu
ec163cfbfa drawdag: allow overriding dates
Summary: Make it possible to override dates in commits.

Reviewed By: singhsrb

Differential Revision: D13993585

fbshipit-source-id: 59a72302d7ed0cb22f4eff84c1325e167963508c
2019-03-08 20:27:07 -08:00
Jun Wu
cf0b61e03e memcommit: reformat help text
Summary: A code block requires `::\n\n`. `::\n` alone is not enough.

Differential Revision: D14323698

fbshipit-source-id: 59e19fde3dbf1b88126451b2dbc5cfd90e415f60
2019-03-08 20:15:24 -08:00
Jun Wu
ca52b70e03 config: enable merge.printcandidatecommmits
Summary:
The feature was completed by Phil in D9816270. It's handy and can probably
reduce user support burden like: https://fb.intern.facebook.com/groups/scm/permalink/2039619916087618/

Therefore let's enable it.

Reviewed By: DurhamG

Differential Revision: D14293405

fbshipit-source-id: 54e934e0bf495c090109462e4f743d427df39380
2019-03-08 19:55:46 -08:00
Saurabh Singh
314f127f19 memcommit: provide serialization as separate module
Summary:
Some dependant libraries may only care about the serialization logic. As an
example, see D14332987 where the `hgrepo.py` only needs to depend on the
serialization. Therefore, its cleaner to extract out the serialization from the
`memcommit` data.

Reviewed By: quark-zju

Differential Revision: D14388474

fbshipit-source-id: 6f049dcc596b66b9ad72905f133529bdc9092382
2019-03-08 17:55:18 -08:00
Saurabh Singh
4202f5c94f memcommit: make memcommit shared code compatible with python 3
Summary:
The shared code can be potentially called by clients using python 3. Therefore,
let's be compatible with python 3.

Reviewed By: quark-zju

Differential Revision: D14387005

fbshipit-source-id: 2ffb359d4d2762ffcba4a26a3ae5a7b45e89572b
2019-03-08 17:55:18 -08:00
Jun Wu
f8e28f1466 bookmarks: remove branch name collision check
Summary:
Eventually we'd like "default" to be not a special name. This is one step
torwards that.

Differential Revision: D14233455

fbshipit-source-id: 739091a124bc667c607c283bf00abc66b4081d25
2019-03-08 16:33:20 -08:00
Jun Wu
c0d96cde7d hook: make "mercurial" module available for Python hooks
Summary:
Some hooks (ex. mergedriver) are checked in old release branches. Provide
"mercurial" module compatibility so they won't break.

Reviewed By: mitrandir77

Differential Revision: D14366343

fbshipit-source-id: d47cc4fd512f63e4f6cdc5d7e5ab2c4398216b2f
2019-03-08 16:04:38 -08:00
Liubov Dmitrieva
674e3ab4ec infinitepush - implement known command
Summary:
Introducing new command for Mercurial only to support check of existing commits in both the repo and the infinitepush storage.

For Mononoke case, just the standard 'known' works fine.

We can not overload the standard 'known' in mercurial case, because it is used in discovery and having there infinitepushcommits breaks some commands.

Next diff is replacing isbackedupnodes with isbackedupnodes2

Reviewed By: markbt

Differential Revision: D14370603

fbshipit-source-id: 8d7b64b4d556c0f1caa7f797dba360501571daad
2019-03-08 09:05:42 -08:00
Mark Thomas
38595d6fe3 dispatch: detect stale virtual checkouts and provide advice
Summary:
If Mercurial detects `ENOTCONN` when trying to open the current directory,
there is a high likelihood this is a disconnected eden virtual checkout.
Provide some advice as to what to do: run `hg fs start`.

Reviewed By: strager

Differential Revision: D13888873

fbshipit-source-id: 7619df0681d15b862d1a6f86d90491aa873bf86b
2019-03-08 06:02:22 -08:00
Mark Thomas
5bc5dde3a4 rage: add edenfs rage to hg rage
Summary: Include the output from edenfs rage in the hg rage output.

Reviewed By: chadaustin

Differential Revision: D14007061

fbshipit-source-id: fe0baf6c19dd4f2afd470ba70304c78582dfe879
2019-03-08 06:02:22 -08:00
Mark Thomas
a574573d52 fs: add stats subcommands
Summary: Add `hg fs stats` for the edenfs stats commands.

Reviewed By: chadaustin

Differential Revision: D14007060

fbshipit-source-id: 453133d04867a90fd7a40bc05288e35ae56fad93
2019-03-08 06:02:22 -08:00
Mark Thomas
e7bd8088ef fs: add other subcommands
Summary: Add `hg fs` subcommands for the other main `edenfsctl` commands.

Reviewed By: chadaustin

Differential Revision: D14007062

fbshipit-source-id: 9b5f56b14b5812216c929232b2697233f38288cc
2019-03-08 06:02:22 -08:00
Mark Thomas
c202c9953b fs: add start, stop and restart subcommands
Summary:
Add `hg fs start`, `hg fs stop` and `hg fs restart` subcommands to start, stop
and restart the eden daemon.

Reviewed By: chadaustin

Differential Revision: D13888876

fbshipit-source-id: ab190675d2b2ad56f38d723d1859f516aa3165e8
2019-03-08 06:02:21 -08:00
Mark Thomas
3c5d3fba54 visibility: add pushrebase support
Summary:
Support updating of commit visibility when using pushrebase.  Since obsmarkers
may not be available, this also involves looking at the commit mutation data
returned from the server.

Reviewed By: DurhamG

Differential Revision: D12980783

fbshipit-source-id: 837e356e500e7bf9710a3619a31094cae21d36c9
2019-03-08 03:05:58 -08:00
Mark Thomas
d7375d7397 visibility: update visibility when commits are modified
Summary:
When commits are added or modified, update the set of visible heads if
visibility tracking is enabled.

Reviewed By: DurhamG

Differential Revision: D12980779

fbshipit-source-id: 8f44045159c86a374ae530fa4327ee0807b4320d
2019-03-08 03:05:58 -08:00
Mark Thomas
cfbe15d7d2 visibility: add storage of visible heads
Summary:
Add a method of tracking explicit visible heads.  Rather than using the
implicit set of commits that are not obsoleted (which may differ between repos
that are connected to a single commit cloud workspace), we instead track commit
visibility explicitly.

This is more like the git model, where only commits that are reachable from
refs are considered for most operations, except that we keep track of the heads
automatically, and use obsmarkers to keep track of the obsoleted commits,
rather than garbage collecting them.

Reviewed By: DurhamG

Differential Revision: D9560361

fbshipit-source-id: 07dabfc04415f2ecb97d57c4e3944c071579ee50
2019-03-08 03:05:57 -08:00
Mark Thomas
edbb3112bd templatekw: disable obsolescence fate templates when mutation enabled
Summary:
Disable the various templates that attempt to determine the fate of a
particular commit based on obsmakers when mutation is enabled.  The old
templates were either insufficiently generic (e.g. `amendsuccessors`), or
leaked internal implementation (e.g. `succsandmarkers`).

With mutation enabled, callers should use the `mutations` template to get a
list of a commit's mutations.

Reviewed By: DurhamG

Differential Revision: D12980772

fbshipit-source-id: 920d47f7c61ad52f562cd90f1cb405250c14bc25
2019-03-08 03:05:57 -08:00
Mark Thomas
3b41f2f54c mutation: detect landed commits using synthetic mutation records
Summary:
Add support for detecting landed commits.

Since we don't currently have an index for successor information in the
changelog, we can only detect the successor relationship for predecessors of
draft commits (for which we build a cache).  As a temporary workaround,
make it possible to put mutation records in the mutation store that lead to
landed commits.  These will allow land detection to work until we have a
changelog that supports indexing on predecessor.

Reviewed By: quark-zju

Differential Revision: D12980780

fbshipit-source-id: d7b14fa073d0406990b92731fe66dfe1c73b404c
2019-03-08 03:05:57 -08:00
Mark Thomas
2e67ee0c44 templatekw: add mutations template keyword
Summary:
The `mutations` template keyword expands to a list of the results of mutating
the commit.  Each element of the list has an `operation` field, which is a
string describing the mutation operation, and a `successors` field, which is a
list of the successor commits for this operation.  Sequences of mutations that
result in a single successor are collapsed into a single `rewrite` operation.

Reviewed By: quark-zju

Differential Revision: D12980787

fbshipit-source-id: 82be2f9131832209cc3ab088f587c45f8c45a9ad
2019-03-08 03:05:57 -08:00
Mark Thomas
6ce749a3e1 infinitepush: exchange mutation information via infinitepush bundles
Summary:
Include mutation records for all predecessors of the pushed commits in
infinitepush bundles.

When received from infinitepush, store these additional records in the local
store.  This allows us to bridge any gaps in mutation that are omitted from the
local commits when they are received from infinitepush.

Reviewed By: DurhamG, quark-zju

Differential Revision: D12980777

fbshipit-source-id: b1535ca29c0fca3e6cb0f563d78c4c60d4aef58e
2019-03-08 03:05:57 -08:00
Mark Thomas
13a768d274 debugcommands: support mutation store in debugmutation
Summary:
The debugmutation command should also show information about mutation entries
in the mutation store.

Reviewed By: DurhamG, quark-zju

Differential Revision: D12980785

fbshipit-source-id: 06c3ec2cb9c42edf43729ba3b7c471b1bf8dfb96
2019-03-08 03:05:57 -08:00
Mark Thomas
78d4d4ce49 mutation: look-up entries in the store when traversing mutations
Summary:
When traversing mutation entries, if we don't have any information for a
commit, then look instead in the store to see if we have a cached entry
from a non-local commit there.

There aren't any ways of putting entries there, yet.  Those will come in
later commits.

Reviewed By: DurhamG

Differential Revision: D12980776

fbshipit-source-id: 63ff12382eb9294aa43ff100a4fe19b7c05f9e61
2019-03-08 03:05:57 -08:00
Mark Thomas
b416acce15 histedit: use mutation information for adjusting replacements
Summary:
Histedit needs to adjust its records of what commits are replaced.  Currently
it does this by examining obsmarkers.  If mutation is enabled, use the mutation
information instead.

Reviewed By: quark-zju

Differential Revision: D13279987

fbshipit-source-id: e9622a67635afe2023088fdf0e0b43b0bcd9223f
2019-03-08 03:05:57 -08:00
Mark Thomas
6ff8a8a394 mutation: create common access methods for mutation information
Summary:
We will be making looking up entries for complex by adding a secondary store of
the information.  Make accesses to this information common through lookup
functions.

Reviewed By: quark-zju

Differential Revision: D13279986

fbshipit-source-id: a30084b548762e69cb354c3760d7ec66027a24e1
2019-03-08 03:05:57 -08:00
Mark Thomas
b059c3a3bf mutation: implement successorssets and foreground
Summary:
Implement successorssets and foreground in terms of mutation records and
replace them when mutation metadata usage is enabled.

Reviewed By: quark-zju

Differential Revision: D10149263

fbshipit-source-id: bbf6d1fc44a9787660147e15936a9ee1951373ca
2019-03-08 03:05:56 -08:00
Mark Thomas
892986d685 mutation: use mutation information for revsets
Summary:
When enabled, use mutation metadata for the `obsolete`, `extinct`, `orphan`,
`phasedivergent` and `contentdivergent` revsets.

Reviewed By: quark-zju

Differential Revision: D10149265

fbshipit-source-id: 5559fa22a6025e1d341538f3eb2257d8efee15e5
2019-03-08 03:05:56 -08:00
Mark Thomas
a14bfeebbb mutation: add mutationcache
Summary:
Add a mutationcache to the repo.  This computes the following information:

* The successor sets for all predecessors of visible commits - these are the
  sets of immediate successors for each commit.
* A map from commits which are the results of splits to the final split commit.
* The set of public commits that have visible draft successors.
* The set of draft commits that have multiple sets of visible eventual successors.
* The set of obsolete commits - draft commits with visible eventual successors.
* The set of orphan commits - commits with obsolete ancestors.
* The set of extinct commits - obsolete commits with no orphaned descendants.

These sets will be used later on to replace the obsmarker-based equivalents.

Reviewed By: DurhamG

Differential Revision: D13279988

fbshipit-source-id: 3f063bb68aaba2f19da257efdf79b485b947b7b1
2019-03-08 03:05:56 -08:00
Jun Wu
426a80a117 zstd: back out "make Python APIs zero-copy"
Summary:
Original commit changeset: af43d4cce555

D14338313 didn't trigger the main `.t` tests. A lot of things actually
depend on `zstd` APIs returning `bytes`. Therefore back out the change.

Reviewed By: DurhamG

Differential Revision: D14372351

fbshipit-source-id: d8daa7d1d2a49d9d0c4d48de22ed0567d1d953a7
2019-03-07 13:30:10 -08:00
Mateusz Kwapich
1f26aa77eb improve githelp for 'rebase -i'
Summary: We have rebase -i, let's mention it.

Differential Revision: D14363798

fbshipit-source-id: 94d3322af8dafd8fc81bfcfc86b61227bec85968
2019-03-07 13:11:28 -08:00
Liubov Dmitrieva
6a40cb0312 infinitepush - better handling changes of the path
Summary:
Unfortunately, Mononoke team needs to rename paths to add the markers everywhere.

They deprecated mononoke url:

ssh://hg.vip.facebook.com//mononoke/fbsource

And they are asking us not to use ssh://hg.vip.facebook.com//data/scm/fbsource url without markers.

We finally agreed to have:

```
infinitepush = ssh://hg.vip.facebook.com//data/scm/fbsource?force_mercurial

infinitepush-other = ssh://hg.vip.facebook.com/data/scm/fbsource?force_mononoke
```

So, we would like that rename of the path don't cause `hg sl` show that nothing is backed up.

We use the path as part of our filename.

So, we will go to the server to check the commits, it might slow down a bit the very first `hg sl` or `pushbackup` after the path change, but it should be acceptable.

Reviewed By: quark-zju

Differential Revision: D14366820

fbshipit-source-id: a0fd7bad530dd6690926fe02d38b93c2a72df00b
2019-03-07 11:01:30 -08:00
Liubov Dmitrieva
f23f981dba inifinitepush: raise error for unsupported commands with Mononoke
Summary:
Basically the supported ones are:

hg pushbackup
hg isbackedup -r <rev> --remote

Unsupported:
hg pullbackup
hg getavailablebackups
hg backupdelete
hg debugcheckbackup

Supported (client side):
hg backupenable
hg backupdisable
hg debugwaitbackup

Reviewed By: DurhamG

Differential Revision: D14106642

fbshipit-source-id: ebdea01b72333692b1a65d138c1dee21874a45c0
2019-03-07 07:56:22 -08:00
Jun Wu
932bb1492c zstd: make Python APIs zero-copy
Summary:
Make them zero-copy to reduce overhead. A side effect is the types become
`bytearray`, instead of `bytes`. It seems fine for zstd use-case.

Reviewed By: ikostia

Differential Revision: D14338313

fbshipit-source-id: af43d4cce5559fe877373737a71e1e1678a17ca7
2019-03-06 21:35:10 -08:00
Saurabh Singh
c305090b83 globalrevs: fix formatting for 'hg help globalrevs'
Summary: See title

Differential Revision: D14332372

fbshipit-source-id: f4a25ae034d66e7c9f8ab6bb44c8919c717e35c2
2019-03-05 16:48:14 -08:00
Xavier Deguillard
f09d3b816c treemanifest: fix repack and backfilltree
Summary: These 2 commands were broken when treemanifest.treeonly=True was set

Reviewed By: DurhamG

Differential Revision: D14316779

fbshipit-source-id: e626df41c92036fa3bd61c072f09b0d6c99c6f9f
2019-03-05 11:40:46 -08:00
Stanislau Hlebik
48e7592c3e localrepo: fix changed file generation
Summary:
If an executable filenode was reused from p2 and mode hasn't been
changed (i.e. a filenode was executable and it is still an executable after a
merge) and and p1 didn't have this file at all then file will still be listed as
changed just because manifest1.flags(fname) returns ''.

After this diff if a filenode is reused then file will be listed as changed
only if it's a parent from where this filenode was reused have different flags.
So if filenode was reused from p1/p2 and p1/p2 has same flags and new
filenode, then file is not listed. But if filenode was reused from p1 and p1
has different flags, then filenode won't be reused.

It's possible that both new filenode is equal to both p1 and p2. In that case
we'll compare only with p1's mode.

Note that it's only get triggered during pushrebase, because during local
commits `fctx.filenode()` is None

Reviewed By: DurhamG

Differential Revision: D14300214

fbshipit-source-id: 1bf6c4802cfce5db6654da673333a56389432617
2019-03-05 10:53:32 -08:00
Xavier Deguillard
0fdc258804 remotefilelog: add a packfile remote store
Summary:
When searching for data, mercurial will search the datastores by first looking
into the local cache, then try to find the data over the network. When
remotefilelog.fetchpacks is enabled, all the data fetched over the network will
be stored into packfiles, but those fetches are done via the loose-files remote
datastore. Due to this, even if memcache successfully find the requested data,
the datastore won't find it, due to it expecting loosefiles.

Fixing this simply requires the fetches to be done via a packfile store when
remotefilelog.fetchpacks is enabled.

Reviewed By: DurhamG

Differential Revision: D14216815

fbshipit-source-id: ed97c64651a733b36e0f2b4e209ce8ccdbb7911e
2019-03-04 13:48:11 -08:00