mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 00:45:18 +03:00
9c6bc630a3
Now that we have a mechanism for declaring path sub-options, we can start to pile on features! Many power users have expressed frustration that bare `hg push` attempts to push all local revisions to the remote. This patch introduces the "pushrev" path sub-option to control which revisions are pushed when no "-r" argument is specified. The value of this sub-option is a revset, naturally. A future feature addition could potentially introduce a "pushnames" sub-options that declares the list of names (branches, bookmarks, topics, etc) to push by default. The entire "what to push by default" feature should probably be considered before this patch lands.
148 lines
3.6 KiB
Perl
148 lines
3.6 KiB
Perl
$ hg init a
|
|
|
|
$ echo a > a/a
|
|
$ hg --cwd a ci -Ama
|
|
adding a
|
|
|
|
$ hg clone a c
|
|
updating to branch default
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
$ hg clone a b
|
|
updating to branch default
|
|
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
|
|
|
|
$ echo b >> b/a
|
|
$ hg --cwd b ci -mb
|
|
|
|
Push should provide a hint when both 'default' and 'default-push' not set:
|
|
$ cd c
|
|
$ hg push --config paths.default=
|
|
abort: default repository not configured!
|
|
(see the "path" section in "hg help config")
|
|
[255]
|
|
|
|
$ cd ..
|
|
|
|
Push should push to 'default' when 'default-push' not set:
|
|
|
|
$ hg --cwd b push
|
|
pushing to $TESTTMP/a (glob)
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files
|
|
|
|
Push should push to 'default-push' when set:
|
|
|
|
$ echo '[paths]' >> b/.hg/hgrc
|
|
$ echo 'default-push = ../c' >> b/.hg/hgrc
|
|
$ hg --cwd b push
|
|
pushing to $TESTTMP/c (glob)
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files
|
|
|
|
But push should push to 'default' if explicitly specified (issue5000):
|
|
|
|
$ hg --cwd b push default
|
|
pushing to $TESTTMP/a (glob)
|
|
searching for changes
|
|
no changes found
|
|
[1]
|
|
|
|
Push should push to 'default-push' when 'default' is not set
|
|
|
|
$ hg -q clone a push-default-only
|
|
$ cd push-default-only
|
|
$ rm .hg/hgrc
|
|
|
|
$ touch foo
|
|
$ hg -q commit -A -m 'add foo'
|
|
$ hg --config paths.default-push=../a push
|
|
pushing to $TESTTMP/a (glob)
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files
|
|
|
|
$ cd ..
|
|
|
|
Pushing to a path that isn't defined should not fall back to default
|
|
|
|
$ hg --cwd b push doesnotexist
|
|
abort: repository doesnotexist does not exist!
|
|
[255]
|
|
|
|
:pushurl is used when defined
|
|
|
|
$ hg -q clone a pushurlsource
|
|
$ hg -q clone a pushurldest
|
|
$ cd pushurlsource
|
|
|
|
Windows needs a leading slash to make a URL that passes all of the checks
|
|
$ WD=`pwd`
|
|
#if windows
|
|
$ WD="/$WD"
|
|
#endif
|
|
$ cat > .hg/hgrc << EOF
|
|
> [paths]
|
|
> default = https://example.com/not/relevant
|
|
> default:pushurl = file://$WD/../pushurldest
|
|
> EOF
|
|
|
|
$ touch pushurl
|
|
$ hg -q commit -A -m 'add pushurl'
|
|
$ hg push
|
|
pushing to file:/*/$TESTTMP/pushurlsource/../pushurldest (glob)
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files
|
|
|
|
:pushrev is used when no -r is passed
|
|
|
|
$ cat >> .hg/hgrc << EOF
|
|
> default:pushrev = .
|
|
> EOF
|
|
$ hg -q up -r 0
|
|
$ echo head1 > foo
|
|
$ hg -q commit -A -m head1
|
|
$ hg -q up -r 0
|
|
$ echo head2 > foo
|
|
$ hg -q commit -A -m head2
|
|
$ hg push -f
|
|
pushing to file:/*/$TESTTMP/pushurlsource/../pushurldest (glob)
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
|
$ hg --config 'paths.default:pushrev=draft()' push -f
|
|
pushing to file:/*/$TESTTMP/pushurlsource/../pushurldest (glob)
|
|
searching for changes
|
|
adding changesets
|
|
adding manifests
|
|
adding file changes
|
|
added 1 changesets with 1 changes to 1 files (+1 heads)
|
|
|
|
Invalid :pushrev raises appropriately
|
|
|
|
$ hg --config 'paths.default:pushrev=notdefined()' push
|
|
pushing to file:/*/$TESTTMP/pushurlsource/../pushurldest (glob)
|
|
hg: parse error: unknown identifier: notdefined
|
|
[255]
|
|
|
|
$ hg --config 'paths.default:pushrev=(' push
|
|
pushing to file:/*/$TESTTMP/pushurlsource/../pushurldest (glob)
|
|
hg: parse error at 1: not a prefix: end
|
|
[255]
|
|
|
|
$ cd ..
|