summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitmodules2
-rw-r--r--git/cmd.py4
-rw-r--r--git/repo/base.py4
-rw-r--r--git/test/test_git.py31
4 files changed, 27 insertions, 14 deletions
diff --git a/.gitmodules b/.gitmodules
index 533fc59f..612c39d9 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,3 @@
[submodule "gitdb"]
path = git/ext/gitdb
- url = http://github.com/gitpython-developers/gitdb.git
+ url = https://github.com/gitpython-developers/gitdb.git
diff --git a/git/cmd.py b/git/cmd.py
index b3274dd8..73126fba 100644
--- a/git/cmd.py
+++ b/git/cmd.py
@@ -410,12 +410,16 @@ class Git(LazyMixin):
@classmethod
def __unpack_args(cls, arg_list):
if not isinstance(arg_list, (list,tuple)):
+ if isinstance(arg_list, unicode):
+ return [arg_list.encode('utf-8')]
return [ str(arg_list) ]
outlist = list()
for arg in arg_list:
if isinstance(arg_list, (list, tuple)):
outlist.extend(cls.__unpack_args( arg ))
+ elif isinstance(arg_list, unicode):
+ outlist.append(arg_list.encode('utf-8'))
# END recursion
else:
outlist.append(str(arg))
diff --git a/git/repo/base.py b/git/repo/base.py
index 71492fe8..b9335aba 100644
--- a/git/repo/base.py
+++ b/git/repo/base.py
@@ -376,7 +376,7 @@ class Repo(object):
if rev is None:
return self.head.commit
else:
- return self.rev_parse(str(rev)+"^0")
+ return self.rev_parse(unicode(rev)+"^0")
def iter_trees(self, *args, **kwargs):
""":return: Iterator yielding Tree objects
@@ -399,7 +399,7 @@ class Repo(object):
if rev is None:
return self.head.commit.tree
else:
- return self.rev_parse(str(rev)+"^{tree}")
+ return self.rev_parse(unicode(rev)+"^{tree}")
def iter_commits(self, rev=None, paths='', **kwargs):
"""A list of Commit objects representing the history of a given ref/commit
diff --git a/git/test/test_git.py b/git/test/test_git.py
index e67cb92b..5d4756ba 100644
--- a/git/test/test_git.py
+++ b/git/test/test_git.py
@@ -5,8 +5,9 @@
# the BSD License: http://www.opensource.org/licenses/bsd-license.php
import os, sys
-from git.test.lib import ( TestBase,
- patch,
+from git.test.lib import (
+ TestBase,
+ patch,
raises,
assert_equal,
assert_true,
@@ -16,7 +17,7 @@ from git import ( Git,
GitCommandError )
class TestGit(TestBase):
-
+
@classmethod
def setUp(cls):
super(TestGit, cls).setUp()
@@ -29,6 +30,14 @@ class TestGit(TestBase):
assert_true(git.called)
assert_equal(git.call_args, ((['git', 'version'],), {}))
+ def test_call_unpack_args_unicode(self):
+ args = Git._Git__unpack_args(u'Unicode' + unichr(40960))
+ assert_equal(args, ['Unicode\xea\x80\x80'])
+
+ def test_call_unpack_args(self):
+ args = Git._Git__unpack_args(['git', 'log', '--', u'Unicode' + unichr(40960)])
+ assert_equal(args, ['git', 'log', '--', 'Unicode\xea\x80\x80'])
+
@raises(GitCommandError)
def test_it_raises_errors(self):
self.git.this_does_not_exist()
@@ -58,7 +67,7 @@ class TestGit(TestBase):
# this_should_not_be_ignored=False implies it *should* be ignored
output = self.git.version(pass_this_kwarg=False)
assert_true("pass_this_kwarg" not in git.call_args[1])
-
+
def test_persistent_cat_file_command(self):
# read header only
import subprocess as sp
@@ -67,37 +76,37 @@ class TestGit(TestBase):
g.stdin.write("b2339455342180c7cc1e9bba3e9f181f7baa5167\n")
g.stdin.flush()
obj_info = g.stdout.readline()
-
+
# read header + data
g = self.git.cat_file(batch=True, istream=sp.PIPE,as_process=True)
g.stdin.write("b2339455342180c7cc1e9bba3e9f181f7baa5167\n")
g.stdin.flush()
obj_info_two = g.stdout.readline()
assert obj_info == obj_info_two
-
+
# read data - have to read it in one large chunk
size = int(obj_info.split()[2])
data = g.stdout.read(size)
terminating_newline = g.stdout.read(1)
-
+
# now we should be able to read a new object
g.stdin.write("b2339455342180c7cc1e9bba3e9f181f7baa5167\n")
g.stdin.flush()
assert g.stdout.readline() == obj_info
-
-
+
+
# same can be achived using the respective command functions
hexsha, typename, size = self.git.get_object_header(hexsha)
hexsha, typename_two, size_two, data = self.git.get_object_data(hexsha)
assert typename == typename_two and size == size_two
-
+
def test_version(self):
v = self.git.version_info
assert isinstance(v, tuple)
for n in v:
assert isinstance(n, int)
#END verify number types
-
+
def test_cmd_override(self):
prev_cmd = self.git.GIT_PYTHON_GIT_EXECUTABLE
try: