Skip to content

Fixes to support Python 2.6 again. #541

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 8, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ environment:
matrix:
## MINGW
#
- PYTHON: "C:\\Python26"
PYTHON_VERSION: "2.6"
GIT_PATH: "%GIT_DAEMON_PATH%"
- PYTHON: "C:\\Python27"
PYTHON_VERSION: "2.7"
GIT_PATH: "%GIT_DAEMON_PATH%"
Expand Down
5 changes: 5 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
language: python
python:
- "2.6"
- "2.7"
- "3.3"
- "3.4"
- "3.5"
# - "pypy" - won't work as smmap doesn't work (see gitdb/.travis.yml for details)
#matrix:
# allow_failures:
# - python: "2.6"
git:
# a higher depth is needed for most of the tests - must be high enough to not actually be shallow
# as we clone our own repository in the process
Expand All @@ -15,6 +19,7 @@ install:
- git fetch --tags
- pip install -r test-requirements.txt
- pip install codecov sphinx
- if [ "$TRAVIS_PYTHON_VERSION" == '2.6' ]; then pip install unittest2; fi

# generate some reflog as git-python tests need it (in master)
- ./init-tests-after-clone.sh
Expand Down
14 changes: 9 additions & 5 deletions git/cmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,9 @@ def dict_to_slots_and__excluded_are_none(self, d, excluded=()):
CREATE_NO_WINDOW = 0x08000000

## CREATE_NEW_PROCESS_GROUP is needed to allow killing it afterwards,
# seehttps://docs.python.org/3/library/subprocess.html#subprocess.Popen.send_signal
# see https://docs.python.org/3/library/subprocess.html#subprocess.Popen.send_signal
PROC_CREATIONFLAGS = (CREATE_NO_WINDOW | subprocess.CREATE_NEW_PROCESS_GROUP
if is_win
if is_win and sys.version_info >= (2, 7)
else 0)


Expand Down Expand Up @@ -245,7 +245,7 @@ def __del__(self):
return

# can be that nothing really exists anymore ...
if os is None or os.kill is None:
if os is None or getattr(os, 'kill', None) is None:
return

# try to kill it
Expand Down Expand Up @@ -831,8 +831,12 @@ def _call_process(self, method, *args, **kwargs):
:return: Same as ``execute``"""
# Handle optional arguments prior to calling transform_kwargs
# otherwise these'll end up in args, which is bad.
_kwargs = {k: v for k, v in kwargs.items() if k in execute_kwargs}
kwargs = {k: v for k, v in kwargs.items() if k not in execute_kwargs}
_kwargs = dict()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you replace it with this more pythonic and quicker to follow (in debug-mode also) code?

_kwargs = dict(k, v) for k, v in kwargs.items() if k in execute_kwargs)
kwargs = dict((k, v) for k, v in kwargs.items() if k not in execute_kwargs)

for kwarg in execute_kwargs:
try:
_kwargs[kwarg] = kwargs.pop(kwarg)
except KeyError:
pass

insert_after_this_arg = kwargs.pop('insert_kwargs_after', None)

Expand Down
5 changes: 4 additions & 1 deletion git/objects/submodule/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
import logging
import os
import stat
from unittest.case import SkipTest
try:
from unittest import SkipTest
except ImportError:
from unittest2 import SkipTest
import uuid

import git
Expand Down
17 changes: 12 additions & 5 deletions git/test/lib/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,24 @@

import contextlib
from functools import wraps
import sys
import io
import logging
import os
import tempfile
import textwrap
import time
from unittest import TestCase
import unittest

from git.compat import string_types, is_win, PY3
from git.compat import string_types, is_win
from git.util import rmtree, cwd

import os.path as osp
if sys.version_info[0:2] == (2, 6):
import unittest2 as unittest
else:
import unittest

TestCase = unittest.TestCase

ospd = osp.dirname

Expand Down Expand Up @@ -335,8 +339,11 @@ class TestBase(TestCase):
of the project history ( to assure tests don't fail for others ).
"""

if not PY3:
assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
# On py26, unittest2 has assertRaisesRegex
# On py3, unittest has assertRaisesRegex
# On py27, we use unittest, which names it differently:
if sys.version_info[0:2] == (2, 7):
assertRaisesRegex = TestCase.assertRaisesRegexp

def _small_repo_url(self):
""":return" a path to a small, clonable repository"""
Expand Down
6 changes: 4 additions & 2 deletions git/test/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
import os
import sys
import tempfile
from unittest import skipIf
try:
from unittest import SkipTest, skipIf
except ImportError:
from unittest2 import SkipTest, skipIf

from git import (
Blob,
Expand Down Expand Up @@ -131,7 +134,6 @@ def test_add_unicode(self, rw_repo):
try:
file_path.encode(sys.getfilesystemencoding())
except UnicodeEncodeError:
from unittest import SkipTest
raise SkipTest("Environment doesn't support unicode filenames")

with open(file_path, "wb") as fp:
Expand Down
5 changes: 4 additions & 1 deletion git/test/test_fun.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from io import BytesIO
from stat import S_IFDIR, S_IFREG, S_IFLNK
from unittest.case import skipIf
try:
from unittest import skipIf
except ImportError:
from unittest2 import skipIf

from git.compat import PY3
from git.index import IndexFile
Expand Down
10 changes: 7 additions & 3 deletions git/test/test_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@
)
import sys
import tempfile
from unittest.case import skipIf
try:
from unittest import skipIf
except ImportError:
from unittest2 import skipIf

from git import (
IndexFile,
Expand Down Expand Up @@ -149,8 +152,9 @@ def add_bad_blob():
except Exception as ex:
msg_py3 = "required argument is not an integer"
msg_py2 = "cannot convert argument to integer"
## msg_py26 ="unsupported operand type(s) for &: 'str' and 'long'"
assert msg_py2 in str(ex) or msg_py3 in str(ex), str(ex)
msg_py26 = "unsupported operand type(s) for &: 'str' and 'long'"
assert msg_py2 in str(ex) or msg_py3 in str(ex) or \
msg_py26 in str(ex), str(ex)

## 2nd time should not fail due to stray lock file
try:
Expand Down
5 changes: 4 additions & 1 deletion git/test/test_remote.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@

import random
import tempfile
from unittest.case import skipIf
try:
from unittest import skipIf
except ImportError:
from unittest2 import skipIf

from git import (
RemoteProgress,
Expand Down
6 changes: 4 additions & 2 deletions git/test/test_repo.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,10 @@
import pickle
import sys
import tempfile
from unittest.case import skipIf
try:
from unittest import skipIf, SkipTest
except ImportError:
from unittest2 import skipIf, SkipTest

from git import (
InvalidGitRepositoryError,
Expand Down Expand Up @@ -53,7 +56,6 @@
from git.util import HIDE_WINDOWS_KNOWN_ERRORS, cygpath
from git.test.lib import with_rw_directory
from git.util import join_path_native, rmtree, rmfile, bin_to_hex
from unittest import SkipTest

import functools as fnt
import os.path as osp
Expand Down
5 changes: 4 additions & 1 deletion git/test/test_submodule.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
# the BSD License: http://www.opensource.org/licenses/bsd-license.php
import os
import sys
from unittest.case import skipIf
try:
from unittest import skipIf
except ImportError:
from unittest2 import skipIf

import git
from git.cmd import Git
Expand Down
5 changes: 4 additions & 1 deletion git/test/test_tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@

from io import BytesIO
import sys
from unittest.case import skipIf
try:
from unittest import skipIf
except ImportError:
from unittest2 import skipIf

from git import (
Tree,
Expand Down
6 changes: 5 additions & 1 deletion git/test/test_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@

import tempfile
import time
from unittest.case import skipIf
try:
from unittest import skipIf
except ImportError:
from unittest2 import skipIf


import ddt

Expand Down
15 changes: 11 additions & 4 deletions git/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,15 @@
import logging
import os
import platform
import subprocess
import re
import shutil
import stat
import time
from unittest.case import SkipTest
try:
from unittest import SkipTest
except ImportError:
from unittest2 import SkipTest

from gitdb.util import (# NOQA @IgnorePep8
make_sha,
Expand Down Expand Up @@ -303,7 +307,7 @@ def is_cygwin_git(git_executable):
if not is_win:
return False

from subprocess import check_output
#from subprocess import check_output

is_cygwin = _is_cygwin_cache.get(git_executable)
if is_cygwin is None:
Expand All @@ -316,8 +320,11 @@ def is_cygwin_git(git_executable):

## Just a name given, not a real path.
uname_cmd = osp.join(git_dir, 'uname')
uname = check_output(uname_cmd, universal_newlines=True)
is_cygwin = 'CYGWIN' in uname
process = subprocess.Popen([uname_cmd], stdout=subprocess.PIPE,
universal_newlines=True)
uname_out, _ = process.communicate()
#retcode = process.poll()
is_cygwin = 'CYGWIN' in uname_out
except Exception as ex:
log.debug('Failed checking if running in CYGWIN due to: %r', ex)
_is_cygwin_cache[git_executable] = is_cygwin
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
gitdb>=0.6.4
ddt>=1.1.1
unittest2; python_version < '2.7'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you modify also setup.py and test-requirements.txt?

if sys.version_info[:2] < (2, 6):
    test_requires.append('unittest2')