Summary: adding ui config to allow deploying first the 'filling the client database' then 'pushing to and pushing from the server database' and finally the 'copytracing' part
Test Plan: adding those ui configs, the former tests still pass
Reviewers: #sourcecontrol, rmcelroy
Differential Revision: https://phabricator.fb.com/D2672217
Tasks: 8660367
Summary: moving remote to a ui config. servers are True, clients are False.
Test Plan: the former tests still pass
Reviewers: #sourcecontrol, rmcelroy
Differential Revision: https://phabricator.fb.com/D2671855
Tasks: 8660367
Summary: Added all the sql commands for the MySQL remote database, and gathered all the commands in a single function
Test Plan: Created a serverrepo, two client ones, did push and pulls between them
Reviewers: #sourcecontrol, rmcelroy
Reviewed By: rmcelroy
Differential Revision: https://phabricator.fb.com/D2661606
Tasks: 8660367
Signature: t1:2661606:1447875185:0e9d3876b2f509028585349a9d05b447876b3da0
Summary:
When a sparse profile is not found (perhaps because the user used an incomplete
or misspelled path), warn the user that a profile is not found.
There was already a debug message for this, elevate it to a warning.
Test Plan:
Run the tests:
cd tests
python run-tests.py test-sparse*.t
Manual test:
hg init test
cd test
cat > .hg/hgrc <<EOF
[extensions]
sparse=$(dirname $TESTDIR)/sparse.py
EOF
touch testfile
hg add testfile
hg ci -m 'initial commit'
hg sparse --enable-profile foo/bar
hg sparse --disable-profile foo/bar
and the following warning is printed twice:
warning: sparse profile 'foo/bar' not found in rev <hash> - ignoring it
Disabling the warning with:
cat >> .hg/hgrc <<EOF
[sparse]
missingwarning=false
EOF
hg sparse --enable-profile foo/bar
hg sparse --disable-profile foo/bar
Reviewers: rmcelroy, durham
Reviewed By: durham
Differential Revision: https://phabricator.fb.com/D2668406
Tasks: 8994281
Signature: t1:2668406:1447948981:66d16b94ea7ea682b9e0c3faaccc1a364283364d
Summary: centralizing the sqlite commands in a function - adding a 'repo' column to the sqlite database so that it is similar to the future XDB
Test Plan: the former tests still pass
Reviewers: #sourcecontrol, rmcelroy
Differential Revision: https://phabricator.fb.com/D2665931
Tasks: 8660367
Summary:
replacements for the newly-picked node were not present in the
histedit state before successfully continuing which made --abort
unaware of them.
This isn't clean solution. But the stop command (with node) will cease to
exist in near future (it will be replaced by the normal pick and just "stop"
in following line for which we will have better solution). This should suffice
until then.
Test Plan:
test attached
tested manually too
Reviewers: #sourcecontrol, rmcelroy
Reviewed By: rmcelroy
Differential Revision: https://phabricator.fb.com/D2661831
Tasks: 9111207
Signature: t1:2661831:1447790670:a26ee58cacb77e6cf675a1e99d2eadcbffb684d9
The no-date-rewrite-on-rebase test had output that assumed date rewriting. It
should be outputting the first commit which has a recent date (commit 7) instead
of the current commit (commit 12) which did not have it's date rewritten.
Summary:
There was a bug where if you had a sparse profile and updated across revs that
both A) add file X to the sparse profile, and B) changed the permissions on file
X (ex: to make it executable), the update would fail.
This was caused by the edit permission action being present in the action list
as an 'edit' action, so the profile changing code did not add the 'get' action
that would actually put it on disk.
The fixes is to just add the 'get' action for every file that wasn't previously
in the profile (overwriting any action that had already been computed).
Test Plan: Added a test, and verified it against the reported repro case
Reviewers: #sourcecontrol
Differential Revision: https://phabricator.fb.com/D2652793
Summary: the move data concerning the ctx is pushed to the remote sqlite database at the same time as hg push
Test Plan: testing a push between a client and server repo
Reviewers: #sourcecontrol, rmcelroy
Differential Revision: https://phabricator.fb.com/D2643067
Tasks: 8660367
Summary: If some contexts are not present in the local database during a retrieve, a request is send to the server for those moves one time through a 'pull(revs)' call. When doing a rebase, a check is performed beforehand to see if the local database contains the contexts of the rebased-to branch.
Test Plan: Rebasing in the middle of a branch for which the moves are not known
Reviewers: #sourcecontrol, rmcelroy
Differential Revision: https://phabricator.fb.com/D2634365
Tasks: 8660367
Summary: Changed the format under which the move dictionaries are sent by bundle2 and sorted the sql test results so that it is constant
Test Plan: The former tests (fill-db.t, copytrace.t and bundle2.t) still pass
Reviewers: #sourcecontrol, rmcelroy
Differential Revision: https://phabricator.fb.com/D2634262
Tasks: 8660367
Summary:
Previously rebase retained the commit date from the original. Now it uses current time.
Added config option 'tweakdefaults.rebasekeepdate' to save original date in graft.
Test Plan: ./run-tests.py test-tweakdefaults.t
Reviewers: rmcelroy
Reviewed By: rmcelroy
Differential Revision: https://phabricator.fb.com/D2646736
Tasks: 8770194
Signature: t1:2646736:1447368541:e9735f75b394a25b72d1a5cc4cd26454c2231c91
Summary:
If tracking was set up, 'hg push' was not invoking the pushrebase logic, like it
would if the user ran 'hg push --to master'.
This is required for us to unify all pushes through pushrebase, so we can move
the hooks out of the lock and into prepushrebase.
Test Plan: Added a test
Reviewers: #sourcecontrol
Differential Revision: https://phabricator.fb.com/D2635253
Summary:
Requiring that developers use the run-tests from the core hg repo has
some downsides:
1) It forces the tests to run against whatever version of Mercurial I have
checked out right now. I usually want to run tests against my installed
Mercurial (since we're likely to deploy a new fb-hgext without a new hg).
2) It makes it harder for people to contribute. Someone wrote a new extension,
and in order for them to test it, I have to explain how to checkout hg and how
to run tests using the hg run-tests and first they must checkout the rev we
have deployed, not @.
Test Plan: Ran the tests
Reviewers: pyd, cdelahousse, #sourcecontrol
Subscribers: ps
Differential Revision: https://phabricator.fb.com/D2632574
Summary:
The branch cache is used to store a cache of each branches heads. If your
Mercurial repo doesn't have any branches though, this can be slow.
This tweak allows simplifying the branchcache computation to just say every head
in the repo belongs to the 'default' branch. This shaves 600ms off of some
commit commands.
I tested it by running the entire Mercurial test suite with it enabled, and
scanning the failures to make sure they were only related to repos that had
non-default branches.
Test Plan:
$ cd ~/hg/tests
$ ./run-tests.py -S -j 48 --extra-config-opt=perftweaks.disablebranchcache=True --extra-config-opt=extensions.perftweaks=/data/users/durham/fb-hgext/perftweaks.py
Reviewers: #sourcecontrol, rmcelroy
Reviewed By: rmcelroy
Subscribers: rmcelroy
Differential Revision: https://phabricator.fb.com/D2630360
Signature: t1:2630360:1447092762:adab0456ff842cf508b7f46e988ef9d865fa3988
Summary: Uses the local sqlite database to check for moves during the rebase - Wraps and copies the mergecopies function
Test Plan: Tests the different cases: renamed/renamed renamed/modified renamed/deleted deleted/renamed modified/renamed
Reviewers: #sourcecontrol, rmcelroy
Differential Revision: https://phabricator.fb.com/D2552629
Tasks: 8659945
Summary:
This adds an extension that allows configuring the repository such that any
commit that touches a file in directory foo/ will also have the change applied
to directory bar/. It will also block commits if they try to make divergent
changes to mirrored directories.
Test Plan: Added a test suite
Reviewers: #sourcecontrol
Subscribers: chip, aponomarenko
Differential Revision: https://phabricator.fb.com/D2602592
Summary:
The previous implementation relied on the python serialization of lists. This
resulted in some truncation due to line length in some infrastructure.
This patch makes it prettier.
Test Plan: Tests
Reviewers: #sourcecontrol, mitrandir
Reviewed By: mitrandir
Subscribers: mitrandir
Differential Revision: https://phabricator.fb.com/D2594066
Signature: t1:2594066:1446079418:cd27cea1f44a9d432984b8dc37b547450ff076ab
Summary:
Previously the output just said "searching for changes" then "updating
bookmark", which was kind of terse. It also showed the "adding XX changesets"
output without any context, which is kind of scary to see "adding 100
changesets" when I'm only pushing one commit.
Now we mention how many commits we're pushing, what the hash range is, and how
many commits are being downloaded.
Test Plan: Ran ze tests
Reviewers: #sourcecontrol, mitrandir
Reviewed By: mitrandir
Subscribers: mitrandir
Differential Revision: https://phabricator.fb.com/D2594007
Signature: t1:2594007:1446081446:99b77f4982acafc1f1940ba07b094a27dd05e354
Summary:
This adds an option for blocking non-pushrebase pushes. This is important
because it allows us to force every push through the pushrebase logic and
therefore allows us to put all the hooks in the prepushrebase hook (so people
can't avoid those hooks).
This is important for performance, since running the hooks in prepushrebase
allows us to run them while outside the lock.
Test Plan: Added a test
Reviewers: #sourcecontrol, rmcelroy
Reviewed By: rmcelroy
Subscribers: rmcelroy
Differential Revision: https://phabricator.fb.com/D2593512
Signature: t1:2593512:1446076882:9f5ee5d8bccd884f34c8284fbacb7d6f8e96f62f
Summary:
Since pushrebase allows running hooks outside of the lock, we want to force all
pushes to go through pushrebase. Step #1 of that is making push --force go
through the pushrebase flow.
The initial version is pretty naive. A future version might avoid the whole
graft process for performance sake.
Test Plan:
Added a test that creates a new bookmark. I also tested the same test
doing a force push.
Reviewers: #sourcecontrol, rmcelroy
Reviewed By: rmcelroy
Subscribers: rmcelroy
Differential Revision: https://phabricator.fb.com/D2588894
Signature: t1:2588894:1446076583:12b58048742b112a5d7cab839204c6219414f9ee
Summary:
Fbamend broke logfile. fbamend tends to write state to opts['message'] even
if -m or --message was not used at the cmdline. If you inputted a logfile
cmd arg, cmdutil.logmessage would see both opts['message'] and opts['logfile']
as populated and throw an abort exception. This is a workaround.
Test Plan: See test.
Reviewers: rmcelroy
Differential Revision: https://phabricator.fb.com/D2586779
Tasks: 7434543
Summary:
Previously commit --amend and amend retained the commit date from the original. Now it uses current time.
Added config option 'tweakdefaults.amendkeepdate' to save original date in graft.
Test Plan:
1) ./run-tests.py test-tweakdefaults.t
2) Add the following to ~/.hgrc
[extensions]
tweakdefaults = PATH_TO_tweakdefaults.py
fbamend = PATH_TO_fbamend.py
Create repo
hg init
Make a commit with date 0
echo 1 >> test.txt && hg add test.txt && hg commit -d "0 0" -m "initial commit"
Amend a commit via "amend" command and check the date.
echo 1 >> test.txt && hg amend && hg log -l 1
Do the same for "commit --amend" command
3) Add the following to ~/.hgrc
[tweakdefaults]
amendkeepdate = True
and repeat actions from step 2) (both for "commit --amend" and "amend"). Date should stay the same.
Reviewers: rmcelroy, #sourcecontrol, durham
Reviewed By: durham
Subscribers: durham, balazsbalazs
Differential Revision: https://phabricator.fb.com/D2570763
Tasks: 8770194
Signature: t1:2570763:1445539148:66b8b00ed51d486d39203dad830f4a50cdc8060d
Summary:
Previously graft retained the commit date from the original. Now it uses current time.
Added config option 'tweakdefaults.graftkeepdate' to save original date in graft.
Test Plan:
1) ./run-tests.py test-tweakdefaults.t
2)
Add the following to ~/.hgrc
[extensions]
tweakdefaults = PATH_TO_tweakdefaults.py
Create two bookmarks: test_1 and test_2, pointing to different commits
Graft commit from test_2 to test_1
hg up test_1 && hg graft test_2
Check the date in the log - it should be different from the date of test_2 commit
hg log -l 1
Add the following to ~/.hgrc
[tweakdefaults]
graftkeepdate = True
Strip latest test_1 commit
hg strip test_1
Again do the graft
hg up test_1 && hg graft test_2
and verify the commit date: should be the same as in test_2 commit
Reviewers: #sourcecontrol, rmcelroy, durham
Reviewed By: durham
Subscribers: balazsbalazs
Differential Revision: https://phabricator.fb.com/D2566177
Tasks: 8770194
Signature: t1:2566177:1445539026:2cd0b6b5b04247c17942f787d8921215def8e3fe
Summary:
I was mostly taking into consideration conflicted states when I wrote this
extension. That means that a repo could be in a clean merge state, that is,
where the working copy has two parents and no conflicted files, and morestatus
wouldn't display it's extra status output.
Test Plan: See new test
Reviewers: #sourcecontrol, durham
Reviewed By: durham
Subscribers: akushner
Differential Revision: https://phabricator.fb.com/D2567597
Tasks: 8802101
Signature: t1:2567597:1445468752:429a63dda5a7269841aee16631049b937c13360e
Summary:
Some changes in core made the output for merge conflicts change. I just made
certain tests reflect that.
Test Plan: ran the tests
Reviewers: #sourcecontrol, rmcelroy
Reviewed By: rmcelroy
Subscribers: rmcelroy
Differential Revision: https://phabricator.fb.com/D2566237
Tasks: 8797924
Signature: t1:2566237:1445456815:d5a1560bd3421de6b9955e44a8dd2698f0462f51
Summary:
Looks for similar files between the removed/missing and added/unknown
committed files
Test Plan:
Tests are done without 'commit' (testmode option)
mv + add + rm with several thresholds of similarity
changing the threshold of similarity
mv alone
mv + add + rm but not in committed files
Reviewers: #sourcecontrol, rmcelroy
Reviewed By: rmcelroy
Subscribers: durham, mitrandir, pyd, cdelahousse
Differential Revision: https://phabricator.fb.com/D2492693
Tasks: 8501037
Signature: t1:2492693:1445396857:a40d0aeb3c6592b1c8d2a93d089e4fdc46bde711
Summary: Added the --reuse-message/-M flag to `hg commit` via tweak defaults
Test Plan: See the tests
Reviewers: #sourcecontrol, durham, rmcelroy
Reviewed By: rmcelroy
Differential Revision: https://phabricator.fb.com/D2559541
Tasks: 8721257
Signature: t1:2559541:1445364124:db69a1b08defc0a84f314019ce1a01174e7006d3
Summary:
Adds configuration to .hgrc such that setting nooprebase = True
in the tweakdefaults section changes the behaviour of a noop
rebase such that the exit status is 0 (instead of 1).
Test Plan: See: https://phabricator.fb.com/P20083985
Reviewers: rmcelroy
Reviewed By: rmcelroy
Subscribers: dancol
Differential Revision: https://phabricator.fb.com/D2557089
Tasks: 8694501
Signature: t1:2557089:1445447745:fc35600d53f797d7242c2fcff9fac42867d7b651
Summary:
It's a nice property to have commits have increasing timestamps. Since we're
already rewriting commits during pushrebase, we can rewrite the timestamp to the
push time.
Test Plan: Added a test
Reviewers: #sourcecontrol
Differential Revision: https://phabricator.fb.com/D2554422
Summary:
Catnotate is a version of hg cat with output annotated with file name and line
number. Such output is very useful when running hg cat on multiple files
(for example in commit hooks).
Test Plan: unit tests
Reviewers: #sourcecontrol, pyd, mpm, durham, rmcelroy
Reviewed By: rmcelroy
Differential Revision: https://phabricator.fb.com/D2497470
Signature: t1:2497470:1444842798:9192ef3ef1603d068e7f38777def81a43bed0414
Summary:
According to pyd, Mercurial core now writes bundle2 bundles when the repo is
generaldelta, so we don't need this anymore. Plus we're using evolve now so
we're not producing many bundles anyway.
The motivation for disabling this is that the code broke due to changes from
upstream, and I was too lazy to fix it.
Test Plan: nope
Reviewers: pyd, ericsumner, #sourcecontrol
Differential Revision: https://phabricator.fb.com/D2538749