Detailed tests of hg.py ======================= .. :doctest: .. :setup: zest.releaser.tests.functional.setup .. :teardown: zest.releaser.tests.functional.teardown Some initial imports: >>> from zest.releaser import hg >>> from zest.releaser.utils import execute_command >>> import os Project name ------------ The prepared hg project has a setup.py, so the name in there is used: >>> os.chdir(hgsourcedir) >>> checkout = hg.Hg() >>> checkout.name 'tha.example' When the setup.py doesn't exist or doesn't return a proper name, we fall back to the directory name. >>> orig = checkout.get_setup_py_name >>> checkout.get_setup_py_name= lambda: None # Hack >>> checkout.name 'tha.example-hg' >>> checkout.get_setup_py_name = orig # Restore hack Diff and commit --------------- Make a change: >>> setup_py = os.path.join(hgsourcedir, 'setup.py') >>> dont_care = open(setup_py, 'a').write('\na = 2\n') >>> cmd = checkout.cmd_diff() >>> cmd 'hg diff' >>> print(execute_command(cmd)) diff -r 234567890abc setup.py --- a/setup.py ... +++ b/setup.py ... @@ -36,3 +36,5 @@ 'console_scripts': [ ]}, ) + +a = 2 Commit it: >>> cmd = checkout.cmd_commit('small tweak') >>> cmd 'hg commit -v -m "small tweak"' >>> print(execute_command(cmd)) setup.py... committed changeset 1:234567890abc Tags ---- Originally there are no tags (the default 'tip' tag is filtered out): >>> checkout.available_tags() [] Create a tag and it will show up: >>> cmd = checkout.cmd_create_tag('0.1') >>> cmd 'hg tag -m "Tagging 0.1" 0.1' >>> dont_care = execute_command(cmd) >>> checkout.available_tags() ['0.1'] A specific tag url is important for subversion, but nonsensical for mercurial. We just return the version as-is: >>> checkout.tag_url('holadijee') 'holadijee' Make and commit a small change: >>> dont_care = open(setup_py, 'a').write('\nb = 3\n') >>> cmd = checkout.cmd_commit('small tweak') >>> print(execute_command(cmd)) setup.py... committed changeset 1:234567890abc Now we can request the changes since a specific tag: >>> cmd = checkout.cmd_diff_last_commit_against_tag('0.1') >>> cmd 'hg diff -r 0.1 -r 234567890abc' >>> print(execute_command(cmd)) diff -r 234567890abc -r 234567890abc .hgtags --- /dev/null ... +++ b/.hgtags ... @@ -0,0 +1,1 @@ +... 0.1 diff -r 234567890abc -r 234567890abc setup.py --- a/setup.py ... +++ b/setup.py ... @@ -38,3 +38,5 @@ ) a = 2 + +b = 3 Making a tag checkout --------------------- Some hg versions cannot checkout in an existing directory, so contrary svn we will not create an empty tempdir before doing a checkout. The tag checkout command makes a checkout in a fresh dir: >>> checkout.checkout_from_tag('0.1') requesting all changes adding changesets adding manifests adding file changes added 2 changesets with ... changes to 17 files updating working directory 17 files updated, 0 files merged, 0 files removed, 0 files unresolved At the end of the command we are in the created directory. The checkout is done directly in that temporary directory, so not in a newly created subdirectory of it: >>> os.getcwd() '.../tha.example-0.1-...' >>> sorted(os.listdir('.')) ['.hg', '.hgignore', 'CHANGES.txt', ...] Pushing changes --------------- For hg, committing isn't enough. We need to push changes to the server: >>> checkout.push_commands() ['hg push']