##// END OF EJS Templates
rebase: restrict rebase destination to the pulled set (issue5214)...
rebase: restrict rebase destination to the pulled set (issue5214) Before this patch, `hg pull --rebase` would be a strict sequence of `hg pull` followed by `hg rebase` if anything was pulled. Now that rebase pick his default destination the same way than merge, than `hg rebase` step would abort in the case the repo already had multiple anonymous heads (because of the ambiguity). (changed in fac3a24be50e) The intend of the user with `hg pull --rebase` is clearly to rebase on pulled content. This used to be (mostly) enforced by the former default destination for rebase, "tipmost changeset of the branch" as the tipmost would likely a changeset that just got pulled. But this intended was no longer enforced with the new defaul destination (unified with merge). This changeset makes use of the '_destspace' mechanism introduced in the previous changeset to enforce this. This partially fixes issue5214 as no change at all have been made to the new handling of the case with bookmark (unified with merge).

File last commit:

r16556:f9262456 stable
r29044:261c2537 stable
Show More
9diff
42 lines | 1.0 KiB | text/plain | TextLexer
#!/bin/rc
# 9diff - Mercurial extdiff wrapper for diff(1)
rfork e
fn getfiles {
cd $1 &&
for(f in `{du -as | awk '{print $2}'})
test -f $f && echo `{cleanname $f}
}
fn usage {
echo >[1=2] usage: 9diff [diff options] parent child root
exit usage
}
opts=()
while(~ $1 -*){
opts=($opts $1)
shift
}
if(! ~ $#* 3)
usage
# extdiff will set the parent and child to a single file if there is
# only one change. If there are multiple changes, directories will be
# set. diff(1) does not cope particularly with directories; instead we
# do the recursion ourselves and diff each file individually.
if(test -f $1)
diff $opts $1 $2
if not{
# extdiff will create a snapshot of the working copy to prevent
# conflicts during the diff. We circumvent this behavior by
# diffing against the repository root to produce plumbable
# output. This is antisocial.
for(f in `{sort -u <{getfiles $1} <{getfiles $2}}){
file1=$1/$f; test -f $file1 || file1=/dev/null
file2=$3/$f; test -f $file2 || file2=/dev/null
diff $opts $file1 $file2
}
}
exit ''