# HG changeset patch # User Mathias De Mare # Date 1678291498 -3600 # Node ID 8341f2494b3fc1c0d9ee55fa4487c0ac82f64d2a # Parent 934608d4fcbae7830f9e76f83d9101f6ab8ab5ea hglib tests: migrate away from (unmaintained) nose diff -r 934608d4fcba -r 8341f2494b3f Makefile --- a/Makefile Wed Mar 09 15:08:11 2022 +0100 +++ b/Makefile Wed Mar 08 17:04:58 2023 +0100 @@ -1,4 +1,4 @@ -PYTHON=python +PYTHON=python3 help: @echo 'Commonly used make targets:' @echo ' tests - run all tests in the automatic test suite' @@ -14,4 +14,4 @@ TAR_OPTIONS="--owner=root --group=root --mode=u+w,go-w,a+rX-s" $(PYTHON) setup.py -q sdist tests: - $(PYTHON) test.py --with-doctest + $(PYTHON) -m unittest discover diff -r 934608d4fcba -r 8341f2494b3f heptapod-ci.yml --- a/heptapod-ci.yml Wed Mar 09 15:08:11 2022 +0100 +++ b/heptapod-ci.yml Wed Mar 08 17:04:58 2023 +0100 @@ -4,6 +4,5 @@ unit-test-job: stage: test script: - - apt update && apt install -y make python3 python3-nose python3-pip && pip3 install mercurial - # to be replaced with 'make tests' after merge request 1 is in: - - python3 test.py --with-doctest + - apt update && apt install -y make python3 python3-pip && pip3 install mercurial + - make tests diff -r 934608d4fcba -r 8341f2494b3f test.py --- a/test.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -#!/usr/bin/env python - -import nose -from tests import with_hg - -if __name__ == '__main__': - nose.main(addplugins=[with_hg.WithHgPlugin()]) diff -r 934608d4fcba -r 8341f2494b3f tests/__init__.py --- a/tests/__init__.py Wed Mar 09 15:08:11 2022 +0100 +++ b/tests/__init__.py Wed Mar 08 17:04:58 2023 +0100 @@ -1,22 +0,0 @@ -import os, tempfile, sys, shutil - -def setUp(): - os.environ['LANG'] = os.environ['LC_ALL'] = os.environ['LANGUAGE'] = 'C' - os.environ["EMAIL"] = "Foo Bar " - os.environ['CDPATH'] = '' - os.environ['COLUMNS'] = '80' - os.environ['GREP_OPTIONS'] = '' - os.environ['http_proxy'] = '' - - os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"' - os.environ["HGMERGE"] = "internal:merge" - os.environ["HGUSER"] = "test" - os.environ["HGENCODING"] = "ascii" - os.environ["HGENCODINGMODE"] = "strict" - tmpdir = tempfile.mkdtemp('', 'python-hglib.') - os.environ["HGTMP"] = os.path.realpath(tmpdir) - os.environ["HGRCPATH"] = os.pathsep - -def tearDown(self): - os.chdir('..') - shutil.rmtree(os.environ["HGTMP"]) diff -r 934608d4fcba -r 8341f2494b3f tests/common.py --- a/tests/common.py Wed Mar 09 15:08:11 2022 +0100 +++ b/tests/common.py Wed Mar 08 17:04:58 2023 +0100 @@ -14,6 +14,22 @@ class basetest(unittest.TestCase): def setUp(self): + os.environ['LANG'] = os.environ['LC_ALL'] = os.environ['LANGUAGE'] = 'C' + os.environ["EMAIL"] = "Foo Bar " + os.environ['CDPATH'] = '' + os.environ['COLUMNS'] = '80' + os.environ['GREP_OPTIONS'] = '' + os.environ['http_proxy'] = '' + + os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"' + os.environ["HGMERGE"] = "internal:merge" + os.environ["HGUSER"] = "test" + os.environ["HGENCODING"] = "ascii" + os.environ["HGENCODINGMODE"] = "strict" + tmpdir = tempfile.mkdtemp('', 'python-hglib.') + os.environ["HGTMP"] = os.path.realpath(tmpdir) + os.environ["HGRCPATH"] = os.pathsep + self._testtmp = os.environ["TESTTMP"] = os.environ["HOME"] = \ os.path.join(os.environ["HGTMP"], self.__class__.__name__) @@ -37,8 +53,9 @@ if client.server is not None: client.close() os.chdir('..') + try: - shutil.rmtree(self._testtmp) + shutil.rmtree(self._testtmp, ignore_errors=True) except AttributeError: pass # if our setUp was overriden diff -r 934608d4fcba -r 8341f2494b3f tests/test-annotate.py --- a/tests/test-annotate.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -from tests import common -from hglib.util import b - -class test_annotate(common.basetest): - def test_basic(self): - self.append('a', 'a\n') - rev, node0 = self.client.commit(b('first'), addremove=True) - self.append('a', 'a\n') - rev, node1 = self.client.commit(b('second')) - - self.assertEquals(list(self.client.annotate(b('a'))), - [(b('0'), b('a')), (b('1'), b('a'))]) - self.assertEquals(list( - self.client.annotate( - b('a'), user=True, file=True, - number=True, changeset=True, line=True, verbose=True)), - [(b('test 0 ') + node0[:12] + b(' a:1'), b('a')), - (b('test 1 ') + node1[:12] + b(' a:2'), b('a'))]) - - def test_files(self): - self.append('a', 'a\n') - rev, node0 = self.client.commit(b('first'), addremove=True) - self.append('b', 'b\n') - rev, node1 = self.client.commit(b('second'), addremove=True) - self.assertEquals(list(self.client.annotate([b('a'), b('b')])), - [(b('0'), b('a')), (b('1'), b('b'))]) - - def test_two_colons(self): - self.append('a', 'a: b\n') - self.client.commit(b('first'), addremove=True) - self.assertEquals(list(self.client.annotate(b('a'))), - [(b('0'), b('a: b'))]) diff -r 934608d4fcba -r 8341f2494b3f tests/test-bookmarks.py --- a/tests/test-bookmarks.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -from tests import common -from hglib.util import b - -class test_bookmarks(common.basetest): - def test_empty(self): - self.assertEquals(self.client.bookmarks(), ([], -1)) - - def test_basic(self): - self.append('a', 'a') - rev0, node0 = self.client.commit(b('first'), addremove=True) - self.append('a', 'a') - rev1, node1 = self.client.commit(b('second')) - - self.client.bookmark(b('zero'), rev0) - self.assertEquals(self.client.bookmarks(), - ([(b('zero'), rev0, node0[:12])], -1)) - - self.client.bookmark(b('one'), rev1) - self.assertEquals(self.client.bookmarks()[0], - [(b('one'), rev1, node1[:12]), - (b('zero'), rev0, node0[:12])]) - - #def test_spaces(self): - # self.client.bookmark('s pace', self.rev0) - # self.assertEquals(self.client.bookmarks(), - # ([('s pace', 0, self.rev0.node[:12])], -1)) diff -r 934608d4fcba -r 8341f2494b3f tests/test-branch.py --- a/tests/test-branch.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_branch(common.basetest): - def test_empty(self): - self.assertEquals(self.client.branch(), b('default')) - - def test_basic(self): - self.assertEquals(self.client.branch(b('foo')), b('foo')) - self.append('a', 'a') - rev, node = self.client.commit(b('first'), addremove=True) - - rev = self.client.log(node)[0] - - self.assertEquals(rev.branch, b('foo')) - self.assertEquals(self.client.branches(), - [(rev.branch, int(rev.rev), rev.node[:12])]) - - def test_reset_with_name(self): - self.assertRaises(ValueError, self.client.branch, b('foo'), clean=True) - - def test_reset(self): - self.client.branch(b('foo')) - self.assertEquals(self.client.branch(clean=True), b('default')) - - def test_exists(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - self.client.branch(b('foo')) - self.append('a', 'a') - self.client.commit(b('second')) - self.assertRaises(hglib.error.CommandError, - self.client.branch, b('default')) - - def test_force(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - self.client.branch(b('foo')) - self.append('a', 'a') - self.client.commit(b('second')) - - self.assertRaises(hglib.error.CommandError, - self.client.branch, b('default')) - self.assertEquals(self.client.branch(b('default'), force=True), - b('default')) diff -r 934608d4fcba -r 8341f2494b3f tests/test-branches.py --- a/tests/test-branches.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_branches(common.basetest): - def test_empty(self): - self.assertEquals(self.client.branches(), []) - - def test_basic(self): - self.append('a', 'a') - rev0 = self.client.commit(b('first'), addremove=True) - self.client.branch(b('foo')) - self.append('a', 'a') - rev1 = self.client.commit(b('second')) - branches = self.client.branches() - - expected = [] - for r, n in (rev1, rev0): - r = self.client.log(r)[0] - expected.append((r.branch, int(r.rev), r.node[:12])) - - self.assertEquals(branches, expected) - - def test_active_closed(self): - pass diff -r 934608d4fcba -r 8341f2494b3f tests/test-bundle.py --- a/tests/test-bundle.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -from tests import common -from hglib.util import b - -class test_bundle(common.basetest): - def test_no_changes(self): - self.append('a', 'a') - rev, node0 = self.client.commit(b('first'), addremove=True) - self.assertFalse(self.client.bundle(b('bundle'), destrepo=b('.'))) - - def test_basic(self): - self.append('a', 'a') - rev, node0 = self.client.commit(b('first'), addremove=True) - self.client.clone(dest=b('other')) - - self.append('a', 'a') - rev, node1 = self.client.commit(b('second')) - - self.assertTrue(self.client.bundle(b('bundle'), destrepo=b('other'))) diff -r 934608d4fcba -r 8341f2494b3f tests/test-clone.py --- a/tests/test-clone.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -import os -from tests import common -import hglib -from hglib.util import b - -class test_clone(common.basetest): - def test_basic(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - cloned = hglib.clone(b('.'), b('cloned')) - self.assertRaises(ValueError, cloned.log) - cloned.open() - self.assertEquals(self.client.log(), cloned.log()) - - def test_clone_uncompressed(self): - hglib.clone(b('.'), b('cloned'), uncompressed=True) diff -r 934608d4fcba -r 8341f2494b3f tests/test-commit.py --- a/tests/test-commit.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -from tests import common -import hglib, datetime -from hglib.util import b - -class test_commit(common.basetest): - def test_user(self): - self.append('a', 'a') - rev, node = self.client.commit(b('first'), addremove=True, - user=b('foo')) - rev = self.client.log(node)[0] - self.assertEquals(rev.author, b('foo')) - - def test_no_user(self): - self.append('a', 'a') - self.assertRaises(hglib.error.CommandError, - self.client.commit, b('first'), user=b('')) - - def test_close_branch(self): - self.append('a', 'a') - rev0, node0 = self.client.commit(b('first'), addremove=True) - self.client.branch(b('foo')) - self.append('a', 'a') - rev1, node1 = self.client.commit(b('second')) - revclose = self.client.commit(b('closing foo'), closebranch=True) - rev0, rev1, revclose = self.client.log([node0, node1, revclose[1]]) - - self.assertEquals(self.client.branches(), - [(rev0.branch, int(rev0.rev), rev0.node[:12])]) - - self.assertEquals(self.client.branches(closed=True), - [(revclose.branch, int(revclose.rev), - revclose.node[:12]), - (rev0.branch, int(rev0.rev), rev0.node[:12])]) - - def test_message_logfile(self): - self.assertRaises(ValueError, self.client.commit, b('foo'), - logfile=b('bar')) - self.assertRaises(ValueError, self.client.commit) - - def test_date(self): - self.append('a', 'a') - now = datetime.datetime.now().replace(microsecond=0) - rev0, node0 = self.client.commit( - b('first'), addremove=True, - date=now.isoformat(' ').encode('latin-1')) - - self.assertEquals(now, self.client.tip().date) - - def test_amend(self): - self.append('a', 'a') - now = datetime.datetime.now().replace(microsecond=0) - rev0, node0 = self.client.commit( - b('first'), addremove=True, - date=now.isoformat(' ').encode('latin-1')) - - self.assertEquals(now, self.client.tip().date) - - self.append('a', 'a') - rev1, node1 = self.client.commit(amend=True) - self.assertEquals(now, self.client.tip().date) - self.assertNotEquals(node0, node1) - self.assertEqual(1, len(self.client.log())) - - def test_nul_injection(self): - self.append('a', 'a') - self.assertRaises(ValueError, lambda: self.client.commit(b('fail\0-A'))) - self.assertEqual(0, len(self.client.log())) diff -r 934608d4fcba -r 8341f2494b3f tests/test-config.py --- a/tests/test-config.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -from tests import common -import os, hglib -from hglib.util import b - -class test_config(common.basetest): - def setUp(self): - common.basetest.setUp(self) - f = open('.hg/hgrc', 'a') - f.write('[section]\nkey=value\n') - f.close() - self.client = hglib.open() - - def test_basic(self): - config = self.client.config() - - self.assertTrue( - (b('section'), b('key'), b('value')) in self.client.config()) - - self.assertTrue([(b('section'), b('key'), b('value'))], - self.client.config(b('section'))) - self.assertTrue([(b('section'), b('key'), b('value'))], - self.client.config([b('section'), b('foo')])) - self.assertRaises(hglib.error.CommandError, - self.client.config, [b('a.b'), b('foo')]) - - def test_show_source(self): - config = self.client.config(showsource=True) - - self.assertTrue((os.path.abspath(b('.hg/hgrc')) + b(':2'), - b('section'), b('key'), b('value')) in config) - -class test_config_arguments(common.basetest): - def test_basic(self): - client = hglib.open(configs=[b('diff.unified=5'), b('a.b=foo')]) - self.assertEqual(client.config(b('a')), [(b('a'), b('b'), b('foo'))]) - self.assertEqual(client.config(b('diff')), - [(b('diff'), b('unified'), b('5'))]) diff -r 934608d4fcba -r 8341f2494b3f tests/test-context.py --- a/tests/test-context.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -import sys -from tests import common -from hglib.error import CommandError -import hglib -from hglib import context -from hglib.util import b - -class test_context(common.basetest): - def test_non_existent(self): - self.assertRaises(ValueError, context.changectx, self.client, b('foo')) - - def test_basic(self): - self.append('a', 'a') - self.append('b', 'b') - rev0, node0 = self.client.commit(b('first'), addremove=True) - - self.append('c', 'c') - rev1, node1 = self.client.commit(b('second'), addremove=True) - - self.assertRaises(KeyError, self.client.__getitem__, 'doesnotexist') - - ctx = self.client[node0] - - self.assertEquals(ctx.description(), b('first')) - self.assertEquals(str(ctx), node0[:12].decode('latin-1')) - self.assertEquals(ctx.node(), node0) - self.assertEquals(int(ctx), rev0) - self.assertEquals(ctx.rev(), rev0) - self.assertEquals(ctx.branch(), b('default')) - - self.assertTrue(ctx) - - self.assertTrue(b('a') in ctx and b('b') in ctx) - self.assertFalse(b('c') in ctx) - self.assertEquals(list(ctx), [b('a'), b('b')]) - self.assertEquals(ctx.files(), [b('a'), b('b')]) - - self.assertEquals(ctx.modified(), []) - self.assertEquals(ctx.added(), [b('a'), b('b')]) - self.assertEquals(ctx.removed(), []) - self.assertEquals(ctx.ignored(), []) - self.assertEquals(ctx.clean(), []) - - man = {b('a') : b('047b75c6d7a3ef6a2243bd0e99f94f6ea6683597'), - b('b') : b('62452855512f5b81522aa3895892760bb8da9f3f')} - self.assertEquals(ctx.manifest(), man) - - self.assertEquals([int(c) for c in ctx.parents()], [-1]) - self.assertEquals(int(ctx.p1()), -1) - self.assertEquals(int(ctx.p2()), -1) - - self.assertEquals([int(c) for c in ctx.children()], [1]) - self.assertEquals([int(c) for c in ctx.descendants()], [0, 1]) - self.assertEquals([int(c) for c in ctx.ancestors()], [0]) - - self.client.bookmark(b('bookmark'), inactive=True, rev=node0) - self.assertEquals(ctx.bookmarks(), [b('bookmark')]) - - self.client.tag(b('tag'), rev=node0) - # tags are read on construction - self.assertEquals(self.client[node0].tags(), [b('tag')]) - - def test_construction(self): - self.append('a', 'a') - rev0, node0 = self.client.commit(b('first'), addremove=True) - tip = self.client.tip() - - # from client.revision - ctx = context.changectx(self.client, tip) - self.assertEquals(ctx.node(), tip.node) - - # from revset - ctx = context.changectx(self.client, b('all()')) - self.assertEquals(ctx.node(), tip.node) - - def test_in_keyword(self): - """ - test the 'in' keyword using both revision numbers or changeset ids. - """ - if sys.version_info < (2, 7): - return - - self.append('a', 'a') - rev0, node0 = self.client.commit(b('first'), addremove=True) - self.append('a', 'a') - rev1, node1 = self.client.commit(b('second')) - - self.assertIn(1, self.client) - hash_1 = self.client.log(0)[0][1] - self.assertIn(hash_1, self.client) - self.assertNotIn(2, self.client) - hash_2 = self.client.log(1)[0][1] - self.assertIn(hash_2, self.client) - hash_2 = b('deadbeef') - self.assertNotIn(hash_2, self.client) diff -r 934608d4fcba -r 8341f2494b3f tests/test-copy.py --- a/tests/test-copy.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_copy(common.basetest): - def test_basic(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - - self.assertTrue(self.client.copy(b('a'), b('b'))) - self.assertEquals(self.client.status(), [(b('A'), b('b'))]) - self.append('c', 'a') - self.assertTrue(self.client.copy(b('a'), b('c'), after=True)) - self.assertEquals(self.client.status(), - [(b('A'), b('b')), (b('A'), b('c'))]) - - # hg returns 0 even if there were warnings - #def test_warnings(self): - # self.append('a', 'a') - # self.client.commit('first', addremove=True) - - # self.assertTrue(self.client.copy('a', 'b')) - # self.assertFalse(self.client.copy('a', 'b')) diff -r 934608d4fcba -r 8341f2494b3f tests/test-diff.py --- a/tests/test-diff.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -from tests import common -from hglib.util import b - -class test_diff(common.basetest): - def test_basic(self): - self.append('a', 'a\n') - self.client.add(b('a')) - diff1 = b("""diff -r 000000000000 a ---- /dev/null -+++ b/a -@@ -0,0 +1,1 @@ -+a -""") - self.assertEquals(diff1, self.client.diff(nodates=True)) - self.assertEquals(diff1, self.client.diff([b('a')], nodates=True)) - rev0, node0 = self.client.commit(b('first')) - diff2 = b("""diff -r 000000000000 -r """) + node0[:12] + b(""" a ---- /dev/null -+++ b/a -@@ -0,0 +1,1 @@ -+a -""") - self.assertEquals(diff2, self.client.diff(change=rev0, nodates=True)) - self.append('a', 'a\n') - rev1, node1 = self.client.commit(b('second')) - diff3 = b("""diff -r """) + node0[:12] + b(""" a ---- a/a -+++ b/a -@@ -1,1 +1,2 @@ - a -+a -""") - self.assertEquals(diff3, self.client.diff(revs=[rev0], nodates=True)) - diff4 = b("""diff -r """) + node0[:12] + b(" -r ") + node1[:12] + b( - """ a ---- a/a -+++ b/a -@@ -1,1 +1,2 @@ - a -+a -""") - self.assertEquals(diff4, self.client.diff(revs=[rev0, rev1], - nodates=True)) - - def test_basic_plain(self): - open('.hg/hgrc', 'a').write('[defaults]\ndiff=--git\n') - self.test_basic() diff -r 934608d4fcba -r 8341f2494b3f tests/test-encoding.py --- a/tests/test-encoding.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_encoding(common.basetest): - def test_basic(self): - self.client = hglib.open(encoding='utf-8') - self.assertEquals(self.client.encoding, b('utf-8')) diff -r 934608d4fcba -r 8341f2494b3f tests/test-forget.py --- a/tests/test-forget.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -from tests import common -from hglib.util import b - -class test_forget(common.basetest): - def test_basic(self): - self.append('a', 'a') - self.client.add([b('a')]) - self.assertTrue(self.client.forget(b('a'))) - - def test_warnings(self): - self.assertFalse(self.client.forget(b('a'))) - self.append('a', 'a') - self.client.add([b('a')]) - self.assertFalse(self.client.forget([b('a'), b('b')])) diff -r 934608d4fcba -r 8341f2494b3f tests/test-grep.py --- a/tests/test-grep.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -from tests import common -from hglib.util import b - -class test_grep(common.basetest): - def test_basic(self): - self.append('a', 'x\n') - self.append('b', 'xy\n') - self.client.commit(b('first'), addremove=True) - - # no match - self.assertEquals(list(self.client.grep(b('c'))), []) - - if self.client.version >= (5, 2): - self.assertEquals(list(self.client.grep(b('x'))), - [(b('a'), b('x')), (b('b'), b('xy'))]) - self.assertEquals(list(self.client.grep(b('x'), b('a'))), - [(b('a'), b('x'))]) - - self.assertEquals(list(self.client.grep(b('y'))), - [(b('b'), b('xy'))]) - else: - self.assertEquals(list(self.client.grep(b('x'))), - [(b('a'), b('0'), b('x')), (b('b'), b('0'), b('xy'))]) - self.assertEquals(list(self.client.grep(b('x'), b('a'))), - [(b('a'), b('0'), b('x'))]) - self.assertEquals(list(self.client.grep(b('y'))), - [(b('b'), b('0'), b('xy'))]) - - def test_options(self): - self.append('a', 'x\n') - self.append('b', 'xy\n') - rev, node = self.client.commit(b('first'), addremove=True) - - self.assertEquals([(b('a'), b('0'), b('+'), b('x')), - (b('b'), b('0'), b('+'), b('xy'))], - list(self.client.grep(b('x'), all=True))) - - if self.client.version >= (5, 2): - self.assertEquals([(b('a'),), (b('b'),)], - list(self.client.grep(b('x'), fileswithmatches=True))) - - self.assertEquals([(b('a'), b('1'), b('x')), (b('b'), b('1'), b('xy'))], - list(self.client.grep(b('x'), line=True))) - - self.assertEquals([(b('a'), b('test'), b('x')), - (b('b'), b('test'), b('xy'))], - list(self.client.grep(b('x'), user=True))) - else: - self.assertEquals([(b('a'), b('0')), (b('b'), b('0'))], - list(self.client.grep(b('x'), fileswithmatches=True))) - - self.assertEquals([(b('a'), b('0'), b('1'), b('x')), - (b('b'), b('0'), b('1'), b('xy'))], - list(self.client.grep(b('x'), line=True))) - - self.assertEquals([(b('a'), b('0'), b('test'), b('x')), - (b('b'), b('0'), b('test'), b('xy'))], - list(self.client.grep(b('x'), user=True))) - - self.assertEquals([(b('a'), b('0'), b('1'), b('+'), b('test')), - (b('b'), b('0'), b('1'), b('+'), b('test'))], - list(self.client.grep(b('x'), all=True, user=True, - line=True, - fileswithmatches=True))) diff -r 934608d4fcba -r 8341f2494b3f tests/test-heads.py --- a/tests/test-heads.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -from tests import common -from hglib.util import b - -class test_heads(common.basetest): - def test_empty(self): - self.assertEquals(self.client.heads(), []) - - def test_basic(self): - self.append('a', 'a') - rev, node0 = self.client.commit(b('first'), addremove=True) - self.assertEquals(self.client.heads(), [self.client.tip()]) - - self.client.branch(b('foo')) - self.append('a', 'a') - rev, node1 = self.client.commit(b('second')) - - self.assertEquals(self.client.heads(node0, topological=True), []) diff -r 934608d4fcba -r 8341f2494b3f tests/test-hglib.py --- a/tests/test-hglib.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -from tests import common -import hglib - -class test_hglib(common.basetest): - def setUp(self): - pass - - def test_close_fds(self): - """A weird Python bug that has something to do to inherited file - descriptors, see http://bugs.python.org/issue12786 - """ - common.basetest.setUp(self) - client2 = hglib.open() - self.client.close() - - def test_open_nonexistent(self): - # setup stuff necessary for basetest.tearDown() - self.clients = [] - self._oldopen = hglib.client.hgclient.open - try: - self.clients.append(hglib.open('inexistent')) - # hg 3.5 can't report error (fixed by 7332bf4ae959) - #self.fail('ServerError not raised') - except hglib.error.ServerError as inst: - self.assertTrue('inexistent' in str(inst)) diff -r 934608d4fcba -r 8341f2494b3f tests/test-hidden.py --- a/tests/test-hidden.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -from tests import common -import hglib, datetime -from hglib.error import CommandError -from hglib.util import b - -class test_obsolete_reference(common.basetest): - """make sure obsolete changesets are disabled""" - def test_debugobsolete_failure(self): - f = open('gna1','w') - f.write('g') - f.close() - self.client.add(b('gna1')) - cs = self.client.commit(b('gna1'))[1] #get id - self.assertRaises(CommandError, - self.client.rawcommand, [b('debugobsolete'), cs]) - - -class test_obsolete_baselib(common.basetest): - """base test class with obsolete changesets enabled""" - def setUp(self): - #create an extension which only activates obsolete - super(test_obsolete_baselib, self).setUp() - self.append('.hg/obs.py', - "import mercurial.obsolete\n" - "# 3.2 and later\n" - "mercurial.obsolete.isenabled = lambda r, opt: True\n" - "# Dropped in 5.1\n" - "mercurial.obsolete._enabled = True") - self.append('.hg/hgrc','\n[extensions]\nobs=.hg/obs.py') - -class test_obsolete_client(test_obsolete_baselib): - """check client methods with obsolete changesets enabled""" - def test_debugobsolete_success(self): - """check the obsolete extension is available""" - self.append('gna1','ga') - self.client.add(b('gna1')) - cs = self.client.commit(b('gna1'))[1] #get id - self.client.rawcommand([b('debugobsolete'), cs]) - - def test_obsolete_in(self): - """test the 'hidden' keyword with the 'in' method""" - if self.client.version < (2, 9, 0): - return - self.append('gna1','ga') - self.client.add(b('gna1')) - cs0 = self.client.commit(b('gna1'))[1] #get id - self.append('gna2','gaaa') - self.client.add(b('gna2')) - cs1 = self.client.commit(b('gna2'))[1] #get id - self.client.rawcommand([b('debugobsolete'), cs1]) - self.client.update(cs0) - self.assertFalse(cs1 in self.client) - self.assertTrue(cs0 in self.client) - self.client.hidden = True - self.assertTrue(cs1 in self.client) - -class test_hidden_context(test_obsolete_baselib): - """test the "hidden" context method with obsolete changesets enabled on - hidden and visible changesets""" - def test_hidden(self): - if self.client.version < (2, 9, 0): - return - self.append('gna1','ga') - self.client.add(b('gna1')) - cs0 = self.client.commit(b('gna1'))[1] #get id - ctx0 = self.client[cs0] - self.append('gna2','gaaa') - self.client.add(b('gna2')) - cs1 = self.client.commit(b('gna2'))[1] #get id - ctx1 = self.client[cs1] - self.client.rawcommand([b('debugobsolete'), cs1]) - self.client.update(cs0) - self.assertTrue(ctx1.hidden()) - self.assertFalse(ctx0.hidden()) diff -r 934608d4fcba -r 8341f2494b3f tests/test-import.py --- a/tests/test-import.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -import os -from tests import common -from hglib.util import b, BytesIO - -patch = b(""" -# HG changeset patch -# User test -# Date 0 0 -# Node ID c103a3dec114d882c98382d684d8af798d09d857 -# Parent 0000000000000000000000000000000000000000 -1 - -diff -r 000000000000 -r c103a3dec114 a ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/a Thu Jan 01 00:00:00 1970 +0000 -@@ -0,0 +1,1 @@ -+1 -""") - -class test_import(common.basetest): - def test_basic_cstringio(self): - self.client.import_(BytesIO(patch)) - self.assertEquals(self.client.cat([b('a')]), b('1\n')) - - def test_basic_file(self): - f = open('patch', 'wb') - f.write(patch) - f.close() - - # --no-commit - self.client.import_([b('patch')], nocommit=True) - self.assertEquals(open('a').read(), '1\n') - - self.client.update(clean=True) - os.remove('a') - - self.client.import_([b('patch')]) - self.assertEquals(self.client.cat([b('a')]), b('1\n')) diff -r 934608d4fcba -r 8341f2494b3f tests/test-init.py --- a/tests/test-init.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -from tests import common -import hglib, shutil -from hglib.util import b - -class test_init(common.basetest): - def test_exists(self): - self.assertRaises(hglib.error.CommandError, hglib.init) - - def test_basic(self): - self.client.close() - self.client = None - shutil.rmtree('.hg') - - self.client = hglib.init().open() - self.assertTrue(self.client.root().endswith(b('test_init'))) diff -r 934608d4fcba -r 8341f2494b3f tests/test-log.py --- a/tests/test-log.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_log(common.basetest): - def test_basic(self): - self.append('a', 'a') - rev0, node0 = self.client.commit(b('first'), addremove=True) - self.append('a', 'a') - rev1, node1 = self.client.commit(b('second')) - - revs = self.client.log() - revs.reverse() - - self.assertTrue(len(revs) == 2) - self.assertEquals(revs[1].node, node1) - - self.assertEquals(revs[0], self.client.log(b('0'))[0]) - self.assertEquals(self.client.log(), self.client.log(files=[b('a')])) - - self.assertEquals(self.client.log(), self.client.log(hidden=True)) - - def test_dash_in_filename(self): - self.append('-a', '-a') - self.client.commit(b('first'), addremove=True) - revs = self.client.log(files=[b('-a')]) - self.assertTrue(len(revs) == 1) - self.assertEquals(revs[0].rev, b('0')) - - def test_empty_short_option(self): - self.append('foobar', 'foobar') - self.client.commit(b('first'), addremove=True) - revs = self.client.log(keyword=b(''), files=[b('foobar')]) - self.assertTrue(len(revs) == 1) - self.assertEquals(revs[0].rev, b('0')) - - # def test_errors(self): - # self.assertRaisesRegexp(CommandError, 'abort: unknown revision', - # self.client.log, 'foo') - # self.append('a', 'a') - # self.client.commit('first', addremove=True) - # self.assertRaisesRegexp(CommandError, - # 'abort: unknown revision', - # self.client.log, 'bar') diff -r 934608d4fcba -r 8341f2494b3f tests/test-manifest.py --- a/tests/test-manifest.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -from tests import common -import hglib, os, stat -from hglib.util import b - -class test_manifest(common.basetest): - def test_basic(self): - self.append('a', 'a') - files = [b('a')] - manifest = [(b('047b75c6d7a3ef6a2243bd0e99f94f6ea6683597'), b('644'), - False, False, b('a'))] - - if os.name == 'posix': - self.append('b', 'b') - os.chmod('b', os.stat('b')[0] | stat.S_IEXEC) - os.symlink('b', 'c') - - files.extend([b('b'), b('c')]) - manifest.extend([(b('62452855512f5b81522aa3895892760bb8da9f3f'), - b('755'), True, False, b('b')), - (b('62452855512f5b81522aa3895892760bb8da9f3f'), - b('644'), False, True, b('c'))]) - - self.client.commit(b('first'), addremove=True) - - self.assertEquals(list(self.client.manifest(all=True)), files) - - self.assertEquals(list(self.client.manifest()), manifest) diff -r 934608d4fcba -r 8341f2494b3f tests/test-merge.py --- a/tests/test-merge.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_merge(common.basetest): - def setUp(self): - common.basetest.setUp(self) - - self.append('a', 'a') - rev, self.node0 = self.client.commit(b('first'), addremove=True) - - self.append('a', 'a') - rev, self.node1 = self.client.commit(b('change')) - - def test_basic(self): - self.client.update(self.node0) - self.append('b', 'a') - rev, node2 = self.client.commit(b('new file'), addremove=True) - self.client.merge(self.node1) - rev, node = self.client.commit(b('merge')) - diff = b("diff -r ") + node2[:12] + b(" -r ") + node[:12] + b(""" a ---- a/a -+++ b/a -@@ -1,1 +1,1 @@ --a -\ No newline at end of file -+aa -\ No newline at end of file -""") - - self.assertEquals(diff, self.client.diff(change=node, nodates=True)) - - def test_merge_prompt_abort(self): - self.client.update(self.node0) - self.client.remove(b('a')) - self.client.commit(b('remove')) - - self.assertRaises(hglib.error.CommandError, self.client.merge) - - def test_merge_prompt_noninteractive(self): - self.client.update(self.node0) - self.client.remove(b('a')) - rev, node = self.client.commit(b('remove')) - - if self.client.version >= (3, 7): - self.assertRaises(hglib.error.CommandError, - self.client.merge, - cb=hglib.merge.handlers.noninteractive) - else: - self.client.merge(cb=hglib.merge.handlers.noninteractive) - - diff = b("diff -r ") + node[:12] + b(""" a ---- /dev/null -+++ b/a -@@ -0,0 +1,1 @@ -+aa -\ No newline at end of file -""") - self.assertEquals(diff, self.client.diff(nodates=True)) - - def test_merge_prompt_cb(self): - self.client.update(self.node0) - self.client.remove(b('a')) - rev, node = self.client.commit(b('remove')) - - def cb(output): - return b('c') - - self.client.merge(cb=cb) - - diff = b("diff -r ") + node[:12] + b(""" a ---- /dev/null -+++ b/a -@@ -0,0 +1,1 @@ -+aa -\ No newline at end of file -""") - self.assertEquals(diff, self.client.diff(nodates=True)) diff -r 934608d4fcba -r 8341f2494b3f tests/test-move.py --- a/tests/test-move.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -import os -from tests import common -from hglib.util import b - -class test_move(common.basetest): - def test_basic(self): - self.append('a', 'a') - self.client.add(b('a')) - self.assertTrue(self.client.move(b('a'), b('b'))) - - # hg returns 0 even if there were warnings - #def test_warnings(self): - # self.append('a', 'a') - # self.client.add('a') - # os.mkdir('c') - # self.assertFalse(self.client.move(['a', 'b'], 'c')) diff -r 934608d4fcba -r 8341f2494b3f tests/test-outgoing-incoming.py --- a/tests/test-outgoing-incoming.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_outgoing_incoming(common.basetest): - def test_no_path(self): - self.assertRaises(hglib.error.CommandError, self.client.incoming) - - def test_empty(self): - self.client.clone(dest=b('other')) - self.other = hglib.open(b('other')) - - self.assertEquals(self.other.incoming(), []) - self.assertEquals(self.other.outgoing(), []) - - def test_basic(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - self.append('a', 'a') - self.client.commit(b('second')) - - self.client.clone(dest=b('other')) - other = hglib.open(b('other')) - - self.assertEquals(self.client.log(), other.log()) - self.assertEquals(self.client.outgoing(path=b('other')), - other.incoming()) - - self.append('a', 'a') - rev, node = self.client.commit(b('third')) - out = self.client.outgoing(path=b('other')) - - self.assertEquals(len(out), 1) - self.assertEquals(out[0].node, node) - - self.assertEquals(out, other.incoming()) - - def test_bookmarks(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - self.append('a', 'a') - self.client.commit(b('second')) - - self.client.clone(dest=b('other')) - other = hglib.open(b('other')) - - self.client.bookmark(b('bm1'), 1) - - self.assertEquals(other.incoming(bookmarks=True), - [(b('bm1'), self.client.tip().node[:12])]) - - self.assertEquals(self.client.outgoing(path=b('other'), bookmarks=True), - [(b('bm1'), self.client.tip().node[:12])]) diff -r 934608d4fcba -r 8341f2494b3f tests/test-parents.py --- a/tests/test-parents.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -from tests import common -from hglib.util import b - -class test_parents(common.basetest): - def test_noparents(self): - self.assertEquals(self.client.parents(), None) - - def test_basic(self): - self.append('a', 'a') - rev, node = self.client.commit(b('first'), addremove=True) - self.assertEquals(node, self.client.parents()[0].node) - self.assertEquals(node, self.client.parents(file=b('a'))[0].node) - - def test_two_parents(self): - pass diff -r 934608d4fcba -r 8341f2494b3f tests/test-paths.py --- a/tests/test-paths.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -import os -from tests import common -import hglib -from hglib.util import b - -class test_paths(common.basetest): - def test_basic(self): - f = open('.hg/hgrc', 'a') - f.write('[paths]\nfoo = bar\n') - f.close() - - # hgrc isn't watched for changes yet, have to reopen - self.client = hglib.open() - paths = self.client.paths() - self.assertEquals(len(paths), 1) - self.assertEquals(paths[b('foo')], - os.path.abspath('bar').encode('latin-1')) - self.assertEquals(self.client.paths(b('foo')), - os.path.abspath('bar').encode('latin-1')) diff -r 934608d4fcba -r 8341f2494b3f tests/test-phase.py --- a/tests/test-phase.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_phase(common.basetest): - """test the different ways to use the phase command""" - def test_phase(self): - """test getting data from a single changeset""" - self.append('a', 'a') - rev, node0 = self.client.commit(b('first'), addremove=True) - self.assertEqual([(0, b('draft'))], self.client.phase(node0)) - ctx = self.client[rev] - self.assertEqual(b('draft'), ctx.phase()) - - def test_phase_public(self): - """test phase change from draft to public""" - self.append('a', 'a') - rev, node0 = self.client.commit(b('first'), addremove=True) - self.client.phase(node0, public=True) - self.assertEqual([(0, b('public'))], self.client.phase(node0)) - ctx = self.client[rev] - self.assertEqual(b('public'), ctx.phase()) - - def test_phase_secret(self): - """test phase change from draft to secret""" - self.append('a', 'a') - rev, node0 = self.client.commit(b('first'), addremove=True) - self.assertRaises(hglib.error.CommandError, - self.client.phase, node0, secret=True) - self.client.phase(node0, secret=True, force=True) - self.assertEqual([(0, b('secret'))], self.client.phase(node0)) - ctx = self.client[rev] - self.assertEqual(b('secret'), ctx.phase()) - - - def test_phase_multiple(self): - """test phase changes and show the phases of the different changesets""" - self.append('a', 'a') - rev, node0 = self.client.commit(b('a'), addremove=True) - self.client.phase(node0, public=True) - self.append('b', 'b') - rev, node1 = self.client.commit(b('b'), addremove=True) - self.append('c', 'c') - rev, node2 = self.client.commit(b('c'), addremove=True) - self.client.phase(node2, secret=True, force=True) - self.assertEqual([(0, b('public')), (2, b('secret')), (1, b('draft'))], - self.client.phase([node0, node2, node1])) diff -r 934608d4fcba -r 8341f2494b3f tests/test-pull.py --- a/tests/test-pull.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_pull(common.basetest): - def test_basic(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - - self.client.clone(dest=b('other')) - other = hglib.open(b('other')) - - self.append('a', 'a') - self.client.commit(b('second')) - - self.assertTrue(other.pull()) - self.assertEquals(self.client.log(), other.log()) - - def test_unresolved(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - - self.client.clone(dest=b('other')) - other = hglib.open(b('other')) - - self.append('a', 'a') - self.client.commit(b('second')) - - self.append('other/a', 'b') - self.assertFalse(other.pull(update=True)) - self.assertTrue((b('M'), b('a')) in other.status()) diff -r 934608d4fcba -r 8341f2494b3f tests/test-push.py --- a/tests/test-push.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_push(common.basetest): - def test_basic(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - - self.client.clone(dest=b('other')) - other = hglib.open(b('other')) - - # broken in hg, doesn't return 1 if nothing to push - #self.assertFalse(self.client.push('other')) - - self.append('a', 'a') - self.client.commit(b('second')) - - self.assertTrue(self.client.push(b('other'))) - self.assertEquals(self.client.log(), other.log()) diff -r 934608d4fcba -r 8341f2494b3f tests/test-remove.py --- a/tests/test-remove.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -from tests import common -from hglib.util import b - -class test_remove(common.basetest): - def test_basic(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - self.assertTrue(self.client.remove([b('a')])) - - def test_warnings(self): - self.append('a', 'a') - self.client.commit(b('first'), addremove=True) - self.assertFalse(self.client.remove([b('a'), b('b')])) diff -r 934608d4fcba -r 8341f2494b3f tests/test-resolve.py --- a/tests/test-resolve.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_resolve(common.basetest): - def setUp(self): - common.basetest.setUp(self) - - self.append('a', 'a') - self.append('b', 'b') - rev, self.node0 = self.client.commit(b('first'), addremove=True) - - self.append('a', 'a') - self.append('b', 'b') - rev, self.node1 = self.client.commit(b('second')) - - def test_basic(self): - self.client.update(self.node0) - self.append('a', 'b') - self.append('b', 'a') - rev, self.node3 = self.client.commit(b('third')) - - self.assertRaises(hglib.error.CommandError, self.client.merge, - self.node1) - self.assertRaises(hglib.error.CommandError, - self.client.resolve, all=True) - - self.assertEquals([(b('U'), b('a')), (b('U'), b('b'))], - self.client.resolve(listfiles=True)) - - self.client.resolve(b('a'), mark=True) - self.assertEquals([(b('R'), b('a')), (b('U'), b('b'))], - self.client.resolve(listfiles=True)) diff -r 934608d4fcba -r 8341f2494b3f tests/test-status.py --- a/tests/test-status.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -import os -from tests import common -from hglib.util import b - -class test_status(common.basetest): - def test_empty(self): - self.assertEquals(self.client.status(), []) - - def test_one_of_each(self): - self.append('.hgignore', 'ignored') - self.append('ignored', 'a') - self.append('clean', 'a') - self.append('modified', 'a') - self.append('removed', 'a') - self.append('missing', 'a') - self.client.commit(b('first'), addremove=True) - self.append('modified', 'a') - self.append('added', 'a') - self.client.add([b('added')]) - os.remove('missing') - self.client.remove([b('removed')]) - self.append('untracked') - - l = [(b('M'), b('modified')), - (b('A'), b('added')), - (b('R'), b('removed')), - (b('C'), b('.hgignore')), - (b('C'), b('clean')), - (b('!'), b('missing')), - (b('?'), b('untracked')), - (b('I'), b('ignored'))] - - st = self.client.status(all=True) - - for i in l: - self.assertTrue(i in st) - - def test_copy(self): - self.append('source', 'a') - self.client.commit(b('first'), addremove=True) - self.client.copy(b('source'), b('dest')) - l = [(b('A'), b('dest')), (b(' '), b('source'))] - self.assertEquals(self.client.status(copies=True), l) - - def test_copy_origin_space(self): - self.append('s ource', 'a') - self.client.commit(b('first'), addremove=True) - self.client.copy(b('s ource'), b('dest')) - l = [(b('A'), b('dest')), (b(' '), b('s ource'))] - self.assertEquals(self.client.status(copies=True), l) diff -r 934608d4fcba -r 8341f2494b3f tests/test-summary.py --- a/tests/test-summary.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -import unittest -from tests import common -import hglib -from hglib.util import b - -class test_summary(common.basetest): - def test_empty(self): - d = {b('parent') : [(-1, b('000000000000'), b('tip'), None)], - b('branch') : b('default'), - b('commit') : True, - b('update') : 0} - - self.assertEquals(self.client.summary(), d) - - def test_basic(self): - self.append('a', 'a') - rev, node = self.client.commit(b('first'), addremove=True) - - d = {b('parent') : [(0, node[:12], b('tip'), b('first'))], - b('branch') : b('default'), - b('commit') : True, - b('update') : 0} - if self.client.version >= (3, 5): - d[b('phases')] = b('1 draft') - - self.assertEquals(self.client.summary(), d) - - def test_commit_dirty(self): - self.append('a', 'a') - rev, node = self.client.commit(b('first'), addremove=True) - self.append('a', 'a') - - d = {b('parent') : [(0, node[:12], b('tip'), b('first'))], - b('branch') : b('default'), - b('commit') : False, - b('update') : 0} - if self.client.version >= (3, 5): - d[b('phases')] = b('1 draft') - - self.assertEquals(self.client.summary(), d) - - def test_secret_commit_clean(self): - if self.client.version < (2, 1): - raise unittest.SkipTest('phase not supported') - self.append('a', 'a') - rev, node = self.client.commit(b('first'), addremove=True) - self.client.phase([b('%d') % rev], secret=True, force=True) - e = self.client.summary() - self.assertTrue(e[b('commit')]) - - def test_update(self): - self.append('a', 'a') - rev, node = self.client.commit(b('first'), addremove=True) - self.append('a', 'a') - self.client.commit(b('second')) - self.client.update(0) - - d = {b('parent') : [(0, node[:12], None, b('first'))], - b('branch') : b('default'), - b('commit') : True, - b('update') : 1} - if self.client.version >= (3, 5): - d[b('phases')] = b('2 draft') - - self.assertEquals(self.client.summary(), d) - - def test_remote(self): - self.append('a', 'a') - rev, node = self.client.commit(b('first'), addremove=True) - - self.client.clone(dest=b('other')) - other = hglib.open('other') - - d = {b('parent') : [(0, node[:12], b('tip'), b('first'))], - b('branch') : b('default'), - b('commit') : True, - b('update') : 0, - b('remote') : (0, 0, 0, 0)} - - self.assertEquals(other.summary(remote=True), d) - - self.append('a', 'a') - self.client.commit(b('second')) - - d[b('remote')] = (1, 0, 0, 0) - self.assertEquals(other.summary(remote=True), d) - - self.client.bookmark(b('bm')) - d[b('remote')] = (1, 1, 0, 0) - self.assertEquals(other.summary(remote=True), d) - - other.bookmark(b('bmother')) - d[b('remote')] = (1, 1, 0, 1) - if self.client.version < (2, 0, 0): - d[b('parent')] = [(0, node[:12], b('tip bmother'), b('first'))] - else: - d[b('bookmarks')] = b('*bmother') - self.assertEquals(other.summary(remote=True), d) - - self.append('other/a', 'a') - rev, node = other.commit(b('second in other')) - - d[b('remote')] = (1, 1, 1, 1) - if self.client.version < (2, 0, 0): - tags = b('tip bmother') - else: - tags = b('tip') - d[b('parent')] = [(1, node[:12], tags, b('second in other'))] - if self.client.version >= (3, 5): - d[b('phases')] = b('1 draft') - - self.assertEquals(other.summary(remote=True), d) - - def test_two_parents(self): - self.append('a', 'a') - rev0, node = self.client.commit(b('first'), addremove=True) - - self.append('a', 'a') - rev1, node1 = self.client.commit(b('second')) - - self.client.update(rev0) - self.append('b', 'a') - rev2, node2 = self.client.commit(b('third'), addremove=True) - - self.client.merge(rev1) - - d = {b('parent') : [(2, node2[:12], b('tip'), b('third')), - (1, node1[:12], None, b('second'))], - b('branch') : b('default'), - b('commit') : False, - b('update') : 0} - if self.client.version >= (3, 5): - d[b('phases')] = b('3 draft') - - self.assertEquals(self.client.summary(), d) diff -r 934608d4fcba -r 8341f2494b3f tests/test-tags.py --- a/tests/test-tags.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -from tests import common -import hglib -from hglib.util import b - -class test_tags(common.basetest): - def test_basic(self): - self.append('a', 'a') - rev, node = self.client.commit(b('first'), addremove=True) - self.client.tag(b('my tag')) - self.client.tag(b('local tag'), rev=rev, local=True) - - # filecache that was introduced in 2.0 makes us see the local tag, for - # now we have to reconnect - if self.client.version < (2, 0, 0): - self.client = hglib.open() - - tags = self.client.tags() - self.assertEquals(tags, - [(b('tip'), 1, self.client.tip().node[:12], False), - (b('my tag'), 0, node[:12], False), - (b('local tag'), 0, node[:12], True)]) diff -r 934608d4fcba -r 8341f2494b3f tests/test-update.py --- a/tests/test-update.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -from tests import common -from hglib import error -from hglib.util import b, strtobytes - -class test_update(common.basetest): - def setUp(self): - common.basetest.setUp(self) - self.append('a', 'a') - self.rev0, self.node0 = self.client.commit(b('first'), addremove=True) - self.append('a', 'a') - self.rev1, self.node1 = self.client.commit(b('second')) - - def test_basic(self): - u, m, r, ur = self.client.update(self.rev0) - self.assertEquals(u, 1) - self.assertEquals(m, 0) - self.assertEquals(r, 0) - self.assertEquals(ur, 0) - - def test_unresolved(self): - self.client.update(self.rev0) - self.append('a', 'b') - u, m, r, ur = self.client.update() - self.assertEquals(u, 0) - self.assertEquals(m, 0) - self.assertEquals(r, 0) - self.assertEquals(ur, 1) - self.assertTrue((b('M'), b('a')) in self.client.status()) - - def test_merge(self): - self.append('a', '\n\n\n\nb') - rev2, node2 = self.client.commit(b('third')) - self.append('a', 'b') - self.client.commit(b('fourth')) - self.client.update(rev2) - old = open('a').read() - f = open('a', 'wb') - f.write(b('a') + old.encode('latin-1')) - f.close() - u, m, r, ur = self.client.update() - self.assertEquals(u, 0) - self.assertEquals(m, 1) - self.assertEquals(r, 0) - self.assertEquals(ur, 0) - self.assertEquals(self.client.status(), [(b('M'), b('a'))]) - - def test_tip(self): - self.client.update(self.rev0) - u, m, r, ur = self.client.update() - self.assertEquals(u, 1) - self.assertEquals(self.client.parents()[0].node, self.node1) - - self.client.update(self.rev0) - self.append('a', 'b') - rev2, node2 = self.client.commit(b('new head')) - self.client.update(self.rev0) - - self.client.update() - self.assertEquals(self.client.parents()[0].node, node2) - - def test_check_clean(self): - self.assertRaises(ValueError, self.client.update, clean=True, - check=True) - - def test_clean(self): - old = open('a').read() - self.append('a', 'b') - self.assertRaises(error.CommandError, self.client.update, check=True) - - u, m, r, ur = self.client.update(clean=True) - self.assertEquals(u, 1) - self.assertEquals(old, open('a').read()) - - def test_basic_plain(self): - f = open('.hg/hgrc', 'a') - f.write('[defaults]\nupdate=-v\n') - f.close() - self.test_basic() - - def disabled_largefiles(self): - # we don't run reposetup after a session has started, so this - # test is broken - import os - f = open('.hg/hgrc', 'a') - f.write('[extensions]\nlargefiles=\n') - f.close() - self.append('b', 'a') - try: - self.client.rawcommand([b('add'), b('b'), b('--large')]) - except error.CommandError: - return - - rev2, node2 = self.client.commit(b('third')) - # Go back to 0 - self.client.rawcommand([b('update'), strtobytes(self.rev0)], - # Keep the 'changed' version - prompt=lambda s, d: 'c\n') - u, m, r, ur = self.client.update(rev2, clean=True) - self.assertEquals(u, 2) - self.assertEquals(m, 0) - self.assertEquals(r, 0) - self.assertEquals(ur, 0) diff -r 934608d4fcba -r 8341f2494b3f tests/test_annotate.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_annotate.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,32 @@ +from tests import common +from hglib.util import b + +class test_annotate(common.basetest): + def test_basic(self): + self.append('a', 'a\n') + rev, node0 = self.client.commit(b('first'), addremove=True) + self.append('a', 'a\n') + rev, node1 = self.client.commit(b('second')) + + self.assertEquals(list(self.client.annotate(b('a'))), + [(b('0'), b('a')), (b('1'), b('a'))]) + self.assertEquals(list( + self.client.annotate( + b('a'), user=True, file=True, + number=True, changeset=True, line=True, verbose=True)), + [(b('test 0 ') + node0[:12] + b(' a:1'), b('a')), + (b('test 1 ') + node1[:12] + b(' a:2'), b('a'))]) + + def test_files(self): + self.append('a', 'a\n') + rev, node0 = self.client.commit(b('first'), addremove=True) + self.append('b', 'b\n') + rev, node1 = self.client.commit(b('second'), addremove=True) + self.assertEquals(list(self.client.annotate([b('a'), b('b')])), + [(b('0'), b('a')), (b('1'), b('b'))]) + + def test_two_colons(self): + self.append('a', 'a: b\n') + self.client.commit(b('first'), addremove=True) + self.assertEquals(list(self.client.annotate(b('a'))), + [(b('0'), b('a: b'))]) diff -r 934608d4fcba -r 8341f2494b3f tests/test_bookmarks.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_bookmarks.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,26 @@ +from tests import common +from hglib.util import b + +class test_bookmarks(common.basetest): + def test_empty(self): + self.assertEquals(self.client.bookmarks(), ([], -1)) + + def test_basic(self): + self.append('a', 'a') + rev0, node0 = self.client.commit(b('first'), addremove=True) + self.append('a', 'a') + rev1, node1 = self.client.commit(b('second')) + + self.client.bookmark(b('zero'), rev0) + self.assertEquals(self.client.bookmarks(), + ([(b('zero'), rev0, node0[:12])], -1)) + + self.client.bookmark(b('one'), rev1) + self.assertEquals(self.client.bookmarks()[0], + [(b('one'), rev1, node1[:12]), + (b('zero'), rev0, node0[:12])]) + + #def test_spaces(self): + # self.client.bookmark('s pace', self.rev0) + # self.assertEquals(self.client.bookmarks(), + # ([('s pace', 0, self.rev0.node[:12])], -1)) diff -r 934608d4fcba -r 8341f2494b3f tests/test_branch.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_branch.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,46 @@ +from tests import common +import hglib +from hglib.util import b + +class test_branch(common.basetest): + def test_empty(self): + self.assertEquals(self.client.branch(), b('default')) + + def test_basic(self): + self.assertEquals(self.client.branch(b('foo')), b('foo')) + self.append('a', 'a') + rev, node = self.client.commit(b('first'), addremove=True) + + rev = self.client.log(node)[0] + + self.assertEquals(rev.branch, b('foo')) + self.assertEquals(self.client.branches(), + [(rev.branch, int(rev.rev), rev.node[:12])]) + + def test_reset_with_name(self): + self.assertRaises(ValueError, self.client.branch, b('foo'), clean=True) + + def test_reset(self): + self.client.branch(b('foo')) + self.assertEquals(self.client.branch(clean=True), b('default')) + + def test_exists(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + self.client.branch(b('foo')) + self.append('a', 'a') + self.client.commit(b('second')) + self.assertRaises(hglib.error.CommandError, + self.client.branch, b('default')) + + def test_force(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + self.client.branch(b('foo')) + self.append('a', 'a') + self.client.commit(b('second')) + + self.assertRaises(hglib.error.CommandError, + self.client.branch, b('default')) + self.assertEquals(self.client.branch(b('default'), force=True), + b('default')) diff -r 934608d4fcba -r 8341f2494b3f tests/test_branches.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_branches.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,25 @@ +from tests import common +import hglib +from hglib.util import b + +class test_branches(common.basetest): + def test_empty(self): + self.assertEquals(self.client.branches(), []) + + def test_basic(self): + self.append('a', 'a') + rev0 = self.client.commit(b('first'), addremove=True) + self.client.branch(b('foo')) + self.append('a', 'a') + rev1 = self.client.commit(b('second')) + branches = self.client.branches() + + expected = [] + for r, n in (rev1, rev0): + r = self.client.log(r)[0] + expected.append((r.branch, int(r.rev), r.node[:12])) + + self.assertEquals(branches, expected) + + def test_active_closed(self): + pass diff -r 934608d4fcba -r 8341f2494b3f tests/test_bundle.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_bundle.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,18 @@ +from tests import common +from hglib.util import b + +class test_bundle(common.basetest): + def test_no_changes(self): + self.append('a', 'a') + rev, node0 = self.client.commit(b('first'), addremove=True) + self.assertFalse(self.client.bundle(b('bundle'), destrepo=b('.'))) + + def test_basic(self): + self.append('a', 'a') + rev, node0 = self.client.commit(b('first'), addremove=True) + self.client.clone(dest=b('other')) + + self.append('a', 'a') + rev, node1 = self.client.commit(b('second')) + + self.assertTrue(self.client.bundle(b('bundle'), destrepo=b('other'))) diff -r 934608d4fcba -r 8341f2494b3f tests/test_clone.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_clone.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,16 @@ +import os +from tests import common +import hglib +from hglib.util import b + +class test_clone(common.basetest): + def test_basic(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + cloned = hglib.clone(b('.'), b('cloned')) + self.assertRaises(ValueError, cloned.log) + cloned.open() + self.assertEquals(self.client.log(), cloned.log()) + + def test_clone_uncompressed(self): + hglib.clone(b('.'), b('cloned'), uncompressed=True) diff -r 934608d4fcba -r 8341f2494b3f tests/test_commit.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_commit.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,67 @@ +from tests import common +import hglib, datetime +from hglib.util import b + +class test_commit(common.basetest): + def test_user(self): + self.append('a', 'a') + rev, node = self.client.commit(b('first'), addremove=True, + user=b('foo')) + rev = self.client.log(node)[0] + self.assertEquals(rev.author, b('foo')) + + def test_no_user(self): + self.append('a', 'a') + self.assertRaises(hglib.error.CommandError, + self.client.commit, b('first'), user=b('')) + + def test_close_branch(self): + self.append('a', 'a') + rev0, node0 = self.client.commit(b('first'), addremove=True) + self.client.branch(b('foo')) + self.append('a', 'a') + rev1, node1 = self.client.commit(b('second')) + revclose = self.client.commit(b('closing foo'), closebranch=True) + rev0, rev1, revclose = self.client.log([node0, node1, revclose[1]]) + + self.assertEquals(self.client.branches(), + [(rev0.branch, int(rev0.rev), rev0.node[:12])]) + + self.assertEquals(self.client.branches(closed=True), + [(revclose.branch, int(revclose.rev), + revclose.node[:12]), + (rev0.branch, int(rev0.rev), rev0.node[:12])]) + + def test_message_logfile(self): + self.assertRaises(ValueError, self.client.commit, b('foo'), + logfile=b('bar')) + self.assertRaises(ValueError, self.client.commit) + + def test_date(self): + self.append('a', 'a') + now = datetime.datetime.now().replace(microsecond=0) + rev0, node0 = self.client.commit( + b('first'), addremove=True, + date=now.isoformat(' ').encode('latin-1')) + + self.assertEquals(now, self.client.tip().date) + + def test_amend(self): + self.append('a', 'a') + now = datetime.datetime.now().replace(microsecond=0) + rev0, node0 = self.client.commit( + b('first'), addremove=True, + date=now.isoformat(' ').encode('latin-1')) + + self.assertEquals(now, self.client.tip().date) + + self.append('a', 'a') + rev1, node1 = self.client.commit(amend=True) + self.assertEquals(now, self.client.tip().date) + self.assertNotEquals(node0, node1) + self.assertEqual(1, len(self.client.log())) + + def test_nul_injection(self): + self.append('a', 'a') + self.assertRaises(ValueError, lambda: self.client.commit(b('fail\0-A'))) + self.assertEqual(0, len(self.client.log())) diff -r 934608d4fcba -r 8341f2494b3f tests/test_config.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_config.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,37 @@ +from tests import common +import os, hglib +from hglib.util import b + +class test_config(common.basetest): + def setUp(self): + common.basetest.setUp(self) + f = open('.hg/hgrc', 'a') + f.write('[section]\nkey=value\n') + f.close() + self.client = hglib.open() + + def test_basic(self): + config = self.client.config() + + self.assertTrue( + (b('section'), b('key'), b('value')) in self.client.config()) + + self.assertTrue([(b('section'), b('key'), b('value'))], + self.client.config(b('section'))) + self.assertTrue([(b('section'), b('key'), b('value'))], + self.client.config([b('section'), b('foo')])) + self.assertRaises(hglib.error.CommandError, + self.client.config, [b('a.b'), b('foo')]) + + def test_show_source(self): + config = self.client.config(showsource=True) + + self.assertTrue((os.path.abspath(b('.hg/hgrc')) + b(':2'), + b('section'), b('key'), b('value')) in config) + +class test_config_arguments(common.basetest): + def test_basic(self): + client = hglib.open(configs=[b('diff.unified=5'), b('a.b=foo')]) + self.assertEqual(client.config(b('a')), [(b('a'), b('b'), b('foo'))]) + self.assertEqual(client.config(b('diff')), + [(b('diff'), b('unified'), b('5'))]) diff -r 934608d4fcba -r 8341f2494b3f tests/test_context.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_context.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,95 @@ +import sys +from tests import common +from hglib.error import CommandError +import hglib +from hglib import context +from hglib.util import b + +class test_context(common.basetest): + def test_non_existent(self): + self.assertRaises(ValueError, context.changectx, self.client, b('foo')) + + def test_basic(self): + self.append('a', 'a') + self.append('b', 'b') + rev0, node0 = self.client.commit(b('first'), addremove=True) + + self.append('c', 'c') + rev1, node1 = self.client.commit(b('second'), addremove=True) + + self.assertRaises(KeyError, self.client.__getitem__, 'doesnotexist') + + ctx = self.client[node0] + + self.assertEquals(ctx.description(), b('first')) + self.assertEquals(str(ctx), node0[:12].decode('latin-1')) + self.assertEquals(ctx.node(), node0) + self.assertEquals(int(ctx), rev0) + self.assertEquals(ctx.rev(), rev0) + self.assertEquals(ctx.branch(), b('default')) + + self.assertTrue(ctx) + + self.assertTrue(b('a') in ctx and b('b') in ctx) + self.assertFalse(b('c') in ctx) + self.assertEquals(list(ctx), [b('a'), b('b')]) + self.assertEquals(ctx.files(), [b('a'), b('b')]) + + self.assertEquals(ctx.modified(), []) + self.assertEquals(ctx.added(), [b('a'), b('b')]) + self.assertEquals(ctx.removed(), []) + self.assertEquals(ctx.ignored(), []) + self.assertEquals(ctx.clean(), []) + + man = {b('a') : b('047b75c6d7a3ef6a2243bd0e99f94f6ea6683597'), + b('b') : b('62452855512f5b81522aa3895892760bb8da9f3f')} + self.assertEquals(ctx.manifest(), man) + + self.assertEquals([int(c) for c in ctx.parents()], [-1]) + self.assertEquals(int(ctx.p1()), -1) + self.assertEquals(int(ctx.p2()), -1) + + self.assertEquals([int(c) for c in ctx.children()], [1]) + self.assertEquals([int(c) for c in ctx.descendants()], [0, 1]) + self.assertEquals([int(c) for c in ctx.ancestors()], [0]) + + self.client.bookmark(b('bookmark'), inactive=True, rev=node0) + self.assertEquals(ctx.bookmarks(), [b('bookmark')]) + + self.client.tag(b('tag'), rev=node0) + # tags are read on construction + self.assertEquals(self.client[node0].tags(), [b('tag')]) + + def test_construction(self): + self.append('a', 'a') + rev0, node0 = self.client.commit(b('first'), addremove=True) + tip = self.client.tip() + + # from client.revision + ctx = context.changectx(self.client, tip) + self.assertEquals(ctx.node(), tip.node) + + # from revset + ctx = context.changectx(self.client, b('all()')) + self.assertEquals(ctx.node(), tip.node) + + def test_in_keyword(self): + """ + test the 'in' keyword using both revision numbers or changeset ids. + """ + if sys.version_info < (2, 7): + return + + self.append('a', 'a') + rev0, node0 = self.client.commit(b('first'), addremove=True) + self.append('a', 'a') + rev1, node1 = self.client.commit(b('second')) + + self.assertIn(1, self.client) + hash_1 = self.client.log(0)[0][1] + self.assertIn(hash_1, self.client) + self.assertNotIn(2, self.client) + hash_2 = self.client.log(1)[0][1] + self.assertIn(hash_2, self.client) + hash_2 = b('deadbeef') + self.assertNotIn(hash_2, self.client) diff -r 934608d4fcba -r 8341f2494b3f tests/test_copy.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_copy.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,23 @@ +from tests import common +import hglib +from hglib.util import b + +class test_copy(common.basetest): + def test_basic(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + + self.assertTrue(self.client.copy(b('a'), b('b'))) + self.assertEquals(self.client.status(), [(b('A'), b('b'))]) + self.append('c', 'a') + self.assertTrue(self.client.copy(b('a'), b('c'), after=True)) + self.assertEquals(self.client.status(), + [(b('A'), b('b')), (b('A'), b('c'))]) + + # hg returns 0 even if there were warnings + #def test_warnings(self): + # self.append('a', 'a') + # self.client.commit('first', addremove=True) + + # self.assertTrue(self.client.copy('a', 'b')) + # self.assertFalse(self.client.copy('a', 'b')) diff -r 934608d4fcba -r 8341f2494b3f tests/test_diff.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_diff.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,47 @@ +from tests import common +from hglib.util import b + +class test_diff(common.basetest): + def test_basic(self): + self.append('a', 'a\n') + self.client.add(b('a')) + diff1 = b("""diff -r 000000000000 a +--- /dev/null ++++ b/a +@@ -0,0 +1,1 @@ ++a +""") + self.assertEquals(diff1, self.client.diff(nodates=True)) + self.assertEquals(diff1, self.client.diff([b('a')], nodates=True)) + rev0, node0 = self.client.commit(b('first')) + diff2 = b("""diff -r 000000000000 -r """) + node0[:12] + b(""" a +--- /dev/null ++++ b/a +@@ -0,0 +1,1 @@ ++a +""") + self.assertEquals(diff2, self.client.diff(change=rev0, nodates=True)) + self.append('a', 'a\n') + rev1, node1 = self.client.commit(b('second')) + diff3 = b("""diff -r """) + node0[:12] + b(""" a +--- a/a ++++ b/a +@@ -1,1 +1,2 @@ + a ++a +""") + self.assertEquals(diff3, self.client.diff(revs=[rev0], nodates=True)) + diff4 = b("""diff -r """) + node0[:12] + b(" -r ") + node1[:12] + b( + """ a +--- a/a ++++ b/a +@@ -1,1 +1,2 @@ + a ++a +""") + self.assertEquals(diff4, self.client.diff(revs=[rev0, rev1], + nodates=True)) + + def test_basic_plain(self): + open('.hg/hgrc', 'a').write('[defaults]\ndiff=--git\n') + self.test_basic() diff -r 934608d4fcba -r 8341f2494b3f tests/test_encoding.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_encoding.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,8 @@ +from tests import common +import hglib +from hglib.util import b + +class test_encoding(common.basetest): + def test_basic(self): + self.client = hglib.open(encoding='utf-8') + self.assertEquals(self.client.encoding, b('utf-8')) diff -r 934608d4fcba -r 8341f2494b3f tests/test_forget.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_forget.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,14 @@ +from tests import common +from hglib.util import b + +class test_forget(common.basetest): + def test_basic(self): + self.append('a', 'a') + self.client.add([b('a')]) + self.assertTrue(self.client.forget(b('a'))) + + def test_warnings(self): + self.assertFalse(self.client.forget(b('a'))) + self.append('a', 'a') + self.client.add([b('a')]) + self.assertFalse(self.client.forget([b('a'), b('b')])) diff -r 934608d4fcba -r 8341f2494b3f tests/test_grep.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_grep.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,64 @@ +from tests import common +from hglib.util import b + +class test_grep(common.basetest): + def test_basic(self): + self.append('a', 'x\n') + self.append('b', 'xy\n') + self.client.commit(b('first'), addremove=True) + + # no match + self.assertEquals(list(self.client.grep(b('c'))), []) + + if self.client.version >= (5, 2): + self.assertEquals(list(self.client.grep(b('x'))), + [(b('a'), b('x')), (b('b'), b('xy'))]) + self.assertEquals(list(self.client.grep(b('x'), b('a'))), + [(b('a'), b('x'))]) + + self.assertEquals(list(self.client.grep(b('y'))), + [(b('b'), b('xy'))]) + else: + self.assertEquals(list(self.client.grep(b('x'))), + [(b('a'), b('0'), b('x')), (b('b'), b('0'), b('xy'))]) + self.assertEquals(list(self.client.grep(b('x'), b('a'))), + [(b('a'), b('0'), b('x'))]) + self.assertEquals(list(self.client.grep(b('y'))), + [(b('b'), b('0'), b('xy'))]) + + def test_options(self): + self.append('a', 'x\n') + self.append('b', 'xy\n') + rev, node = self.client.commit(b('first'), addremove=True) + + self.assertEquals([(b('a'), b('0'), b('+'), b('x')), + (b('b'), b('0'), b('+'), b('xy'))], + list(self.client.grep(b('x'), all=True))) + + if self.client.version >= (5, 2): + self.assertEquals([(b('a'),), (b('b'),)], + list(self.client.grep(b('x'), fileswithmatches=True))) + + self.assertEquals([(b('a'), b('1'), b('x')), (b('b'), b('1'), b('xy'))], + list(self.client.grep(b('x'), line=True))) + + self.assertEquals([(b('a'), b('test'), b('x')), + (b('b'), b('test'), b('xy'))], + list(self.client.grep(b('x'), user=True))) + else: + self.assertEquals([(b('a'), b('0')), (b('b'), b('0'))], + list(self.client.grep(b('x'), fileswithmatches=True))) + + self.assertEquals([(b('a'), b('0'), b('1'), b('x')), + (b('b'), b('0'), b('1'), b('xy'))], + list(self.client.grep(b('x'), line=True))) + + self.assertEquals([(b('a'), b('0'), b('test'), b('x')), + (b('b'), b('0'), b('test'), b('xy'))], + list(self.client.grep(b('x'), user=True))) + + self.assertEquals([(b('a'), b('0'), b('1'), b('+'), b('test')), + (b('b'), b('0'), b('1'), b('+'), b('test'))], + list(self.client.grep(b('x'), all=True, user=True, + line=True, + fileswithmatches=True))) diff -r 934608d4fcba -r 8341f2494b3f tests/test_heads.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_heads.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,17 @@ +from tests import common +from hglib.util import b + +class test_heads(common.basetest): + def test_empty(self): + self.assertEquals(self.client.heads(), []) + + def test_basic(self): + self.append('a', 'a') + rev, node0 = self.client.commit(b('first'), addremove=True) + self.assertEquals(self.client.heads(), [self.client.tip()]) + + self.client.branch(b('foo')) + self.append('a', 'a') + rev, node1 = self.client.commit(b('second')) + + self.assertEquals(self.client.heads(node0, topological=True), []) diff -r 934608d4fcba -r 8341f2494b3f tests/test_hglib.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_hglib.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,25 @@ +from tests import common +import hglib + +class test_hglib(common.basetest): + def setUp(self): + pass + + def test_close_fds(self): + """A weird Python bug that has something to do to inherited file + descriptors, see http://bugs.python.org/issue12786 + """ + common.basetest.setUp(self) + client2 = hglib.open() + self.client.close() + + def test_open_nonexistent(self): + # setup stuff necessary for basetest.tearDown() + self.clients = [] + self._oldopen = hglib.client.hgclient.open + try: + self.clients.append(hglib.open('inexistent')) + # hg 3.5 can't report error (fixed by 7332bf4ae959) + #self.fail('ServerError not raised') + except hglib.error.ServerError as inst: + self.assertTrue('inexistent' in str(inst)) diff -r 934608d4fcba -r 8341f2494b3f tests/test_hidden.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_hidden.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,74 @@ +from tests import common +import hglib, datetime +from hglib.error import CommandError +from hglib.util import b + +class test_obsolete_reference(common.basetest): + """make sure obsolete changesets are disabled""" + def test_debugobsolete_failure(self): + f = open('gna1','w') + f.write('g') + f.close() + self.client.add(b('gna1')) + cs = self.client.commit(b('gna1'))[1] #get id + self.assertRaises(CommandError, + self.client.rawcommand, [b('debugobsolete'), cs]) + + +class test_obsolete_baselib(common.basetest): + """base test class with obsolete changesets enabled""" + def setUp(self): + #create an extension which only activates obsolete + super(test_obsolete_baselib, self).setUp() + self.append('.hg/obs.py', + "import mercurial.obsolete\n" + "# 3.2 and later\n" + "mercurial.obsolete.isenabled = lambda r, opt: True\n" + "# Dropped in 5.1\n" + "mercurial.obsolete._enabled = True") + self.append('.hg/hgrc','\n[extensions]\nobs=.hg/obs.py') + +class test_obsolete_client(test_obsolete_baselib): + """check client methods with obsolete changesets enabled""" + def test_debugobsolete_success(self): + """check the obsolete extension is available""" + self.append('gna1','ga') + self.client.add(b('gna1')) + cs = self.client.commit(b('gna1'))[1] #get id + self.client.rawcommand([b('debugobsolete'), cs]) + + def test_obsolete_in(self): + """test the 'hidden' keyword with the 'in' method""" + if self.client.version < (2, 9, 0): + return + self.append('gna1','ga') + self.client.add(b('gna1')) + cs0 = self.client.commit(b('gna1'))[1] #get id + self.append('gna2','gaaa') + self.client.add(b('gna2')) + cs1 = self.client.commit(b('gna2'))[1] #get id + self.client.rawcommand([b('debugobsolete'), cs1]) + self.client.update(cs0) + self.assertFalse(cs1 in self.client) + self.assertTrue(cs0 in self.client) + self.client.hidden = True + self.assertTrue(cs1 in self.client) + +class test_hidden_context(test_obsolete_baselib): + """test the "hidden" context method with obsolete changesets enabled on + hidden and visible changesets""" + def test_hidden(self): + if self.client.version < (2, 9, 0): + return + self.append('gna1','ga') + self.client.add(b('gna1')) + cs0 = self.client.commit(b('gna1'))[1] #get id + ctx0 = self.client[cs0] + self.append('gna2','gaaa') + self.client.add(b('gna2')) + cs1 = self.client.commit(b('gna2'))[1] #get id + ctx1 = self.client[cs1] + self.client.rawcommand([b('debugobsolete'), cs1]) + self.client.update(cs0) + self.assertTrue(ctx1.hidden()) + self.assertFalse(ctx0.hidden()) diff -r 934608d4fcba -r 8341f2494b3f tests/test_import.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_import.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,38 @@ +import os +from tests import common +from hglib.util import b, BytesIO + +patch = b(""" +# HG changeset patch +# User test +# Date 0 0 +# Node ID c103a3dec114d882c98382d684d8af798d09d857 +# Parent 0000000000000000000000000000000000000000 +1 + +diff -r 000000000000 -r c103a3dec114 a +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/a Thu Jan 01 00:00:00 1970 +0000 +@@ -0,0 +1,1 @@ ++1 +""") + +class test_import(common.basetest): + def test_basic_cstringio(self): + self.client.import_(BytesIO(patch)) + self.assertEquals(self.client.cat([b('a')]), b('1\n')) + + def test_basic_file(self): + f = open('patch', 'wb') + f.write(patch) + f.close() + + # --no-commit + self.client.import_([b('patch')], nocommit=True) + self.assertEquals(open('a').read(), '1\n') + + self.client.update(clean=True) + os.remove('a') + + self.client.import_([b('patch')]) + self.assertEquals(self.client.cat([b('a')]), b('1\n')) diff -r 934608d4fcba -r 8341f2494b3f tests/test_init.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_init.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,15 @@ +from tests import common +import hglib, shutil +from hglib.util import b + +class test_init(common.basetest): + def test_exists(self): + self.assertRaises(hglib.error.CommandError, hglib.init) + + def test_basic(self): + self.client.close() + self.client = None + shutil.rmtree('.hg') + + self.client = hglib.init().open() + self.assertTrue(self.client.root().endswith(b('test_init'))) diff -r 934608d4fcba -r 8341f2494b3f tests/test_log.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_log.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,44 @@ +from tests import common +import hglib +from hglib.util import b + +class test_log(common.basetest): + def test_basic(self): + self.append('a', 'a') + rev0, node0 = self.client.commit(b('first'), addremove=True) + self.append('a', 'a') + rev1, node1 = self.client.commit(b('second')) + + revs = self.client.log() + revs.reverse() + + self.assertTrue(len(revs) == 2) + self.assertEquals(revs[1].node, node1) + + self.assertEquals(revs[0], self.client.log(b('0'))[0]) + self.assertEquals(self.client.log(), self.client.log(files=[b('a')])) + + self.assertEquals(self.client.log(), self.client.log(hidden=True)) + + def test_dash_in_filename(self): + self.append('-a', '-a') + self.client.commit(b('first'), addremove=True) + revs = self.client.log(files=[b('-a')]) + self.assertTrue(len(revs) == 1) + self.assertEquals(revs[0].rev, b('0')) + + def test_empty_short_option(self): + self.append('foobar', 'foobar') + self.client.commit(b('first'), addremove=True) + revs = self.client.log(keyword=b(''), files=[b('foobar')]) + self.assertTrue(len(revs) == 1) + self.assertEquals(revs[0].rev, b('0')) + + # def test_errors(self): + # self.assertRaisesRegexp(CommandError, 'abort: unknown revision', + # self.client.log, 'foo') + # self.append('a', 'a') + # self.client.commit('first', addremove=True) + # self.assertRaisesRegexp(CommandError, + # 'abort: unknown revision', + # self.client.log, 'bar') diff -r 934608d4fcba -r 8341f2494b3f tests/test_manifest.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_manifest.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,27 @@ +from tests import common +import hglib, os, stat +from hglib.util import b + +class test_manifest(common.basetest): + def test_basic(self): + self.append('a', 'a') + files = [b('a')] + manifest = [(b('047b75c6d7a3ef6a2243bd0e99f94f6ea6683597'), b('644'), + False, False, b('a'))] + + if os.name == 'posix': + self.append('b', 'b') + os.chmod('b', os.stat('b')[0] | stat.S_IEXEC) + os.symlink('b', 'c') + + files.extend([b('b'), b('c')]) + manifest.extend([(b('62452855512f5b81522aa3895892760bb8da9f3f'), + b('755'), True, False, b('b')), + (b('62452855512f5b81522aa3895892760bb8da9f3f'), + b('644'), False, True, b('c'))]) + + self.client.commit(b('first'), addremove=True) + + self.assertEquals(list(self.client.manifest(all=True)), files) + + self.assertEquals(list(self.client.manifest()), manifest) diff -r 934608d4fcba -r 8341f2494b3f tests/test_merge.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_merge.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,78 @@ +from tests import common +import hglib +from hglib.util import b + +class test_merge(common.basetest): + def setUp(self): + common.basetest.setUp(self) + + self.append('a', 'a') + rev, self.node0 = self.client.commit(b('first'), addremove=True) + + self.append('a', 'a') + rev, self.node1 = self.client.commit(b('change')) + + def test_basic(self): + self.client.update(self.node0) + self.append('b', 'a') + rev, node2 = self.client.commit(b('new file'), addremove=True) + self.client.merge(self.node1) + rev, node = self.client.commit(b('merge')) + diff = b("diff -r ") + node2[:12] + b(" -r ") + node[:12] + b(""" a +--- a/a ++++ b/a +@@ -1,1 +1,1 @@ +-a +\ No newline at end of file ++aa +\ No newline at end of file +""") + + self.assertEquals(diff, self.client.diff(change=node, nodates=True)) + + def test_merge_prompt_abort(self): + self.client.update(self.node0) + self.client.remove(b('a')) + self.client.commit(b('remove')) + + self.assertRaises(hglib.error.CommandError, self.client.merge) + + def test_merge_prompt_noninteractive(self): + self.client.update(self.node0) + self.client.remove(b('a')) + rev, node = self.client.commit(b('remove')) + + if self.client.version >= (3, 7): + self.assertRaises(hglib.error.CommandError, + self.client.merge, + cb=hglib.merge.handlers.noninteractive) + else: + self.client.merge(cb=hglib.merge.handlers.noninteractive) + + diff = b("diff -r ") + node[:12] + b(""" a +--- /dev/null ++++ b/a +@@ -0,0 +1,1 @@ ++aa +\ No newline at end of file +""") + self.assertEquals(diff, self.client.diff(nodates=True)) + + def test_merge_prompt_cb(self): + self.client.update(self.node0) + self.client.remove(b('a')) + rev, node = self.client.commit(b('remove')) + + def cb(output): + return b('c') + + self.client.merge(cb=cb) + + diff = b("diff -r ") + node[:12] + b(""" a +--- /dev/null ++++ b/a +@@ -0,0 +1,1 @@ ++aa +\ No newline at end of file +""") + self.assertEquals(diff, self.client.diff(nodates=True)) diff -r 934608d4fcba -r 8341f2494b3f tests/test_move.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_move.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,16 @@ +import os +from tests import common +from hglib.util import b + +class test_move(common.basetest): + def test_basic(self): + self.append('a', 'a') + self.client.add(b('a')) + self.assertTrue(self.client.move(b('a'), b('b'))) + + # hg returns 0 even if there were warnings + #def test_warnings(self): + # self.append('a', 'a') + # self.client.add('a') + # os.mkdir('c') + # self.assertFalse(self.client.move(['a', 'b'], 'c')) diff -r 934608d4fcba -r 8341f2494b3f tests/test_outgoing_incoming.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_outgoing_incoming.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,53 @@ +from tests import common +import hglib +from hglib.util import b + +class test_outgoing_incoming(common.basetest): + def test_no_path(self): + self.assertRaises(hglib.error.CommandError, self.client.incoming) + + def test_empty(self): + self.client.clone(dest=b('other')) + self.other = hglib.open(b('other')) + + self.assertEquals(self.other.incoming(), []) + self.assertEquals(self.other.outgoing(), []) + + def test_basic(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + self.append('a', 'a') + self.client.commit(b('second')) + + self.client.clone(dest=b('other')) + other = hglib.open(b('other')) + + self.assertEquals(self.client.log(), other.log()) + self.assertEquals(self.client.outgoing(path=b('other')), + other.incoming()) + + self.append('a', 'a') + rev, node = self.client.commit(b('third')) + out = self.client.outgoing(path=b('other')) + + self.assertEquals(len(out), 1) + self.assertEquals(out[0].node, node) + + self.assertEquals(out, other.incoming()) + + def test_bookmarks(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + self.append('a', 'a') + self.client.commit(b('second')) + + self.client.clone(dest=b('other')) + other = hglib.open(b('other')) + + self.client.bookmark(b('bm1'), 1) + + self.assertEquals(other.incoming(bookmarks=True), + [(b('bm1'), self.client.tip().node[:12])]) + + self.assertEquals(self.client.outgoing(path=b('other'), bookmarks=True), + [(b('bm1'), self.client.tip().node[:12])]) diff -r 934608d4fcba -r 8341f2494b3f tests/test_parents.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_parents.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,15 @@ +from tests import common +from hglib.util import b + +class test_parents(common.basetest): + def test_noparents(self): + self.assertEquals(self.client.parents(), None) + + def test_basic(self): + self.append('a', 'a') + rev, node = self.client.commit(b('first'), addremove=True) + self.assertEquals(node, self.client.parents()[0].node) + self.assertEquals(node, self.client.parents(file=b('a'))[0].node) + + def test_two_parents(self): + pass diff -r 934608d4fcba -r 8341f2494b3f tests/test_paths.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_paths.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,19 @@ +import os +from tests import common +import hglib +from hglib.util import b + +class test_paths(common.basetest): + def test_basic(self): + f = open('.hg/hgrc', 'a') + f.write('[paths]\nfoo = bar\n') + f.close() + + # hgrc isn't watched for changes yet, have to reopen + self.client = hglib.open() + paths = self.client.paths() + self.assertEquals(len(paths), 1) + self.assertEquals(paths[b('foo')], + os.path.abspath('bar').encode('latin-1')) + self.assertEquals(self.client.paths(b('foo')), + os.path.abspath('bar').encode('latin-1')) diff -r 934608d4fcba -r 8341f2494b3f tests/test_phase.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_phase.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,47 @@ +from tests import common +import hglib +from hglib.util import b + +class test_phase(common.basetest): + """test the different ways to use the phase command""" + def test_phase(self): + """test getting data from a single changeset""" + self.append('a', 'a') + rev, node0 = self.client.commit(b('first'), addremove=True) + self.assertEqual([(0, b('draft'))], self.client.phase(node0)) + ctx = self.client[rev] + self.assertEqual(b('draft'), ctx.phase()) + + def test_phase_public(self): + """test phase change from draft to public""" + self.append('a', 'a') + rev, node0 = self.client.commit(b('first'), addremove=True) + self.client.phase(node0, public=True) + self.assertEqual([(0, b('public'))], self.client.phase(node0)) + ctx = self.client[rev] + self.assertEqual(b('public'), ctx.phase()) + + def test_phase_secret(self): + """test phase change from draft to secret""" + self.append('a', 'a') + rev, node0 = self.client.commit(b('first'), addremove=True) + self.assertRaises(hglib.error.CommandError, + self.client.phase, node0, secret=True) + self.client.phase(node0, secret=True, force=True) + self.assertEqual([(0, b('secret'))], self.client.phase(node0)) + ctx = self.client[rev] + self.assertEqual(b('secret'), ctx.phase()) + + + def test_phase_multiple(self): + """test phase changes and show the phases of the different changesets""" + self.append('a', 'a') + rev, node0 = self.client.commit(b('a'), addremove=True) + self.client.phase(node0, public=True) + self.append('b', 'b') + rev, node1 = self.client.commit(b('b'), addremove=True) + self.append('c', 'c') + rev, node2 = self.client.commit(b('c'), addremove=True) + self.client.phase(node2, secret=True, force=True) + self.assertEqual([(0, b('public')), (2, b('secret')), (1, b('draft'))], + self.client.phase([node0, node2, node1])) diff -r 934608d4fcba -r 8341f2494b3f tests/test_pull.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_pull.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,31 @@ +from tests import common +import hglib +from hglib.util import b + +class test_pull(common.basetest): + def test_basic(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + + self.client.clone(dest=b('other')) + other = hglib.open(b('other')) + + self.append('a', 'a') + self.client.commit(b('second')) + + self.assertTrue(other.pull()) + self.assertEquals(self.client.log(), other.log()) + + def test_unresolved(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + + self.client.clone(dest=b('other')) + other = hglib.open(b('other')) + + self.append('a', 'a') + self.client.commit(b('second')) + + self.append('other/a', 'b') + self.assertFalse(other.pull(update=True)) + self.assertTrue((b('M'), b('a')) in other.status()) diff -r 934608d4fcba -r 8341f2494b3f tests/test_push.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_push.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,20 @@ +from tests import common +import hglib +from hglib.util import b + +class test_push(common.basetest): + def test_basic(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + + self.client.clone(dest=b('other')) + other = hglib.open(b('other')) + + # broken in hg, doesn't return 1 if nothing to push + #self.assertFalse(self.client.push('other')) + + self.append('a', 'a') + self.client.commit(b('second')) + + self.assertTrue(self.client.push(b('other'))) + self.assertEquals(self.client.log(), other.log()) diff -r 934608d4fcba -r 8341f2494b3f tests/test_remove.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_remove.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,13 @@ +from tests import common +from hglib.util import b + +class test_remove(common.basetest): + def test_basic(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + self.assertTrue(self.client.remove([b('a')])) + + def test_warnings(self): + self.append('a', 'a') + self.client.commit(b('first'), addremove=True) + self.assertFalse(self.client.remove([b('a'), b('b')])) diff -r 934608d4fcba -r 8341f2494b3f tests/test_resolve.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_resolve.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,33 @@ +from tests import common +import hglib +from hglib.util import b + +class test_resolve(common.basetest): + def setUp(self): + common.basetest.setUp(self) + + self.append('a', 'a') + self.append('b', 'b') + rev, self.node0 = self.client.commit(b('first'), addremove=True) + + self.append('a', 'a') + self.append('b', 'b') + rev, self.node1 = self.client.commit(b('second')) + + def test_basic(self): + self.client.update(self.node0) + self.append('a', 'b') + self.append('b', 'a') + rev, self.node3 = self.client.commit(b('third')) + + self.assertRaises(hglib.error.CommandError, self.client.merge, + self.node1) + self.assertRaises(hglib.error.CommandError, + self.client.resolve, all=True) + + self.assertEquals([(b('U'), b('a')), (b('U'), b('b'))], + self.client.resolve(listfiles=True)) + + self.client.resolve(b('a'), mark=True) + self.assertEquals([(b('R'), b('a')), (b('U'), b('b'))], + self.client.resolve(listfiles=True)) diff -r 934608d4fcba -r 8341f2494b3f tests/test_status.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_status.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,50 @@ +import os +from tests import common +from hglib.util import b + +class test_status(common.basetest): + def test_empty(self): + self.assertEquals(self.client.status(), []) + + def test_one_of_each(self): + self.append('.hgignore', 'ignored') + self.append('ignored', 'a') + self.append('clean', 'a') + self.append('modified', 'a') + self.append('removed', 'a') + self.append('missing', 'a') + self.client.commit(b('first'), addremove=True) + self.append('modified', 'a') + self.append('added', 'a') + self.client.add([b('added')]) + os.remove('missing') + self.client.remove([b('removed')]) + self.append('untracked') + + l = [(b('M'), b('modified')), + (b('A'), b('added')), + (b('R'), b('removed')), + (b('C'), b('.hgignore')), + (b('C'), b('clean')), + (b('!'), b('missing')), + (b('?'), b('untracked')), + (b('I'), b('ignored'))] + + st = self.client.status(all=True) + + for i in l: + self.assertTrue(i in st) + + def test_copy(self): + self.append('source', 'a') + self.client.commit(b('first'), addremove=True) + self.client.copy(b('source'), b('dest')) + l = [(b('A'), b('dest')), (b(' '), b('source'))] + self.assertEquals(self.client.status(copies=True), l) + + def test_copy_origin_space(self): + self.append('s ource', 'a') + self.client.commit(b('first'), addremove=True) + self.client.copy(b('s ource'), b('dest')) + l = [(b('A'), b('dest')), (b(' '), b('s ource'))] + self.assertEquals(self.client.status(copies=True), l) diff -r 934608d4fcba -r 8341f2494b3f tests/test_summary.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_summary.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,135 @@ +import unittest +from tests import common +import hglib +from hglib.util import b + +class test_summary(common.basetest): + def test_empty(self): + d = {b('parent') : [(-1, b('000000000000'), b('tip'), None)], + b('branch') : b('default'), + b('commit') : True, + b('update') : 0} + + self.assertEquals(self.client.summary(), d) + + def test_basic(self): + self.append('a', 'a') + rev, node = self.client.commit(b('first'), addremove=True) + + d = {b('parent') : [(0, node[:12], b('tip'), b('first'))], + b('branch') : b('default'), + b('commit') : True, + b('update') : 0} + if self.client.version >= (3, 5): + d[b('phases')] = b('1 draft') + + self.assertEquals(self.client.summary(), d) + + def test_commit_dirty(self): + self.append('a', 'a') + rev, node = self.client.commit(b('first'), addremove=True) + self.append('a', 'a') + + d = {b('parent') : [(0, node[:12], b('tip'), b('first'))], + b('branch') : b('default'), + b('commit') : False, + b('update') : 0} + if self.client.version >= (3, 5): + d[b('phases')] = b('1 draft') + + self.assertEquals(self.client.summary(), d) + + def test_secret_commit_clean(self): + if self.client.version < (2, 1): + raise unittest.SkipTest('phase not supported') + self.append('a', 'a') + rev, node = self.client.commit(b('first'), addremove=True) + self.client.phase([b('%d') % rev], secret=True, force=True) + e = self.client.summary() + self.assertTrue(e[b('commit')]) + + def test_update(self): + self.append('a', 'a') + rev, node = self.client.commit(b('first'), addremove=True) + self.append('a', 'a') + self.client.commit(b('second')) + self.client.update(0) + + d = {b('parent') : [(0, node[:12], None, b('first'))], + b('branch') : b('default'), + b('commit') : True, + b('update') : 1} + if self.client.version >= (3, 5): + d[b('phases')] = b('2 draft') + + self.assertEquals(self.client.summary(), d) + + def test_remote(self): + self.append('a', 'a') + rev, node = self.client.commit(b('first'), addremove=True) + + self.client.clone(dest=b('other')) + other = hglib.open('other') + + d = {b('parent') : [(0, node[:12], b('tip'), b('first'))], + b('branch') : b('default'), + b('commit') : True, + b('update') : 0, + b('remote') : (0, 0, 0, 0)} + + self.assertEquals(other.summary(remote=True), d) + + self.append('a', 'a') + self.client.commit(b('second')) + + d[b('remote')] = (1, 0, 0, 0) + self.assertEquals(other.summary(remote=True), d) + + self.client.bookmark(b('bm')) + d[b('remote')] = (1, 1, 0, 0) + self.assertEquals(other.summary(remote=True), d) + + other.bookmark(b('bmother')) + d[b('remote')] = (1, 1, 0, 1) + if self.client.version < (2, 0, 0): + d[b('parent')] = [(0, node[:12], b('tip bmother'), b('first'))] + else: + d[b('bookmarks')] = b('*bmother') + self.assertEquals(other.summary(remote=True), d) + + self.append('other/a', 'a') + rev, node = other.commit(b('second in other')) + + d[b('remote')] = (1, 1, 1, 1) + if self.client.version < (2, 0, 0): + tags = b('tip bmother') + else: + tags = b('tip') + d[b('parent')] = [(1, node[:12], tags, b('second in other'))] + if self.client.version >= (3, 5): + d[b('phases')] = b('1 draft') + + self.assertEquals(other.summary(remote=True), d) + + def test_two_parents(self): + self.append('a', 'a') + rev0, node = self.client.commit(b('first'), addremove=True) + + self.append('a', 'a') + rev1, node1 = self.client.commit(b('second')) + + self.client.update(rev0) + self.append('b', 'a') + rev2, node2 = self.client.commit(b('third'), addremove=True) + + self.client.merge(rev1) + + d = {b('parent') : [(2, node2[:12], b('tip'), b('third')), + (1, node1[:12], None, b('second'))], + b('branch') : b('default'), + b('commit') : False, + b('update') : 0} + if self.client.version >= (3, 5): + d[b('phases')] = b('3 draft') + + self.assertEquals(self.client.summary(), d) diff -r 934608d4fcba -r 8341f2494b3f tests/test_tags.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_tags.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,21 @@ +from tests import common +import hglib +from hglib.util import b + +class test_tags(common.basetest): + def test_basic(self): + self.append('a', 'a') + rev, node = self.client.commit(b('first'), addremove=True) + self.client.tag(b('my tag')) + self.client.tag(b('local tag'), rev=rev, local=True) + + # filecache that was introduced in 2.0 makes us see the local tag, for + # now we have to reconnect + if self.client.version < (2, 0, 0): + self.client = hglib.open() + + tags = self.client.tags() + self.assertEquals(tags, + [(b('tip'), 1, self.client.tip().node[:12], False), + (b('my tag'), 0, node[:12], False), + (b('local tag'), 0, node[:12], True)]) diff -r 934608d4fcba -r 8341f2494b3f tests/test_update.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_update.py Wed Mar 08 17:04:58 2023 +0100 @@ -0,0 +1,102 @@ +from tests import common +from hglib import error +from hglib.util import b, strtobytes + +class test_update(common.basetest): + def setUp(self): + common.basetest.setUp(self) + self.append('a', 'a') + self.rev0, self.node0 = self.client.commit(b('first'), addremove=True) + self.append('a', 'a') + self.rev1, self.node1 = self.client.commit(b('second')) + + def test_basic(self): + u, m, r, ur = self.client.update(self.rev0) + self.assertEquals(u, 1) + self.assertEquals(m, 0) + self.assertEquals(r, 0) + self.assertEquals(ur, 0) + + def test_unresolved(self): + self.client.update(self.rev0) + self.append('a', 'b') + u, m, r, ur = self.client.update() + self.assertEquals(u, 0) + self.assertEquals(m, 0) + self.assertEquals(r, 0) + self.assertEquals(ur, 1) + self.assertTrue((b('M'), b('a')) in self.client.status()) + + def test_merge(self): + self.append('a', '\n\n\n\nb') + rev2, node2 = self.client.commit(b('third')) + self.append('a', 'b') + self.client.commit(b('fourth')) + self.client.update(rev2) + old = open('a').read() + f = open('a', 'wb') + f.write(b('a') + old.encode('latin-1')) + f.close() + u, m, r, ur = self.client.update() + self.assertEquals(u, 0) + self.assertEquals(m, 1) + self.assertEquals(r, 0) + self.assertEquals(ur, 0) + self.assertEquals(self.client.status(), [(b('M'), b('a'))]) + + def test_tip(self): + self.client.update(self.rev0) + u, m, r, ur = self.client.update() + self.assertEquals(u, 1) + self.assertEquals(self.client.parents()[0].node, self.node1) + + self.client.update(self.rev0) + self.append('a', 'b') + rev2, node2 = self.client.commit(b('new head')) + self.client.update(self.rev0) + + self.client.update() + self.assertEquals(self.client.parents()[0].node, node2) + + def test_check_clean(self): + self.assertRaises(ValueError, self.client.update, clean=True, + check=True) + + def test_clean(self): + old = open('a').read() + self.append('a', 'b') + self.assertRaises(error.CommandError, self.client.update, check=True) + + u, m, r, ur = self.client.update(clean=True) + self.assertEquals(u, 1) + self.assertEquals(old, open('a').read()) + + def test_basic_plain(self): + f = open('.hg/hgrc', 'a') + f.write('[defaults]\nupdate=-v\n') + f.close() + self.test_basic() + + def disabled_largefiles(self): + # we don't run reposetup after a session has started, so this + # test is broken + import os + f = open('.hg/hgrc', 'a') + f.write('[extensions]\nlargefiles=\n') + f.close() + self.append('b', 'a') + try: + self.client.rawcommand([b('add'), b('b'), b('--large')]) + except error.CommandError: + return + + rev2, node2 = self.client.commit(b('third')) + # Go back to 0 + self.client.rawcommand([b('update'), strtobytes(self.rev0)], + # Keep the 'changed' version + prompt=lambda s, d: 'c\n') + u, m, r, ur = self.client.update(rev2, clean=True) + self.assertEquals(u, 2) + self.assertEquals(m, 0) + self.assertEquals(r, 0) + self.assertEquals(ur, 0) diff -r 934608d4fcba -r 8341f2494b3f tests/with_hg.py --- a/tests/with_hg.py Wed Mar 09 15:08:11 2022 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -import os -from nose.plugins import Plugin - -class WithHgPlugin(Plugin): - name = 'with-hg' - enabled = False - - def options(self, parser, env): - Plugin.options(self, parser, env) - parser.add_option('--with-hg', - action='store', - type='string', - metavar='HG', - dest='with_hg', - help='test using specified hg script.') - - def configure(self, options, conf): - Plugin.configure(self, options, conf) - if options.with_hg: - self.enabled = True - self.hgpath = os.path.realpath(options.with_hg) - - def begin(self): - import hglib - - p = hglib.util.popen([self.hgpath, 'version']) - p.communicate() - - if p.returncode: - raise ValueError("custom hg %r doesn't look like Mercurial" - % self.hgpath) - - hglib.HGPATH = self.hgpath