diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/git/test_commit.py | 2 | ||||
-rw-r--r-- | test/git/test_git.py | 7 | ||||
-rw-r--r-- | test/git/test_index.py | 18 | ||||
-rw-r--r-- | test/git/test_remote.py | 8 | ||||
-rw-r--r-- | test/git/test_repo.py | 12 | ||||
-rw-r--r-- | test/git/test_utils.py | 4 | ||||
-rw-r--r-- | test/testlib/helper.py | 32 |
7 files changed, 54 insertions, 29 deletions
diff --git a/test/git/test_commit.py b/test/git/test_commit.py index be6d1a28..2e3f131e 100644 --- a/test/git/test_commit.py +++ b/test/git/test_commit.py @@ -75,7 +75,7 @@ class TestCommit(TestBase): assert_equal(sha1, commit.sha) def test_count(self): - assert self.rorepo.tag('refs/tags/0.1.5').commit.count( ) == 141 + assert self.rorepo.tag('refs/tags/0.1.5').commit.count( ) == 143 def test_list(self): assert isinstance(Commit.list_items(self.rorepo, '0.1.5', max_count=5)['5117c9c8a4d3af19a9958677e45cda9269de1541'], Commit) diff --git a/test/git/test_git.py b/test/git/test_git.py index c4a39e85..6e4ab394 100644 --- a/test/git/test_git.py +++ b/test/git/test_git.py @@ -45,13 +45,6 @@ class TestGit(TestCase): self.git.hash_object(istream=fh, stdin=True)) fh.close() - def test_it_handles_large_input(self): - if sys.platform == 'win32': - output = self.git.execute(["type", "C:\WINDOWS\system32\cmd.exe"]) - else: - output = self.git.execute(["cat", "/bin/bash"]) - assert_true(len(output) > 4096) # at least 4k - @patch_object(Git, 'execute') def test_it_ignores_false_kwargs(self, git): # this_should_not_be_ignored=False implies it *should* be ignored diff --git a/test/git/test_index.py b/test/git/test_index.py index e9541232..1a543f82 100644 --- a/test/git/test_index.py +++ b/test/git/test_index.py @@ -42,7 +42,7 @@ class TestTree(TestBase): # write the data - it must match the original tmpfile = tempfile.mktemp() index_merge.write(tmpfile) - fp = open(tmpfile, 'r') + fp = open(tmpfile, 'rb') assert fp.read() == fixture("index_merge") fp.close() os.remove(tmpfile) @@ -164,14 +164,14 @@ class TestTree(TestBase): # reset the working copy as well to current head,to pull 'back' as well new_data = "will be reverted" file_path = os.path.join(rw_repo.git.git_dir, "CHANGES") - fp = open(file_path, "w") + fp = open(file_path, "wb") fp.write(new_data) fp.close() index.reset(rev_head_parent, working_tree=True) assert not index.diff(None) assert cur_branch == rw_repo.active_branch assert cur_commit == rw_repo.head.commit - fp = open(file_path) + fp = open(file_path,'rb') try: assert fp.read() != new_data finally: @@ -332,7 +332,8 @@ class TestTree(TestBase): # add fake symlink and assure it checks-our as symlink fake_symlink_relapath = "my_fake_symlink" - fake_symlink_path = self._make_file(fake_symlink_relapath, "/etc/that", rw_repo) + link_target = "/etc/that" + fake_symlink_path = self._make_file(fake_symlink_relapath, link_target, rw_repo) fake_entry = BaseIndexEntry((0120000, null_sha, 0, fake_symlink_relapath)) entries = index.reset(new_commit).add([fake_entry]) assert len(entries) == 1 and S_ISLNK(entries[0].mode) @@ -341,5 +342,12 @@ class TestTree(TestBase): assert not S_ISLNK(os.stat(fake_symlink_path)[ST_MODE]) os.remove(fake_symlink_path) index.checkout(fake_symlink_path) - assert S_ISLNK(os.lstat(fake_symlink_path)[ST_MODE]) + + # on windows we will never get symlinks + if os.name == 'nt': + # simlinks should contain the link as text ( which is what a + # symlink actually is ) + open(fake_symlink_path,'rb').read() == link_target + else: + assert S_ISLNK(os.lstat(fake_symlink_path)[ST_MODE]) diff --git a/test/git/test_remote.py b/test/git/test_remote.py index 0af9f0cf..700798dd 100644 --- a/test/git/test_remote.py +++ b/test/git/test_remote.py @@ -240,7 +240,13 @@ class TestRemote(TestBase): lhead = rw_repo.head lindex = rw_repo.index # assure we are on master and it is checked out where the remote is - lhead.reference = rw_repo.heads.master + try: + lhead.reference = rw_repo.heads.master + except AttributeError: + # if the author is on a non-master branch, the clones might not have + # a local master yet. We simply create it + lhead.reference = rw_repo.create_head('master') + # END master handling lhead.reset(remote.refs.master, working_tree=True) # push without spec should fail ( without further configuration ) diff --git a/test/git/test_repo.py b/test/git/test_repo.py index 0b196a1f..93ab7a90 100644 --- a/test/git/test_repo.py +++ b/test/git/test_repo.py @@ -7,15 +7,14 @@ import os, sys from test.testlib import * from git import * +from git.utils import join_path_native +import tempfile class TestRepo(TestBase): @raises(InvalidGitRepositoryError) def test_new_should_raise_on_invalid_repo_location(self): - if sys.platform == "win32": - Repo("C:\\WINDOWS\\Temp") - else: - Repo("/tmp") + Repo(tempfile.gettempdir()) @raises(NoSuchPathError) def test_new_should_raise_on_non_existant_path(self): @@ -220,7 +219,8 @@ class TestRepo(TestBase): def test_untracked_files(self): base = self.rorepo.git.git_dir - files = (base+"/__test_myfile", base+"/__test_other_file") + files = ( join_path_native(base, "__test_myfile"), + join_path_native(base, "__test_other_file") ) num_recently_untracked = 0 try: for fpath in files: @@ -233,7 +233,7 @@ class TestRepo(TestBase): # assure we have all names - they are relative to the git-dir num_test_untracked = 0 for utfile in untracked_files: - num_test_untracked += os.path.join(base, utfile) in files + num_test_untracked += join_path_native(base, utfile) in files assert len(files) == num_test_untracked finally: for fpath in files: diff --git a/test/git/test_utils.py b/test/git/test_utils.py index 029d2054..69a9297d 100644 --- a/test/git/test_utils.py +++ b/test/git/test_utils.py @@ -56,7 +56,7 @@ class TestUtils(TestCase): def _cmp_contents(self, file_path, data): # raise if data from file at file_path # does not match data string - fp = open(file_path, "r") + fp = open(file_path, "rb") try: assert fp.read() == data finally: @@ -66,7 +66,7 @@ class TestUtils(TestCase): my_file = tempfile.mktemp() orig_data = "hello" new_data = "world" - my_file_fp = open(my_file, "w") + my_file_fp = open(my_file, "wb") my_file_fp.write(orig_data) my_file_fp.close() diff --git a/test/testlib/helper.py b/test/testlib/helper.py index 27c2b3d9..e33961a7 100644 --- a/test/testlib/helper.py +++ b/test/testlib/helper.py @@ -17,7 +17,7 @@ def fixture_path(name): return os.path.join(test_dir, "fixtures", name) def fixture(name): - return open(fixture_path(name)).read() + return open(fixture_path(name), 'rb').read() def absolute_project_path(): return os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) @@ -63,7 +63,18 @@ class ListProcessAdapter(object): poll = wait - + +def _rmtree_onerror(osremove, fullpath, exec_info): + """ + Handle the case on windows that read-only files cannot be deleted by + os.remove by setting it to mode 777, then retry deletion. + """ + if os.name != 'nt' or osremove is not os.remove: + raise + + os.chmod(fullpath, 0777) + os.remove(fullpath) + def with_bare_rw_repo(func): """ Decorator providing a specially made read-write repository to the test case @@ -82,7 +93,8 @@ def with_bare_rw_repo(func): try: return func(self, rw_repo) finally: - shutil.rmtree(repo_dir) + rw_repo.git.clear_cache() + shutil.rmtree(repo_dir, onerror=_rmtree_onerror) # END cleanup # END bare repo creator bare_repo_creator.__name__ = func.__name__ @@ -107,7 +119,8 @@ def with_rw_repo(working_tree_ref): try: return func(self, rw_repo) finally: - shutil.rmtree(repo_dir) + rw_repo.git.clear_cache() + shutil.rmtree(repo_dir, onerror=_rmtree_onerror) # END cleanup # END rw repo creator repo_creator.__name__ = func.__name__ @@ -174,13 +187,18 @@ def with_rw_and_rw_remote_repo(working_tree_ref): rw_repo.git.ls_remote(d_remote) except GitCommandError,e: print str(e) - raise AssertionError('Please start a git-daemon to run this test, execute: git-daemon "%s"'%tempfile.gettempdir()) + if os.name == 'nt': + raise AssertionError('git-daemon needs to run this test, but windows does not have one. Otherwise, run: git-daemon "%s"'%tempfile.gettempdir()) + else: + raise AssertionError('Please start a git-daemon to run this test, execute: git-daemon "%s"'%tempfile.gettempdir()) try: return func(self, rw_repo, rw_remote_repo) finally: - shutil.rmtree(repo_dir) - shutil.rmtree(remote_repo_dir) + rw_repo.git.clear_cache() + rw_remote_repo.git.clear_cache() + shutil.rmtree(repo_dir, onerror=_rmtree_onerror) + shutil.rmtree(remote_repo_dir, onerror=_rmtree_onerror) # END cleanup # END bare repo creator remote_repo_creator.__name__ = func.__name__ |