##// END OF EJS Templates
dispatch: protect against malicious 'hg serve --stdio' invocations (sec)...
dispatch: protect against malicious 'hg serve --stdio' invocations (sec) Some shared-ssh installations assume that 'hg serve --stdio' is a safe command to run for minimally trusted users. Unfortunately, the messy implementation of argument parsing here meant that trying to access a repo named '--debugger' would give the user a pdb prompt, thereby sidestepping any hoped-for sandboxing. Serving repositories over HTTP(S) is unaffected. We're not currently hardening any subcommands other than 'serve'. If your service exposes other commands to users with arbitrary repository names, it is imperative that you defend against repository names of '--debugger' and anything starting with '--config'. The read-only mode of hg-ssh stopped working because it provided its hook configuration to "hg serve --stdio" via --config parameter. This is banned for security reasons now. This patch switches it to directly call ui.setconfig(). If your custom hosting infrastructure relies on passing --config to "hg serve --stdio", you'll need to find a different way to get that configuration into Mercurial, either by using ui.setconfig() as hg-ssh does in this patch, or by placing an hgrc file someplace where Mercurial will read it. mitrandir@fb.com provided some extra fixes for the dispatch code and for hg-ssh in places that I overlooked.

File last commit:

r30755:0fbb3a5c default
r32050:77eaf953 4.1.3 stable
Show More
test-rebase-pull.t
451 lines | 8.3 KiB | text/troff | Tads3Lexer
/ tests / test-rebase-pull.t
Adrian Buehlmann
tests: unify test-rebase*
r12608 $ cat >> $HGRCPATH <<EOF
> [extensions]
> rebase=
Valters Vingolds
rebase: fail-fast the pull if working dir is not clean (BC)...
r30725 > histedit=
Adrian Buehlmann
tests: unify test-rebase*
r12608 >
> [alias]
> tglog = log -G --template "{rev}: '{desc}' {branches}\n"
> EOF
$ hg init a
$ cd a
$ echo C1 > C1
$ hg ci -Am C1
adding C1
$ echo C2 > C2
$ hg ci -Am C2
adding C2
$ cd ..
$ hg clone a b
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg clone a c
updating to branch default
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cd b
$ echo L1 > L1
$ hg ci -Am L1
adding L1
$ cd ../a
$ echo R1 > R1
$ hg ci -Am R1
adding R1
$ cd ../b
Now b has one revision to be pulled from a:
$ hg pull --rebase
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 pulling from $TESTTMP/a (glob)
Adrian Buehlmann
tests: unify test-rebase*
r12608 searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
Mads Kiilerich
rebase: show more useful status information while rebasing...
r23517 rebasing 2:ff8d69a621f9 "L1"
Durham Goode
bundles: do not overwrite existing backup bundles (BC)...
r23835 saved backup bundle to $TESTTMP/b/.hg/strip-backup/ff8d69a621f9-160fa373-backup.hg (glob)
Adrian Buehlmann
tests: unify test-rebase*
r12608
$ hg tglog
@ 3: 'L1'
|
o 2: 'R1'
|
o 1: 'C2'
|
o 0: 'C1'
Re-run:
$ hg pull --rebase
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 pulling from $TESTTMP/a (glob)
Adrian Buehlmann
tests: unify test-rebase*
r12608 searching for changes
no changes found
Valters Vingolds
rebase: fail-fast the pull if working dir is not clean (BC)...
r30725 Abort pull early if working dir is not clean:
$ echo L1-mod > L1
$ hg pull --rebase
abort: uncommitted changes
Valters Vingolds
rebase: provide detailed hint to abort message if working dir is not clean...
r30755 (cannot pull with rebase: please commit or shelve your changes first)
Valters Vingolds
rebase: fail-fast the pull if working dir is not clean (BC)...
r30725 [255]
$ hg update --clean --quiet
Abort pull early if another operation (histedit) is in progress:
$ hg histedit . -q --commands - << EOF
> edit d80cc2da061e histedit: generate unfinished state
> EOF
Editing (d80cc2da061e), you may commit or record as needed now.
(hg histedit --continue to resume)
[1]
$ hg pull --rebase
abort: histedit in progress
(use 'hg histedit --continue' or 'hg histedit --abort')
[255]
$ hg histedit --abort --quiet
Adrian Buehlmann
tests: unify test-rebase*
r12608
Valters Vingolds
rebase: provide detailed hint to abort message if working dir is not clean...
r30755 Abort pull early with pending uncommitted merge:
$ cd ..
$ hg clone --noupdate c d
$ cd d
$ hg tglog
o 1: 'C2'
|
o 0: 'C1'
$ hg update --quiet 0
$ echo M1 > M1
$ hg commit --quiet -Am M1
$ hg update --quiet 1
$ hg merge 2
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg pull --rebase
abort: outstanding uncommitted merge
(cannot pull with rebase: please commit or shelve your changes first)
[255]
$ hg update --clean --quiet
Abort pull early with unclean subrepo:
$ echo s = s > .hgsub
$ hg add .hgsub
$ hg init s
$ hg commit -m "generated a subrepo"
$ echo a > s/a
$ hg -R s add s/a
$ hg pull --rebase
abort: uncommitted changes in subrepository 's'
(cannot pull with rebase: please commit or shelve your changes first)
[255]
Adrian Buehlmann
tests: unify test-rebase*
r12608 Invoke pull --rebase and nothing to rebase:
$ cd ../c
Matt Mackall
rebase: move bookmarks as needed with pull --rebase (issue3285)
r16228 $ hg book norebase
Adrian Buehlmann
tests: unify test-rebase*
r12608 $ hg pull --rebase
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 pulling from $TESTTMP/a (glob)
Adrian Buehlmann
tests: unify test-rebase*
r12608 searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
Pierre-Yves David
rebase: choose default destination the same way as 'hg merge' (BC)...
r28189 nothing to rebase - updating instead
Adrian Buehlmann
tests: unify test-rebase*
r12608 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Matt Mackall
rebase: move bookmarks as needed with pull --rebase (issue3285)
r16228 updating bookmark norebase
Adrian Buehlmann
tests: unify test-rebase*
r12608
$ hg tglog -l 1
@ 2: 'R1'
|
Martijn Pieters
graphmod: set default edge styles for ascii graphs (BC)...
r28627 ~
Adrian Buehlmann
tests: unify test-rebase*
r12608
pull --rebase --update should ignore --update:
$ hg pull --rebase --update
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 pulling from $TESTTMP/a (glob)
Adrian Buehlmann
tests: unify test-rebase*
r12608 searching for changes
no changes found
pull --rebase doesn't update if nothing has been pulled:
$ hg up -q 1
$ hg pull --rebase
Mads Kiilerich
tests: make (glob) on windows accept \ instead of /...
r15447 pulling from $TESTTMP/a (glob)
Adrian Buehlmann
tests: unify test-rebase*
r12608 searching for changes
no changes found
$ hg tglog -l 1
o 2: 'R1'
|
Martijn Pieters
graphmod: set default edge styles for ascii graphs (BC)...
r28627 ~
Adrian Buehlmann
tests: unify test-rebase*
r12608
Mads Kiilerich
tests: add missing trailing 'cd ..'...
r16913 $ cd ..
Pierre-Yves David
rebase: fix pull --rev options clashing with --rebase (issue3619)...
r17988
pull --rebase works when a specific revision is pulled (issue3619)
$ cd a
$ hg tglog
@ 2: 'R1'
|
o 1: 'C2'
|
o 0: 'C1'
$ echo R2 > R2
$ hg ci -Am R2
adding R2
$ echo R3 > R3
$ hg ci -Am R3
adding R3
$ cd ../c
$ hg tglog
o 2: 'R1'
|
@ 1: 'C2'
|
o 0: 'C1'
$ echo L1 > L1
$ hg ci -Am L1
adding L1
created new head
$ hg pull --rev tip --rebase
Kevin Bullock
tests: fix some slash-based Windows failures
r18108 pulling from $TESTTMP/a (glob)
Pierre-Yves David
rebase: fix pull --rev options clashing with --rebase (issue3619)...
r17988 searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
Mads Kiilerich
rebase: show more useful status information while rebasing...
r23517 rebasing 3:ff8d69a621f9 "L1"
Durham Goode
bundles: do not overwrite existing backup bundles (BC)...
r23835 saved backup bundle to $TESTTMP/c/.hg/strip-backup/ff8d69a621f9-160fa373-backup.hg (glob)
Pierre-Yves David
rebase: fix pull --rev options clashing with --rebase (issue3619)...
r17988 $ hg tglog
@ 5: 'L1'
|
o 4: 'R3'
|
o 3: 'R2'
|
o 2: 'R1'
|
o 1: 'C2'
|
o 0: 'C1'
Eric Sumner
repair: setup hookargs when processing bundle2s...
r24170 pull --rebase works with bundle2 turned on
Pierre-Yves David
rebase: fix pull --rev options clashing with --rebase (issue3619)...
r17988
Eric Sumner
repair: setup hookargs when processing bundle2s...
r24170 $ cd ../a
$ echo R4 > R4
$ hg ci -Am R4
adding R4
$ hg tglog
@ 5: 'R4'
|
o 4: 'R3'
|
o 3: 'R2'
|
o 2: 'R1'
|
o 1: 'C2'
|
o 0: 'C1'
$ cd ../c
Pierre-Yves David
strip: use bundle2 + cg2 by default when repository use general delta...
r26423 $ hg pull --rebase
Eric Sumner
repair: setup hookargs when processing bundle2s...
r24170 pulling from $TESTTMP/a (glob)
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
rebasing 5:518d153c0ba3 "L1"
saved backup bundle to $TESTTMP/c/.hg/strip-backup/518d153c0ba3-73407f14-backup.hg (glob)
$ hg tglog
@ 6: 'L1'
|
o 5: 'R4'
|
o 4: 'R3'
|
o 3: 'R2'
|
o 2: 'R1'
|
o 1: 'C2'
|
o 0: 'C1'
Pierre-Yves David
rebase: 'hg pull --rebase' now update only if there was nothing to rebase...
r28117
pull --rebase only update if there is nothing to rebase
$ cd ../a
$ echo R5 > R5
$ hg ci -Am R5
adding R5
$ hg tglog
@ 6: 'R5'
|
o 5: 'R4'
|
o 4: 'R3'
|
o 3: 'R2'
|
o 2: 'R1'
|
o 1: 'C2'
|
o 0: 'C1'
$ cd ../c
$ echo L2 > L2
$ hg ci -Am L2
adding L2
$ hg up 'desc(L1)'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg pull --rebase
pulling from $TESTTMP/a (glob)
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
rebasing 6:0d0727eb7ce0 "L1"
rebasing 7:c1f58876e3bf "L2"
saved backup bundle to $TESTTMP/c/.hg/strip-backup/0d0727eb7ce0-ef61ccb2-backup.hg (glob)
$ hg tglog
o 8: 'L2'
|
@ 7: 'L1'
|
o 6: 'R5'
|
o 5: 'R4'
|
o 4: 'R3'
|
o 3: 'R2'
|
o 2: 'R1'
|
o 1: 'C2'
|
o 0: 'C1'
Pierre-Yves David
rebase: perform update through the 'update' command...
r28118
pull --rebase update (no rebase) use proper update:
- warn about other head.
$ cd ../a
$ echo R6 > R6
$ hg ci -Am R6
adding R6
$ cd ../c
$ hg up 'desc(R5)'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg pull --rebase
pulling from $TESTTMP/a (glob)
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
Pierre-Yves David
rebase: choose default destination the same way as 'hg merge' (BC)...
r28189 nothing to rebase - updating instead
Pierre-Yves David
rebase: perform update through the 'update' command...
r28118 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1 other heads for branch "default"
$ hg tglog
@ 9: 'R6'
|
| o 8: 'L2'
| |
| o 7: 'L1'
|/
o 6: 'R5'
|
o 5: 'R4'
|
o 4: 'R3'
|
o 3: 'R2'
|
o 2: 'R1'
|
o 1: 'C2'
|
o 0: 'C1'
Pierre-Yves David
rebase: restrict rebase destination to the pulled set (issue5214)...
r29044
Multiple pre-existing heads on the branch
-----------------------------------------
Pull bring content, but nothing on the current branch, we should not consider
pre-existing heads.
$ cd ../a
$ hg branch unrelatedbranch
marked working directory as branch unrelatedbranch
(branches are permanent and global, did you want a bookmark?)
$ echo B1 > B1
$ hg commit -Am B1
adding B1
$ cd ../c
$ hg up 'desc(L2)'
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg pull --rebase
pulling from $TESTTMP/a (glob)
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
nothing to rebase
There is two local heads and we pull a third one.
The second local head should not confuse the `hg pull rebase`.
$ hg up 'desc(R6)'
1 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ echo M1 > M1
$ hg commit -Am M1
adding M1
$ cd ../a
$ hg up 'desc(R6)'
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo R7 > R7
$ hg commit -Am R7
adding R7
$ cd ../c
$ hg up 'desc(L2)'
2 files updated, 0 files merged, 2 files removed, 0 files unresolved
$ hg pull --rebase
pulling from $TESTTMP/a (glob)
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
rebasing 7:864e0a2d2614 "L1"
rebasing 8:6dc0ea5dcf55 "L2"
saved backup bundle to $TESTTMP/c/.hg/strip-backup/864e0a2d2614-2f72c89c-backup.hg (glob)
$ hg tglog
@ 12: 'L2'
|
o 11: 'L1'
|
o 10: 'R7'
|
| o 9: 'M1'
|/
| o 8: 'B1' unrelatedbranch
|/
o 7: 'R6'
|
o 6: 'R5'
|
o 5: 'R4'
|
o 4: 'R3'
|
o 3: 'R2'
|
o 2: 'R1'
|
o 1: 'C2'
|
o 0: 'C1'