Commit Graph

13490 Commits

Author SHA1 Message Date
Phil Cohen
6a8a7d7ba7 test-i18n: fix the build
Summary: I think D10446929 might've broken this by changing the pull string such that there was no German translation for it.

Reviewed By: quark-zju

Differential Revision: D10520682

fbshipit-source-id: a39b5911295ee0d1f5eee3b307930cffa87c3562
2018-10-23 17:42:58 -07:00
Marla Azriel
6e0cece004 commands: update help text for pull and rebase
Summary: Updated help text for hg pull and hg rebase

Reviewed By: markbt

Differential Revision: D10446929

fbshipit-source-id: a81e186398cda02f58df95e6f2613b3f7457d9ed
2018-10-23 11:41:07 -07:00
Phil Cohen
71089debf0 hgsubversion: remove referenced to deleted graphlog extension
Summary: Its functionality was folded into core a while ago, so we can just call `log -G`.

Reviewed By: quark-zju, singhsrb

Differential Revision: D10509538

fbshipit-source-id: 5c16ff708072e9bebabaf3b8e1474091dfb35216
2018-10-23 11:29:47 -07:00
Phil Cohen
3e592b81ae filemerge: add number of textual conflicts in each file to error message
Summary:
When you get an error, let's print the number of conflicts in each file. This will give the user some sense of how much work they have to do.

The code change is entirely in `filemerge.py`, and `tests/test-merge-conflict-count.t` adds a new test.

Reviewed By: quark-zju

Differential Revision: D9815243

fbshipit-source-id: 1b73a1db293902ac7242997a7d6ae09478344068
2018-10-22 12:47:41 -07:00
Jun Wu
3c46b25bec hgext: remove unused extensions
Summary:
Remove extensions that are not used in prodution. These extensions are also
unlikely to be used in the future.

Reviewed By: ikostia

Differential Revision: D10473370

fbshipit-source-id: a936e30acd3ec4370434c583447942c6ee8d9b13
2018-10-20 19:08:43 -07:00
Jun Wu
a185a85cf2 fsmonitor: track ignored files for treestate
Summary:
Since we can now skip a large ignored directory efficiently, just track the
ignored files in treestate. This fixes the "unignore" correctness issue that
has been there for years.

It also makes it easier to implement a faster version of "status -i" or "purge
--all". But that needs some extra changes.

It looks fine for fbsource sparse profiles. But we don't control all the
possible sparse configs out there. It's possible for certain users to have
sparse configs that cannot be optimized efficiently and their hg performance
will degrade. To reduce risk, a config option is added so we can slowroll the
feature and collect feedback.

Reviewed By: DurhamG

Differential Revision: D10352851

fbshipit-source-id: fbcb8445d87a50826852b832bbb0559ab199192f
2018-10-19 19:37:16 -07:00
Durham Goode
3713a821f8 hggit: sort git-mapfile and use bisect to do git-getmeta
Summary:
Previously, git-getmeta would have to scan through the entire git map
file, which was extremely expensive. Let's shift this cost to write time by
sorting the map file before writing, then using bisect to lookup nodes.

A while ago we switch hggit to only serialize the mapfile every 100 commits or
so, so the additional time here shouldn't be excessive.

Reviewed By: quark-zju

Differential Revision: D10470293

fbshipit-source-id: 47e23d251adde5456e7b593bfcc5976259a497f2
2018-10-19 15:42:18 -07:00
Mark Thomas
ce6e0dbf64 sparse: replace delete with uninclude and unexclude
Summary:
Replace `sparse delete` (which deletes an include or exclude rule) with commands
that better describe what they do.

Also update `include` and `exclude` to additionally remove the rule from the
opposite set.  It makes no sense for a file to be both included and excluded.

Reviewed By: phillco

Differential Revision: D10446704

fbshipit-source-id: 8966f7d0e54b1aae737fa0bae9cf35ed7ce88696
2018-10-19 06:51:42 -07:00
Mark Thomas
c35c2dd06b sparse: add sparse show
Summary:
Add a new sparse show command, which shows the current sparse configuration.
Use common templating, including colors, between sparse show and sparse list.

Reviewed By: phillco

Differential Revision: D10446705

fbshipit-source-id: acb539f80f625945716758c785703b46a81aa6f1
2018-10-19 06:51:42 -07:00
Mark Thomas
8177c3e517 help: enable categorization of subcommands
Summary:
Allow commands that have subcommands to categorize the subcommands.  These
categories appear in the help for the top-level command.

Reviewed By: phillco

Differential Revision: D10446708

fbshipit-source-id: a7f2a9bc79c2a2c4df90517a5e6c9a4b78b31a72
2018-10-19 06:51:42 -07:00
Jun Wu
364689727a ssh: remove "remote:" prefix if the stderr message starts with "ssh:"
Summary:
All ssh stderr are prefixed by "remote:", which could be confusing because the
message can also be some errors from the local ssh program. Treat "ssh:" as a
special case and do not prefix it with "remote:".

Reviewed By: markbt

Differential Revision: D10437082

fbshipit-source-id: 37935bd7276969ef17fa5028b02d01e3c9d0bf30
2018-10-18 19:56:49 -07:00
Jun Wu
18346a9745 branch: allow read-only operation
Summary: Sadly `buck test` runs `hg branch` and it breaks.

Reviewed By: DurhamG

Differential Revision: D10458543

fbshipit-source-id: 15da7d9c45e4740fc8aa0c4f57d304bef320db6b
2018-10-18 19:53:39 -07:00
Durham Goode
8e20e191b5 tests: fix alias test to deal with long hgrc paths
Summary:
On OSX the path to the hgrc can be so long it word wraps. Let's update
the test to accomodate the extra line.

Reviewed By: quark-zju

Differential Revision: D10453508

fbshipit-source-id: 5ba9db86f8475ab31ddb4b0e32da4feeeb8b5ce8
2018-10-18 14:43:56 -07:00
Mark Thomas
5f811293e8 help: fix tests
Reviewed By: phillco

Differential Revision: D10447019

fbshipit-source-id: 619508f33ca60ef27228582cc037abff3982fbc0
2018-10-18 11:07:15 -07:00
Phil Cohen
626be8c89d perftweaks: rename tests
Summary: Signifying the change of perftweaks from an extension to a config grouping.

Reviewed By: quark-zju

Differential Revision: D10416857

fbshipit-source-id: b233a353c7da1d211ad0a7e53b942244863a83b3
2018-10-18 09:04:34 -07:00
Phil Cohen
69c6740869 tweakdefaults: fold hint for hg prev into core
Summary: Config-gate it so we don't have it popping up in tests everywhere.

Reviewed By: quark-zju

Differential Revision: D10432784

fbshipit-source-id: 531007432d67fef6ff504e319e43fb596d6a0d27
2018-10-18 05:47:31 -07:00
Phil Cohen
b04befe290 perftweaks: remove cachenoderevs code
Summary:
Per D8985248, this code isn't necessary anymore under clindex. clindex is out everywhere now, so let's nuke it.

Shortens this file by 30%!

Reviewed By: quark-zju

Differential Revision: D10414815

fbshipit-source-id: 795c625afd128d94f09d0f7c1b294a7f7d8eea14
2018-10-18 03:17:37 -07:00
Phil Cohen
498fe837ae tweakdefaults: move config overrides to core
Summary: tweakdefaults was overriding two configs to reconcile core/fb behavior. Let's just fold it in to the default.

Reviewed By: quark-zju

Differential Revision: D10432786

fbshipit-source-id: 2f56baa2d11d7814bffc489e56cb155548d1fc97
2018-10-18 03:15:26 -07:00
Jun Wu
02e2830919 treemanifest: fix filecache for manifestlog
Summary:
Manifestlog needs to use `00manifesttree.i` for filecache if treeonly is turned
on.

Teach `filecache` to also cache non-existed files and add `00manifesttree.i`
to `repo.manifestlog` check list.

Assuming inode cannot be 0, `cacheable` is a constant `True`. Drop code
dealing with `cacheable = False` accordingly.

Reviewed By: DurhamG

Differential Revision: D10417795

fbshipit-source-id: c8aedd36dc39592c86847bf4327ed9c46736bab0
2018-10-17 20:07:47 -07:00
Jun Wu
5a3842e136 hgsql: add a test demonstrating issues we saw with treeonly pushrebases
Summary:
This happens if during prepushrebase hook, a hgsql repo sync (db -> local)
is completed by another process. `repo.manifestlog` does not get invalidated
correctly if it's treeonly.

The issue was partially detected by a C program modified from fanotify (2)
manpage example monitoring `00manifesttree.i` changes:

  [00:32:35.780] pid 7734 opens 00manifesttree.i (size 1000264)                       # First open.
  [00:32:35.930] pid 7734 reads closes (no write) 00manifesttree.i (size 1000264)
  [00:32:38.685] pid 9175 opens 00manifesttree.i (size 1000264)
  [00:32:38.885] pid 9175 reads 00manifesttree.i (size 1000264)
  [00:32:38.886] pid 9175 closes (no write) 00manifesttree.i (size 1000264)
  [00:32:39.235] pid 9175 opens 00manifesttree.i (size 1000264)
  [00:32:39.235] pid 9175 closes (no write) 00manifesttree.i (size 1000264)
  [00:32:39.236] pid 9175 opens 00manifesttree.i (size 1000264)
  [00:32:39.236] pid 9175 modifies closes 00manifesttree.i (size 1000328)             # Appended by another process.
  [00:32:41.169] pid 10759 opens 00manifesttree.i (size 1000328)
  [00:32:41.355] pid 10759 reads 00manifesttree.i (size 1000328)
  [00:32:41.355] pid 10759 closes (no write) 00manifesttree.i (size 1000328)
  [00:32:41.537] pid 10759 opens closes (no write) 00manifesttree.i (size 1000328)
  [00:32:41.537] pid 10759 opens 00manifesttree.i (size 1000392)
  [00:32:41.537] pid 10759 modifies closes 00manifesttree.i (size 1000392)            # Appended by another process.
  [00:32:44.930] pid 7734 opens closes (no write) 00manifesttree.i (size 1000392)     # Main process picked up changes.
  [00:32:44.930] pid 7734 opens 00manifesttree.i (size 1000392)
  [00:32:44.930] pid 7734 reads 00manifesttree.i (size 1000392)
  [00:32:44.930] pid 7734 modifies closes 00manifesttree.i (size 1000456)             # Main process wrote data.
  [00:32:45.275] pid 7734 opens 00manifesttree.i (size 1000456)
  [00:32:45.459] pid 7734 reads 00manifesttree.i (size 1000456)
  [00:32:45.459] pid 7734 closes (no write) 00manifesttree.i (size 1000456)
  [00:32:45.550] pid 7734 opens closes (no write) 00manifesttree.i (size 1000456)
  [00:32:45.550] pid 7734 opens 00manifesttree.i (size 1000264)
  [00:32:45.550] pid 7734 closes 00manifesttree.i (size 1000264)                      # Main process truncated to the wrong position.

Pid 7734 had "IntegrityError: 1062 (23000): Duplicate entry" error. The
fanotify log showed it truncated the revlog to a wrong location, indicating
an outdated revlog was kept in memory.

The C program was sent as D10418991.

Reviewed By: DurhamG

Differential Revision: D10417797

fbshipit-source-id: 7ccc0a976d05efbca5b3ed6fb5ff7886766d06d2
2018-10-17 20:07:47 -07:00
Mark Thomas
1bf045df79 help: implement configurable documentation for aliases
Summary:
Aliases can be additionally configured with documentation by adding an entry of
the form:

```
[alias]
aliasname:doc = help text
```

The help text for the alias will be displayed if the user runs `hg help
aliasname`, and in the list of commands when the user runs `hg help commands`.

Reviewed By: phillco

Differential Revision: D10428399

fbshipit-source-id: 14338902fce6efab4c8d3b2541cdcf5b15385784
2018-10-17 12:22:53 -07:00
Mark Thomas
1cc0fedc1c help: reorganise help commands
Summary:
Reorganise the top-level help commands to more useful categories, allowing them
to be listed in a custom order.

Reviewed By: phillco

Differential Revision: D10423184

fbshipit-source-id: 17f02ae201493397a448d108e781eca28a7b1d44
2018-10-17 09:58:06 -07:00
Kostia Balytskyi
c46886e415 obsshelve: remove dummy extension
Summary: After D10407265 this is no longer needed.

Reviewed By: quark-zju

Differential Revision: D10407826

fbshipit-source-id: 5291981637d940a6d19cda1b814b81b745d9ca92
2018-10-16 14:27:29 -07:00
Kostia Balytskyi
427c7f2835 sparse: default missingwarning to false
Summary:
This message as a warning is not actionable. wez, philco, markbt and
mitrandir77 seem to agree that this is a good approach.

Note that this message is still printed in debug mode.

Reviewed By: farnz

Differential Revision: D10336756

fbshipit-source-id: ea55d298569787d2e19eb1ffcfe6ff75935fb650
2018-10-16 14:27:29 -07:00
Kostia Balytskyi
db59aa8bfc sparse: rename tests from test-fb-hgext-sparse-smth to be test-sparse-smth
Summary: As a signal that sparse is cleaned up.

Reviewed By: phillco

Differential Revision: D10335537

fbshipit-source-id: 773a12a00cfe040f08871bf14423faa5eae9bdad
2018-10-16 14:27:29 -07:00
Kostia Balytskyi
6d171b17c6 sparse: move bits of perftweaks into sparse directly
Summary: No point in tweaking it externally if we can just add relevant stuff.

Reviewed By: phillco

Differential Revision: D10335080

fbshipit-source-id: 47c009bf820f8f41f586b714181e82bea88dfa49
2018-10-16 14:27:29 -07:00
Kostia Balytskyi
86f07601f7 sparse: rename fbsparse into sparse in tests
Reviewed By: phillco

Differential Revision: D10335084

fbshipit-source-id: 91e0a17957561410e397a006f99ebf549d34e1e4
2018-10-16 14:27:29 -07:00
Phil Cohen
7bf2e9105a tweakdefaults: port allowbranches to core
Summary:
Note that this is more aggressive than the tweakdefaults version; it doesn't allow named branches to be created or listed at all with the config set. As we want to delete named branches entirely, this seems reasonable.

I ported the `--new` flag, but made it optional, to make it easier to support both the core and tweakdefaults callers.

Saurabh Singh and I chatted with the releng team (Craig).

**tldr:** we can remove named branches from the UI but should keep the innards for now

Today the releng team doesn't make any branches (#continuous), but in the near-term future, they might either:

- create remote bookmarks in hg (similar to fbsource)
- create branches in SVN (which are then synced as hg branches by hgsubversion)
  - We'll leave all the hgsubversion code to do this alone, just remove user-facing entry points
  - They'll also need to be able to query for a commit's branch (`hg log -T '{branch}'` will still work)
  - Once www is on hg, this possibility goes away and we can kill named branches for good

Reviewed By: ikostia

Differential Revision: D10401485

fbshipit-source-id: 6f2f3ae28af249bae1fdf782eb14fe7bfc472bb7
2018-10-16 09:25:04 -07:00
Kostia Balytskyi
e69f2795e4 obsshelve: add dummy extension file as a temporary workaround
Reviewed By: kulshrax

Differential Revision: D10401200

fbshipit-source-id: dc855cfedcba46575f4616a331a5cf8551e27055
2018-10-16 05:33:13 -07:00
Phil Cohen
ab78b85a3a tweakdefaults: move empty update logic to core
Summary:
Alas, it has to be config-gated for now, because a number of core tests depended on the empty-destination update behavior (which is sophisticated).

I'll send a followup diff to remove them.

Reviewed By: kulshrax

Differential Revision: D10376546

fbshipit-source-id: 2ac79e03a91551f96cf8e743c0ee9719557c4fbe
2018-10-16 05:17:39 -07:00
Mark Thomas
ced2b923b9 absorb: rename absorb tests
Summary: Remove `fb-hgext` from absorb test filenames.

Reviewed By: ikostia

Differential Revision: D10382215

fbshipit-source-id: 97546b47e19558d9ba6fcf6aab594c51fc6d472f
2018-10-16 03:03:02 -07:00
Mark Thomas
5163cf7430 absorb: exit if there are no changes that can be absorbed
Summary:
The new hg absorb UX still prompts if there is nothing to be absorbed.
Instead, detect this condition and just exit with a message.

Reviewed By: ikostia

Differential Revision: D10382216

fbshipit-source-id: 5cd1aa9de457cc3475bcda064e8761b3ddf1ad40
2018-10-16 03:03:02 -07:00
Phil Cohen
ce1ac26a21 perftweaks: move update --inactive to core
Summary:
This greatly simplifies the implementation, too.

*updatetotally() change:*

`hg up` now passes a brev of `None` if the `--inactive` flag was passed. This avoids activating the bookmark if one was passed. However, it still needs to deactivate the active bookmark, if there was one. After looking at the existing code, I think it was just wrong.

The rest of this is just cleanup.

Reviewed By: markbt

Differential Revision: D10376544

fbshipit-source-id: e5ad8aa01acab906db4d3fc09c6450e3c48b59fb
2018-10-15 16:55:34 -07:00
Phil Cohen
1f4999ec75 tweakdefaults: move book -D to core
Summary: Continue to move tweakdefaults functionality to core.

Reviewed By: ikostia

Differential Revision: D10376327

fbshipit-source-id: 79a9d08c74e6ec14c83ae641fa2c3a6619da2f76
2018-10-15 10:34:00 -07:00
Phil Cohen
1d8a354bfb tweakdefaults: move commit -M to core
Summary: Clean it up a bit too.

Reviewed By: ikostia

Differential Revision: D10359624

fbshipit-source-id: 287bd9013fdd6eb33304def7e4f6afdd9f618ef0
2018-10-15 10:34:00 -07:00
Mark Thomas
f18bd9714d help: improve some help messages
Summary: Make a few help messages clearer.

Reviewed By: phillco

Differential Revision: D10356915

fbshipit-source-id: 277d4cecbd17b647d6dd01209ff6f93a926d37d4
2018-10-15 09:37:19 -07:00
Mark Thomas
36c697f8e0 help: new default help
Summary:
Replace the default help for Mercurial with a curated list of interesting
commands, categorized by their use case.

Reviewed By: phillco

Differential Revision: D10356916

fbshipit-source-id: 65e578a4bfde7b0ad04e7107f4e77d8ea882d78a
2018-10-15 09:37:18 -07:00
Phil Cohen
0e9d69b41e tweakdefaults: move allowtags to core (as ui.allowtags)
Summary: NB: `hg tags` still prints out all tags, just with a warning first. Maybe we could disable that entirely too while we're here.

Reviewed By: ikostia

Differential Revision: D10314175

fbshipit-source-id: 603a4dc46e05337189934803a18eef1188a02272
2018-10-15 08:05:13 -07:00
Phil Cohen
23eb56f4a5 tweakdefaults: replace allowrollback with core implementation
Summary:
It turns out core already implemented this, so let's just use their version.

Switch the facebook.rc config to it.

Reviewed By: ikostia

Differential Revision: D10306234

fbshipit-source-id: b0ee5e865ec4e0d8412dbd310a7e5017399b48c9
2018-10-15 08:05:13 -07:00
Phil Cohen
24275c4f80 tweakdefaults: move allowmerge to core
Summary:
Let's start moving tweakdefaults things into core.

Since we set the config in our rc files, I've renamed it.

Reviewed By: ikostia

Differential Revision: D10306236

fbshipit-source-id: 9a6b3bf7e22d8faf7b53446021660bb0923cf666
2018-10-15 07:28:22 -07:00
Saurabh Singh
814d5760cf test-fb-hgext-dialect-backups: fix test
Summary: This tests works with `run-tests.py` but fails with buck.

Reviewed By: mitrandir77

Differential Revision: D10378486

fbshipit-source-id: 7112560a2d6b05b0a39f3df423ccac52bdc5202c
2018-10-15 05:26:04 -07:00
Mark Thomas
613561b5e7 absorb: display affected commits and prompt user to confirm
Summary:
Update hg absorb to use the templater and display the first line of the
description of the affected commits.

Also change the default behaviour to display the changes and prompt the user to
confirm that absorb is going to do what they want.  Use the new `-a` option to
get the old behaviour.

Reviewed By: quark-zju

Differential Revision: D10366510

fbshipit-source-id: 23df2e5ab2d21a0805a16e7118686a29634d2918
2018-10-13 01:02:10 -07:00
Jun Wu
fcf535a3e5 fsmonitor: do not set watchman clock to None
Summary:
There are some code paths (ex. "purge --all") that sets watchman clock to None
unexpectedly. That makes the next command slow. Bypass it by detecting the case
and avoid setting clock to None.

Reviewed By: DurhamG

Differential Revision: D10188143

fbshipit-source-id: 4c35dfcee658ca2075d686da7d886e4b3a352b5a
2018-10-12 19:23:01 -07:00
Jun Wu
3f866b49cf tests: add a test demonstrating watchman clock gets reset after purge --all
Summary:
With treestate, watchman clock is not expected to be reset. But `purge --all`
bypasses some fsmonitor code paths and manages to reset the clock. Add a test
to show that.

Reviewed By: DurhamG

Differential Revision: D10188142

fbshipit-source-id: 4524979fb96d41fab881b7ee44ad9fa854081b26
2018-10-12 19:23:01 -07:00
Saurabh Singh
3d88ec0346 record: move extension into core
Summary:
This extension exposes only the `record` command which can be easily
moved to core. This commit achieves the same.

Reviewed By: ikostia

Differential Revision: D10360759

fbshipit-source-id: 25f0c46aa3fa9b19ab8ba03a6b4e8598bc003c7a
2018-10-12 11:16:46 -07:00
Durham Goode
c8a916a4a6 dirstate: move some untrack() use cases into delete()
Summary:
dirstate.untrack is used in two cases. Let's move the case where the
file is known to be actually deleted from disk to its own function. This allows
the treestate implementation to actually remove the entry from the structure,
which solves some case sensitivity issues.

Reviewed By: quark-zju

Differential Revision: D10317737

fbshipit-source-id: 09bc35d01cf5e52fdcbf45ea39c5d2f85fa39949
2018-10-12 09:38:25 -07:00
Durham Goode
d7c8bc2083 dirstate: introduce test that demonstrates case sensitivity bug
Summary:
There's a treestate bug on case insensitive filesystems where updating
across a case rename can cause junk to show up in hg status. A future diff fixes
this, but let's add a test first.

Reviewed By: ikostia

Differential Revision: D10317739

fbshipit-source-id: c1aa274cb55dd64cdb54ceadbd3c306151bd84d6
2018-10-12 09:38:25 -07:00
Durham Goode
a0fdd80720 dirstate: rename drop to untrack
Summary:
dirstate.drop() is used in two different situations. 1. To make a
tracked file become untracked, and 2. To remove a file from the dirstate
entirely. In the treestate case, this difference matters, so let's split drop
into two functions, one to mark something as untracked, and the other to remove
it entirely.

In this first patch we just rename drop to untrack. The next patch will
introduce the new delete function.

Reviewed By: ikostia

Differential Revision: D10317738

fbshipit-source-id: 85950ab1b1a10cd481edcfbba6da445b3dbf6397
2018-10-12 09:38:25 -07:00
Saurabh Singh
cd49463e2c show: move the extension into core
Summary:
The extension only offers one command i.e. `show` which can move into
core.

Reviewed By: ikostia

Differential Revision: D10302192

fbshipit-source-id: 9473ec8c80e52506e1b7de62b2c90a51c29419c1
2018-10-12 07:03:11 -07:00
Saurabh Singh
d0d21c955f show: replace with the fbshow extension
Summary:
The functionality we care about is provided by the `fbshow` extension.
Therefore, lets replace the `show` extension with the `fbshow` extension.

Reviewed By: ikostia

Differential Revision: D10302193

fbshipit-source-id: e6d137f52427d5e6f124714d06b5b55ef0db7c3c
2018-10-12 07:03:11 -07:00
Saurabh Singh
7e44f44298 show: remove the extension
Summary:
This commit just removes the `show` extension.

This commit was split out of D10302193 to address the review comment in that
diff.

Reviewed By: ikostia

Differential Revision: D10359525

fbshipit-source-id: b77a08a7efbaa56eb5a4ceb2dbb3fecaba35f58b
2018-10-12 07:03:11 -07:00
Kostia Balytskyi
40991e7fe6 shelve: fix tests that rely on traditional shelve
Summary: Traditional shelve did not require `obsstore` to be enabled, which means that `saved bundle` messages were printed a lot. This change fixes all tests that expect these messages.

Reviewed By: singhsrb

Differential Revision: D10261258

fbshipit-source-id: 2b4b10ee94ae9b5723cb69fc8f7c29bc65613774
2018-10-12 06:30:04 -07:00
Kostia Balytskyi
7068d0d8fb shelve: move obsshelve into shelve and fix a bug
Summary:
The bug:
This happens because `repo['']` resolves to a `wctx`. This might be undesirable
in its own right, but before we fix that, we can work it around here.

Reviewed By: singhsrb

Differential Revision: D10261261

fbshipit-source-id: 8cb0e96762ffba24030f9e6bae8b0d0c108e3938
2018-10-12 06:30:04 -07:00
Kostia Balytskyi
aaf4ffbdfa shelve: remove the original shelve extension
Summary: This is a first step towards making `obshelve` a real `shelve`.

Reviewed By: singhsrb

Differential Revision: D10261262

fbshipit-source-id: 7dccfbd7958cdf674c33c8ead73dcd279cebade6
2018-10-12 06:30:04 -07:00
Saurabh Singh
6317ba0ca2 amend: replace with the fbamend extension
Summary:
The functionality we care about is provided by the `fbamend`
extension. Therefore, lets replace the `amend` extension with the `fbamend`
extension.

Reviewed By: farnz

Differential Revision: D10320739

fbshipit-source-id: 5700d39f488777fcc4033f60ce0a51cda15ef2ad
2018-10-11 06:59:23 -07:00
Jun Wu
4f1f17133d sparse: do not ignore root directory ""
Summary: `repo.dirstate._ignore("")` should return False.

Reviewed By: DurhamG

Differential Revision: D10316447

fbshipit-source-id: df0ee2c5474784532280b7031623c135a784a196
2018-10-10 16:42:41 -07:00
Jun Wu
617cafd8a2 treestate: add "dirfilter" parameter to "walk" API
Summary: This allows fitlering a large ignored directory quickly.

Reviewed By: markbt

Differential Revision: D10281987

fbshipit-source-id: 026887beea2cf5adfcfa498baf8c9b05a84f4424
2018-10-10 11:36:26 -07:00
Saurabh Singh
f6e0d2d1ee inhibit: remove the extension
Summary:
The logic we care about has been moved to core so we can delete the
`inhibit` extension.

Reviewed By: markbt

Differential Revision: D10276448

fbshipit-source-id: 44cabe5d561344cf8f196127ce52491e4654b598
2018-10-10 10:01:45 -07:00
Mark Thomas
5351ce3851 treestate: implement debugpathcomplete fastpath
Summary:
Treestate is missing its pathcomplete fastpath.  This makes tab completion for
filenames slow on large repositories.

The Rust implementation already supported the feature, it just needs to be
called from the debugpathcomplete commands.

Reviewed By: quark-zju

Differential Revision: D10259633

fbshipit-source-id: f918d55c5bcd21805615710c0eb6302f8ea4b15c
2018-10-10 06:49:05 -07:00
Mark Thomas
f47bd8c33d treestate: move treedirstate to core
Summary:
Parts of the treedirstate implementation were left in the extension.  Since
treestate is now in core, and the two are intertwined, treedirstate should be
in core, too.

In doing so:
- Change the garbage collection behaviour to match that of treestate.
- Use the treestate config options for configuring repacking and garbage
  collection.
- Make more of the code common.

Reviewed By: quark-zju

Differential Revision: D10258265

fbshipit-source-id: 89e82bc7662a3d1251fa9886751897cfc46cd66a
2018-10-10 03:53:20 -07:00
Durham Goode
e696863ba6 tests: update tests
Summary: D10244968 changed the parser output but missed this test case.

Reviewed By: quark-zju, singhsrb

Differential Revision: D10261202

fbshipit-source-id: f3b6a4429b792e413f285fb33dfd6b64934ec477
2018-10-09 11:57:44 -07:00
Durham Goode
589f254150 treemanifest: strip trees from revlog even in treeonly mode
Summary:
On the server, once we enter treeonly mode we still want to be able to
strip trees from the revlog.

Reviewed By: quark-zju

Differential Revision: D10248895

fbshipit-source-id: 15faec870370d4c28f6a83058eb1bf19cb414d29
2018-10-09 07:58:11 -07:00
Durham Goode
6370e8882b treemanifest: add test to demonstrate strip bug
Summary:
There's a bug where strip in a treeonly server will not strip the tree
revlogs. Let's add a test so a later fix can show the impact.

Reviewed By: quark-zju

Differential Revision: D10248897

fbshipit-source-id: f45e5abc59eeb9398ba17dd927a5f8eb50bc51af
2018-10-09 07:58:11 -07:00
Durham Goode
dd89e315f1 treemanifest: add hook to ensure commit/manifest integrity
Summary:
As we transition to treeonly, let's be sure every push contains a
manifest for every commit. To do so, let's add a hook that checks this.

Reviewed By: quark-zju

Differential Revision: D10244912

fbshipit-source-id: 6c2023b1cba5663ed386888a2007a005bc02f688
2018-10-09 07:58:11 -07:00
Durham Goode
64b35bdc40 treemanifest: add test to demonstrate broken push behavior
Summary:
There's an issue now where if a client is treeonly but does not have
sendtrees enabled, it could push commits to the server without manifest data.
Let's add a test for this.

The next commit will introduce a hook to catch this case.

Reviewed By: quark-zju

Differential Revision: D10244913

fbshipit-source-id: 2d6c3081c7190831e0368b0dab472d14e893471f
2018-10-09 07:58:11 -07:00
Lukas Piatkowski
b1b8fd73e1 hg tests: fix test-config.t after upgrading pest and adding EOI to grammar
Summary: pest was upgraded by me to version 2.x which introduced the concept of End Of Input in the parsin rules. Modify the test case to be aware of this.

Reviewed By: singhsrb

Differential Revision: D10255598

fbshipit-source-id: 31ecf56f5cf75a16c799a93aefe7df9a3837b902
2018-10-09 05:11:14 -07:00
Aida Getoeva
6657b619f0 create pack files for local data
Summary: Create pack files instead of loose files for local data. Now this feature is under the config flag.

Reviewed By: DurhamG

Differential Revision: D9700992

fbshipit-source-id: b1ee897ac6fd2fe208f54f999b230353aebaca5b
2018-10-09 04:19:46 -07:00
Mark Thomas
f353521eb9 revset: move age extension to core
Summary:
The age extension provides a couple of revsets relating to commit ages.  Move
these to core.

Differential Revision: D10239000

fbshipit-source-id: 6ebf3aa263b72e4bbbe25bd516f77b17145e6e7f
2018-10-08 12:01:44 -07:00
Aida Getoeva
346ddf5248 bisect: don't test empty commits in sparse profiles
Summary:
Currently `hg bisect` asks to run test on all commits it picked as a result of bisection, even if the changes between last checked nodes and chosen one relate to the files, which are not in the sparse profile.
And so it updates to the one of such commits, shows that "0 files were updated" and asks to run tests.

In this diff I check next potential node (result of bisecting) if there are changes between last good commit/last bad commit and the node. And go further to the next bisection iteration if the node can be skipped (nothing was changed since last good commit in sparse profile's files, so we can assume that the node is good as well).

If there are changes on both sides: between bad and the node, good and the node, I ask to run tests.

Reviewed By: markbt

Differential Revision: D9629683

fbshipit-source-id: f8c5d82f7b44ac14a9190c846ee65d635e447af1
2018-10-08 06:16:19 -07:00
Jun Wu
03e4494e3d lfs: verify sha256 before writing them to local store
Summary:
Verify SHA256 before writing content to the local blob store. This avoids
issues when the remote store does not response with the correct content.

Differential Revision: D10212567

fbshipit-source-id: 5683058670487df53fb14653d83c27da11367e76
2018-10-04 19:49:44 -07:00
Jun Wu
7f10a74837 lfs: add a test demostrating SHA256 hash check does not happen
Summary: As the title.

Differential Revision: D10212568

fbshipit-source-id: 3ad60f93909f5f76c07489bcb046a32f2f93d8f8
2018-10-04 19:49:44 -07:00
Mark Thomas
171b310857 fbamend: move predecessor/successor revsets to core
Summary:
Move the `predecessors` and `successors` revsets to core, and unify the
variants as a single revset.

Before:
* `predecessors` (provided by fbamend) only returned the immediate
  predecessors.
* `successors` (provided by core) returned the given commit and all eventual
  successors.
* `allpredecessors` and `allsuccessors` (provided by fbamend) returned all
  eventual predecessors and successors, not including the original commit.

Now all these revsets work like the old core `successors`, and additionally
have `depth` and `startdepth` parameters which can be used to customize the
behaviour.  This makes them analogous to `ancestors` and `descendants`.

To maintain compatibility with existing users of `allpredecessors` and
`allsuccessors`, these revsets default to a start depth of 1, so they
do not include the original commits.

Reviewed By: quark-zju

Differential Revision: D10028043

fbshipit-source-id: e006700ccf430b7c5d6bd9588253872bce9a18ed
2018-10-03 13:32:56 -07:00
Durham Goode
b3e328c903 treemanifest: don't store repo objects in the manifestrevlogstore
Summary:
Previously the manifestrevlogstore kept a copy of the changelog, the
store, and the svfs from the initial repo object. It's possible that these will
change or be replaced over time, so it's not safe to cache them. Instead let's
just fetch them again each time we need it.

Reviewed By: quark-zju

Differential Revision: D10156425

fbshipit-source-id: ac1e310b51be0377ba9bea75aa1806d256cc5b87
2018-10-03 08:52:19 -07:00
Durham Goode
85a676e406 treemanifest: add test for pushing treeonly commits to a treeonly repo via pushrebase
Summary:
This flow has a bug, so let's introduce a test to expose the break. The
next diff will fix the bug.

Reviewed By: quark-zju, singhsrb

Differential Revision: D10156424

fbshipit-source-id: 51d1d8da6728ee930dc1440cd3e685d7c5b5df2a
2018-10-03 08:52:18 -07:00
Stanislau Hlebik
d93c5269be pushrebase: record pushrebases failed on hooks
Summary:
At the moment they are not recorded because setrecordingparams may not be set
before hooks are called.

Also hooks weren't recorded because pushrebasereplacements weren't correctly
set and KeyError was thrown. This diff fixes it

Reviewed By: quark-zju

Differential Revision: D10147933

fbshipit-source-id: ef33d3e4efa7f3c42e7fcc22ee5f6e54068bf1dc
2018-10-03 04:20:22 -07:00
Stanislau Hlebik
056dad1e1b wireproto: log reponame
Summary:
Let's log reponame as well so that we can tell requests to different repos
apart.

I named config value `common.reponame` so that we can start using it in different extensions that also need reponame (for example, hgsql and infinitepush)

Reviewed By: farnz

Differential Revision: D10127734

fbshipit-source-id: 031c7393dfce43bf47474ac0878c1e68ddabec50
2018-10-02 05:05:41 -07:00
Stanislau Hlebik
96510842e5 clienttelemetry: use clienttelemetry when recording wireproto requests
Summary:
It's useful to know because we can track down slow requests and potentially fix
them on the client.

Reviewed By: farnz

Differential Revision: D10127735

fbshipit-source-id: d21088b50065f322b0c312f048f5828b3d96f99f
2018-10-02 05:05:41 -07:00
Mark Thomas
06a462bb89 fbsparse: add switchprofile command
Summary:
Add the `sparse switchprofile` command, which lets users specify a set of
sparse profiles they would like to switch to.  This is equivalent to `hg sparse
reset` followed by `hg sparse enableprofile`, but in a single step.

Reviewed By: farnz

Differential Revision: D10141938

fbshipit-source-id: 5a1e547d21e3246237fffb17f3b512da18fac804
2018-10-02 03:35:49 -07:00
Zsolt Dollenstein
64d45ccdb6 Format with black 18.9b0
Summary: Reformat all opted-in python code with version `18.9b0` of Black.

Reviewed By: ambv

Differential Revision: D10126605

fbshipit-source-id: 82af0d645dd411ce8ae6b8d239e151b3730cd789
2018-10-01 07:21:42 -07:00
Mark Thomas
c6703f295a fbamend: show a hint when split commits have the same Phabricator Diff
Reviewed By: quark-zju

Differential Revision: D10105739

fbshipit-source-id: 7f2c7664a2e8eb4704ff2e5800c1c24cbedb3fdc
2018-10-01 06:21:59 -07:00
Stanislau Hlebik
5b12e92cc2 pushrebase: record failed pushrebase conflicts
Summary:
In D10023543 stackpush was added, and conflict check can happen earlier. In
that case failed pushrebase wasn't recorded. This diff fixes it.

Reviewed By: quark-zju

Differential Revision: D10119679

fbshipit-source-id: ef12e00a43375151f81a95eec2d9f02db0a9b12b
2018-10-01 04:05:57 -07:00
Jun Wu
df06404eb0 hgsql: correct sqlstrip
Summary: When stripping rev x, revlog revisions with linkrev >= x should be deleted.

Reviewed By: phillco

Differential Revision: D10108592

fbshipit-source-id: 2f9f5663327c4494bd7e836ab24ffc7e507530f4
2018-09-28 16:58:37 -07:00
Jun Wu
d0d8a6a74b hgsql: rename variables to make things more obvious
Summary:
* Rename takelock to dbwritable
  The word "lock" is unclear what lock (local or SQL) it is. Make it clear it's
  all about database writes.

* Rename waitforlock to enforcepullfromdb
  Again, unclear what lock it is. It's also unclear what it does. Rename to
  "enforce pull from db" to make it obvious.

* Rename syncdb to pullfromdb
  "sync" is unclear about what direction to sync. Use "pullfromdb" to make it
  clear.  The hook name is unchanged for compatibility.

Reviewed By: phillco

Differential Revision: D10108594

fbshipit-source-id: fff405e2df9e926f5db436ef74cb5a9aacaebdb4
2018-09-28 16:58:36 -07:00
Mark Thomas
a77d98c8c9 obsshelve: update after shelve transaction has completed
Summary:
Delay updating the working copy until after the transaction that created the
obsshelve commit has completed.  This means we won't update away from the
user's changes until after their work is safe, so if the update is interrupted
for any reason, the user will be able up do a clean update and then unshelve to
get their work back.

Reviewed By: liubov-dmitrieva

Differential Revision: D10102089

fbshipit-source-id: 5709d3915a6c458ba7cfb37ba5e0be5c6e8fcbb2
2018-09-28 09:50:10 -07:00
Mark Thomas
3bfae82702 obsshelve: add test demonstrating dataloss in interrupted shelve
Summary:
If the `update` step is interrupted, then the transaction that created the
obsshelve commit is rolled back, but the update can't be rolled back, so the
files that have been shelved are lost.

Reviewed By: liubov-dmitrieva

Differential Revision: D10102088

fbshipit-source-id: f5bcac5c92069cc6ff3d1d9b7fb7ee507003d8eb
2018-09-28 09:50:10 -07:00
Liubov Dmitrieva
f4858c3c1c add to commit and amend commands ability to show information about the
Summary:
This is for sandcastle and other automated tools.

They will not need to run extra commands like hg log after amend to learn new
hash.

Reviewed By: markbt

Differential Revision: D10101887

fbshipit-source-id: 7c9931776a03f4335bdfe0a19e7d569e3dc4c4ba
2018-09-28 07:23:03 -07:00
Mark Thomas
78e2b44b06 localrepo: devel-warn when accessing repo.vfs directly
Summary:
Callers should prefer repo.localvfs (or perhaps repo.sharedvfs) rather than
calling repo.vfs directly.  Warn when repo.vfs is accessed directly.

Reviewed By: quark-zju

Differential Revision: D9699167

fbshipit-source-id: 83b43fd347da6e68376eaab081b7f6e2d8c5d044
2018-09-28 07:23:02 -07:00
Mark Thomas
372aef5b2d hgsubversion: util develwarn should work without config key
Summary:
In the hgsubversion tests, a develwarn from another component (which doesn't
have a `config` key) crashes with a `KeyError`.  Change to `get` so that
it doesn't crash.

Reviewed By: quark-zju

Differential Revision: D9699155

fbshipit-source-id: c360d5fb5ab7daf7f609d41e0ddfb7456b022666
2018-09-28 07:23:02 -07:00
Mark Thomas
99b3d7c398 share: remove shareutil and _sharedprimaryrepo
Summary:
These are no longer necessary.  Callers should use the sharedvfs to access the
shared repo's .hg directory.

Reviewed By: quark-zju

Differential Revision: D9699163

fbshipit-source-id: 9b9cd584d721c174a7eab06f6abcedc3a943233b
2018-09-28 07:23:02 -07:00
Mark Thomas
b439719a17 hgsubversion: use repo.sharedvfs instead of srcrepo.vfs
Summary:
Update hgsubversion to consistently use repo.sharedvfs, rather than using the
vfs of the srcrepo.

Reviewed By: quark-zju

Differential Revision: D9699165

fbshipit-source-id: 1f4dacdd23ebc3baaa0d09b65e45d4ceeb067559
2018-09-28 07:23:01 -07:00
Mark Thomas
483e3a915c hg: use repo.localvfs instead of repo.vfs
Summary: Update references in core mercurial to use repo.localvfs instead of repo.vfs.

Reviewed By: quark-zju

Differential Revision: D9699162

fbshipit-source-id: 0401677d2b0a1340e66cffb7ee907a0d93aa6717
2018-09-28 07:23:00 -07:00
Mark Thomas
29c915a4c1 bookmarks: use repo.localvfs and repo.sharedvfs instead of repo.vfs
Summary:
Update bookmarks to work correctly when shared.  Rather than copying the
bookmarks file over after transaction handling, update the file in both
locations when bookmarks are shared.

Reviewed By: quark-zju

Differential Revision: D9699158

fbshipit-source-id: 2f75aaac364ffe02e59441ac0f39fb7d8e5d5d2e
2018-09-28 07:23:00 -07:00
Mark Thomas
0b425b5f11 txnutil: add HG_SHAREDPENDING and trysharedpending
Summary:
Add `HG_SHAREDPENDING` which contains the path to the shared primary repository,
similar to how `HG_PENDING` contains the path to the local repository.

Repositories that are not shared check whether either of these refer to the
local repository path.  Repositories that are shared check whether the pending
directory matches their own path, or the shared-pending directory matches their
shared path, via the new `trysharedpending` function.

This fixes the asymmetry in shared repos where pending changes made in a shared
repo were not visible in the primary repo, even though they were visible the
other way around.

Reviewed By: quark-zju

Differential Revision: D9699164

fbshipit-source-id: 31bc5fb2df6e9b9468b6ef39aabf877045c2a011
2018-09-28 07:23:00 -07:00
Mark Thomas
0fa782e83d localrepo: split vfs into localvfs and sharedvfs
Summary:
Split the `repo.vfs` object into two.  When a repo is not shared, these are
both the `.hg` directory of the repo.  When it is shared:

* `repo.localvfs` represents the `.hg` directory of the local repository.
* `repo.sharedvfs` represents the `.hg` directory of the shared primary
  repository.

The old `vfs` is an alias for `localvfs`.  In the future, access through
this name will be deprecated to force callers to think whether they want
the local or shared hg directory.

Reviewed By: quark-zju

Differential Revision: D9699160

fbshipit-source-id: 6600df855c59b6df13e919399192789a873231c6
2018-09-28 07:23:00 -07:00
Jun Wu
77f7a24e4f statprof: stop early if profiling ends early
Summary:
Previously, statprof uses a naive `time.sleep`, which cannot be interruptted
easily (considering Windows compatibility). Change it to `threading.Event.wait`
so it can end early without waiting for the full cycle of the sampling period.

Reviewed By: wez, kulshrax

Differential Revision: D10067234

fbshipit-source-id: 24e5fc0ab05491cb3e7ff34024402842ac3d7d44
2018-09-26 17:52:27 -07:00
Jun Wu
9cf0c87149 hgsql: log rows read and write
Summary:
This gives us more information about how large the hgsql operation is.

As we're here, move `sqlwriteunlock` to an earlier place so the logging is outside
the sql lock. Also document `unbundle` a bit so it's clear `repo.transaction()` only
takes sql lock in `unbundle` context.

Reviewed By: phillco

Differential Revision: D10056307

fbshipit-source-id: 5d3361b4044e6fcf01e60409ef1ecb34da34ccac
2018-09-26 16:35:14 -07:00
Jun Wu
4ddedaf7d2 tests: remove most rocksdb test cases
Summary:
RocksDB and InnoDB are highly compatibile. There is no need to test RocksDB
engine for every hgsql related tests. Only use rocksdb for 2 of the tests.

Reviewed By: phillco

Differential Revision: D10055068

fbshipit-source-id: f9b7ef546fe7d457b0390e49014ebbe56d3c12c1
2018-09-26 14:20:15 -07:00
Phil Cohen
5f9bd1a7da pushrebase: run hgsql sync after running prepushrebase hooks
Summary:
Our hypothesis is that if the prepushrebase hooks take a significant amount of time, the repo state will get out date, causing hgsql to degrade under load.

This uses the previous test to simulate new commits coming in to the database while a single server is busy running prepushrebase hooks. The new code causes a second sync to occur just after running the hooks.

Reviewed By: quark-zju

Differential Revision: D9999683

fbshipit-source-id: 43d2390b476d090a66353555247c9a623386e75a
2018-09-25 18:23:12 -07:00
Phil Cohen
95a45ebb7c pushrebase: refine the "cannot rebase public changesets" test
Summary:
This test case is a bit simpler given the problem -- there's no need for the holding push hook.

Instead, you just need a server that's missing a public commit. (Simulate an `hg strip` on one of the servers. `hg strip` isn't allowed, so create another repo with the extra public commit instead.)

Reviewed By: quark-zju

Differential Revision: D10043378

fbshipit-source-id: 532d8a2791abe5aaa6b6932747c7e0145202e8fe
2018-09-25 18:23:11 -07:00
Jun Wu
83559cfb29 pushrebase: introduce a stackpush fast path
Summary:
The fast path avoids recreating the bundlerepo in the critical section, which
is like a reliable 0.8s win.

See the docstring in stackpush.py for details. It does not replace all use cases
that the old code path supports. So the old path is preserved.

Since it's a drop-in replacement, make it the default.

Reviewed By: phillco

Differential Revision: D10023543

fbshipit-source-id: eaceb9ae5067ab9040aa10cc65170ae54abd3331
2018-09-25 16:06:21 -07:00