summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/git/test_commit.py2
-rw-r--r--test/git/test_git.py7
-rw-r--r--test/git/test_index.py18
-rw-r--r--test/git/test_remote.py8
-rw-r--r--test/git/test_repo.py12
-rw-r--r--test/git/test_utils.py4
-rw-r--r--test/testlib/helper.py32
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__