debugbuilddag: build a changelog dag from a concise description
Useful in tests to quickly build a complex DAG in an empty repo.
Handles local tags and named branches.
Options to, at each rev,
- create a new file,
- overwrite the same file,
- append to the same file,
- write to a specific line in a mergeable file.
Can run shell commands during DAG buildup.
#!/bin/sh
hg init a
cd a
echo a > a
hg ci -Ama -d '1 0'
hg cp a b
hg ci -mb -d '2 0'
mkdir dir
hg mv b dir
hg ci -mc -d '3 0'
hg mv a b
echo a > d
hg add d
hg ci -md -d '4 0'
hg mv dir/b e
hg ci -me -d '5 0'
hg log a
echo % -f, directory
hg log -f dir
echo % -f, but no args
hg log -f
echo % one rename
hg log -vf a
echo % many renames
hg log -vf e
echo '% log copies with --copies'
hg log -vC --template '{rev} {file_copies}\n'
echo '% log copies switch without --copies, with old filecopy template'
hg log -v --template '{rev} {file_copies_switch%filecopy}\n'
echo '% log copies switch with --copies'
hg log -vC --template '{rev} {file_copies_switch}\n'
echo '% log copies with hardcoded style and with --style=default'
hg log -vC -r4
hg log -vC -r4 --style=default
echo % log copies, non-linear manifest
hg up -C 3
hg mv dir/b e
echo foo > foo
hg ci -Ame2 -d '6 0'
hg log -v --template '{rev} {file_copies}\n' -r 5
echo % log copies, execute bit set
chmod +x e
hg ci -me3 -d '7 0'
hg log -v --template '{rev} {file_copies}\n' -r 6
echo '% log -p d'
hg log -pv d
# log --follow tests
hg init ../follow
cd ../follow
echo base > base
hg ci -Ambase -d '1 0'
echo r1 >> base
hg ci -Amr1 -d '1 0'
echo r2 >> base
hg ci -Amr2 -d '1 0'
hg up -C 1
echo b1 > b1
hg ci -Amb1 -d '1 0'
echo % log -f
hg log -f
hg up -C 0
echo b2 > b2
hg ci -Amb2 -d '1 0'
echo % log -f -r 1:tip
hg log -f -r 1:tip
hg up -C 3
hg merge tip
echo % log -r . with two parents
hg log -r .
hg ci -mm12 -d '1 0'
echo % log -r . with one parent
hg log -r .
echo postm >> b1
hg ci -Amb1.1 -d'1 0'
echo % log --follow-first
hg log --follow-first
echo % log -P 2
hg log -P 2
echo '% log -r tip -p --git'
hg log -r tip -p --git
echo '% log -r ""'
hg log -r ''
echo '% log -r <some unknown node id>'
hg log -r 1000000000000000000000000000000000000000
echo '% log -k r1'
hg log -k r1
echo '% log -d -1'
hg log -d -1
echo '% log -p -l2 --color=always'
hg --config extensions.color= --config color.mode=ansi \
log -p -l2 --color=always
echo '% log -r tip --stat'
hg log -r tip --stat
cd ..
hg init usertest
cd usertest
echo a > a
hg ci -A -m "a" -u "User One <user1@example.org>"
echo b > b
hg ci -A -m "b" -u "User Two <user2@example.org>"
hg log -u "User One <user1@example.org>"
hg log -u "user1" -u "user2"
hg log -u "user3"
cd ..
hg init branches
cd branches
echo a > a
hg ci -A -m "commit on default"
hg branch test
echo b > b
hg ci -A -m "commit on test"
hg up default
echo c > c
hg ci -A -m "commit on default"
hg up test
echo c > c
hg ci -A -m "commit on test"
echo '% log -b default'
hg log -b default
echo '% log -b test'
hg log -b test
echo '% log -b dummy'
hg log -b dummy
echo '% log -b .'
hg log -b .
echo '% log -b default -b test'
hg log -b default -b test
echo '% log -b default -b .'
hg log -b default -b .
echo '% log -b . -b test'
hg log -b . -b test
echo '% log -b 2'
hg log -b 2
exit 0