Skip to content

Commit d829152

Browse files
authoredFeb 18, 2020
Merge branch 'master' into PR-UnicodeEncodeError
2 parents 39d3666 + f356e12 commit d829152

19 files changed

+113
-312
lines changed
 

Diff for: ‎.appveyor.yml

-49
This file was deleted.

Diff for: ‎.travis.yml

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
language: python
22
python:
3-
- "2.7"
43
- "3.4"
54
- "3.5"
65
- "3.6"

Diff for: ‎Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ release:: clean
1717
force_release:: clean
1818
git push --tags
1919
python3 setup.py sdist bdist_wheel
20-
twine upload -s -i byronimo@gmail.com dist/*
20+
twine upload -s -i 763629FEC8788FC35128B5F6EE029D1E5EB40300 dist/*
2121

2222
doc::
2323
make -C doc/ html

Diff for: ‎README.rst

-4
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,6 @@ DEVELOPMENT
5656
:target: https://ci.appveyor.com/project/ankostis/gitpython/branch/master)
5757
.. image:: https://coveralls.io/repos/gitpython-developers/gitdb/badge.png
5858
:target: https://coveralls.io/r/gitpython-developers/gitdb
59-
.. image:: http://www.issuestats.com/github/gitpython-developers/gitdb/badge/pr
60-
:target: http://www.issuestats.com/github/gitpython-developers/gitdb
61-
.. image:: http://www.issuestats.com/github/gitpython-developers/gitdb/badge/issue
62-
:target: http://www.issuestats.com/github/gitpython-developers/gitdb
6359

6460
The library is considered mature, and not under active development. It's primary (known) use is in git-python.
6561

Diff for: ‎doc/source/changes.rst

+6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
Changelog
33
#########
44

5+
*****
6+
3.0.2
7+
*****
8+
9+
* removed all python2 compatibility shims, GitDB now is a Python 3 program.
10+
511
*****
612
0.6.1
713
*****

Diff for: ‎gitdb/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def _init_externals():
2929
__author__ = "Sebastian Thiel"
3030
__contact__ = "byronimo@gmail.com"
3131
__homepage__ = "https://github.com/gitpython-developers/gitdb"
32-
version_info = (2, 0, 5)
32+
version_info = (3, 0, 2)
3333
__version__ = '.'.join(str(i) for i in version_info)
3434

3535

Diff for: ‎gitdb/db/loose.py

+6-10
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@
5050
stream_copy
5151
)
5252

53-
from gitdb.utils.compat import MAXSIZE
5453
from gitdb.utils.encoding import force_bytes
5554

5655
import tempfile
5756
import os
57+
import sys
5858

5959

6060
__all__ = ('LooseObjectDB', )
@@ -196,7 +196,7 @@ def store(self, istream):
196196
if istream.binsha is not None:
197197
# copy as much as possible, the actual uncompressed item size might
198198
# be smaller than the compressed version
199-
stream_copy(istream.read, writer.write, MAXSIZE, self.stream_chunk_size)
199+
stream_copy(istream.read, writer.write, sys.maxsize, self.stream_chunk_size)
200200
else:
201201
# write object with header, we have to make a new one
202202
write_object(istream.type, istream.size, istream.read, writer.write,
@@ -225,16 +225,12 @@ def store(self, istream):
225225
if not isdir(obj_dir):
226226
mkdir(obj_dir)
227227
# END handle destination directory
228-
# rename onto existing doesn't work on windows
229-
if os.name == 'nt':
230-
if isfile(obj_path):
231-
remove(tmp_path)
232-
else:
233-
rename(tmp_path, obj_path)
234-
# end rename only if needed
228+
# rename onto existing doesn't work on NTFS
229+
if isfile(obj_path):
230+
remove(tmp_path)
235231
else:
236232
rename(tmp_path, obj_path)
237-
# END handle win32
233+
# end rename only if needed
238234

239235
# make sure its readable for all ! It started out as rw-- tmp file
240236
# but needs to be rwrr

Diff for: ‎gitdb/db/pack.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
)
1919

2020
from gitdb.pack import PackEntity
21-
from gitdb.utils.compat import xrange
2221

2322
from functools import reduce
2423

@@ -107,7 +106,7 @@ def sha_iter(self):
107106
for entity in self.entities():
108107
index = entity.index()
109108
sha_by_index = index.sha
110-
for index in xrange(index.size()):
109+
for index in range(index.size()):
111110
yield sha_by_index(index)
112111
# END for each index
113112
# END for each entity

Diff for: ‎gitdb/ext/smmap

Submodule smmap updated from 91d506e to a0060cf

Diff for: ‎gitdb/fun.py

+70-147
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
from gitdb.const import NULL_BYTE, BYTE_SPACE
1818
from gitdb.utils.encoding import force_text
19-
from gitdb.utils.compat import izip, buffer, xrange, PY3
2019
from gitdb.typ import (
2120
str_blob_type,
2221
str_commit_type,
@@ -101,7 +100,7 @@ def delta_chunk_apply(dc, bbuf, write):
101100
:param write: write method to call with data to write"""
102101
if dc.data is None:
103102
# COPY DATA FROM SOURCE
104-
write(buffer(bbuf, dc.so, dc.ts))
103+
write(bbuf[dc.so:dc.so + dc.ts])
105104
else:
106105
# APPEND DATA
107106
# whats faster: if + 4 function calls or just a write with a slice ?
@@ -264,7 +263,7 @@ def compress(self):
264263
# if first_data_index is not None:
265264
nd = StringIO() # new data
266265
so = self[first_data_index].to # start offset in target buffer
267-
for x in xrange(first_data_index, i - 1):
266+
for x in range(first_data_index, i - 1):
268267
xdc = self[x]
269268
nd.write(xdc.data[:xdc.ts])
270269
# END collect data
@@ -314,7 +313,7 @@ def check_integrity(self, target_size=-1):
314313
right.next()
315314
# this is very pythonic - we might have just use index based access here,
316315
# but this could actually be faster
317-
for lft, rgt in izip(left, right):
316+
for lft, rgt in zip(left, right):
318317
assert lft.rbound() == rgt.to
319318
assert lft.to + lft.ts == rgt.to
320319
# END for each pair
@@ -424,20 +423,12 @@ def pack_object_header_info(data):
424423
type_id = (c >> 4) & 7 # numeric type
425424
size = c & 15 # starting size
426425
s = 4 # starting bit-shift size
427-
if PY3:
428-
while c & 0x80:
429-
c = byte_ord(data[i])
430-
i += 1
431-
size += (c & 0x7f) << s
432-
s += 7
433-
# END character loop
434-
else:
435-
while c & 0x80:
436-
c = ord(data[i])
437-
i += 1
438-
size += (c & 0x7f) << s
439-
s += 7
440-
# END character loop
426+
while c & 0x80:
427+
c = byte_ord(data[i])
428+
i += 1
429+
size += (c & 0x7f) << s
430+
s += 7
431+
# END character loop
441432
# end performance at expense of maintenance ...
442433
return (type_id, size, i)
443434

@@ -450,28 +441,16 @@ def create_pack_object_header(obj_type, obj_size):
450441
:param obj_type: pack type_id of the object
451442
:param obj_size: uncompressed size in bytes of the following object stream"""
452443
c = 0 # 1 byte
453-
if PY3:
454-
hdr = bytearray() # output string
455-
456-
c = (obj_type << 4) | (obj_size & 0xf)
457-
obj_size >>= 4
458-
while obj_size:
459-
hdr.append(c | 0x80)
460-
c = obj_size & 0x7f
461-
obj_size >>= 7
462-
# END until size is consumed
463-
hdr.append(c)
464-
else:
465-
hdr = bytes() # output string
466-
467-
c = (obj_type << 4) | (obj_size & 0xf)
468-
obj_size >>= 4
469-
while obj_size:
470-
hdr += chr(c | 0x80)
471-
c = obj_size & 0x7f
472-
obj_size >>= 7
473-
# END until size is consumed
474-
hdr += chr(c)
444+
hdr = bytearray() # output string
445+
446+
c = (obj_type << 4) | (obj_size & 0xf)
447+
obj_size >>= 4
448+
while obj_size:
449+
hdr.append(c | 0x80)
450+
c = obj_size & 0x7f
451+
obj_size >>= 7
452+
# END until size is consumed
453+
hdr.append(c)
475454
# end handle interpreter
476455
return hdr
477456

@@ -484,26 +463,15 @@ def msb_size(data, offset=0):
484463
i = 0
485464
l = len(data)
486465
hit_msb = False
487-
if PY3:
488-
while i < l:
489-
c = data[i + offset]
490-
size |= (c & 0x7f) << i * 7
491-
i += 1
492-
if not c & 0x80:
493-
hit_msb = True
494-
break
495-
# END check msb bit
496-
# END while in range
497-
else:
498-
while i < l:
499-
c = ord(data[i + offset])
500-
size |= (c & 0x7f) << i * 7
501-
i += 1
502-
if not c & 0x80:
503-
hit_msb = True
504-
break
505-
# END check msb bit
506-
# END while in range
466+
while i < l:
467+
c = data[i + offset]
468+
size |= (c & 0x7f) << i * 7
469+
i += 1
470+
if not c & 0x80:
471+
hit_msb = True
472+
break
473+
# END check msb bit
474+
# END while in range
507475
# end performance ...
508476
if not hit_msb:
509477
raise AssertionError("Could not find terminating MSB byte in data stream")
@@ -663,93 +631,48 @@ def apply_delta_data(src_buf, src_buf_size, delta_buf, delta_buf_size, write):
663631
**Note:** transcribed to python from the similar routine in patch-delta.c"""
664632
i = 0
665633
db = delta_buf
666-
if PY3:
667-
while i < delta_buf_size:
668-
c = db[i]
669-
i += 1
670-
if c & 0x80:
671-
cp_off, cp_size = 0, 0
672-
if (c & 0x01):
673-
cp_off = db[i]
674-
i += 1
675-
if (c & 0x02):
676-
cp_off |= (db[i] << 8)
677-
i += 1
678-
if (c & 0x04):
679-
cp_off |= (db[i] << 16)
680-
i += 1
681-
if (c & 0x08):
682-
cp_off |= (db[i] << 24)
683-
i += 1
684-
if (c & 0x10):
685-
cp_size = db[i]
686-
i += 1
687-
if (c & 0x20):
688-
cp_size |= (db[i] << 8)
689-
i += 1
690-
if (c & 0x40):
691-
cp_size |= (db[i] << 16)
692-
i += 1
693-
694-
if not cp_size:
695-
cp_size = 0x10000
696-
697-
rbound = cp_off + cp_size
698-
if (rbound < cp_size or
699-
rbound > src_buf_size):
700-
break
701-
write(buffer(src_buf, cp_off, cp_size))
702-
elif c:
703-
write(db[i:i + c])
704-
i += c
705-
else:
706-
raise ValueError("unexpected delta opcode 0")
707-
# END handle command byte
708-
# END while processing delta data
709-
else:
710-
while i < delta_buf_size:
711-
c = ord(db[i])
712-
i += 1
713-
if c & 0x80:
714-
cp_off, cp_size = 0, 0
715-
if (c & 0x01):
716-
cp_off = ord(db[i])
717-
i += 1
718-
if (c & 0x02):
719-
cp_off |= (ord(db[i]) << 8)
720-
i += 1
721-
if (c & 0x04):
722-
cp_off |= (ord(db[i]) << 16)
723-
i += 1
724-
if (c & 0x08):
725-
cp_off |= (ord(db[i]) << 24)
726-
i += 1
727-
if (c & 0x10):
728-
cp_size = ord(db[i])
729-
i += 1
730-
if (c & 0x20):
731-
cp_size |= (ord(db[i]) << 8)
732-
i += 1
733-
if (c & 0x40):
734-
cp_size |= (ord(db[i]) << 16)
735-
i += 1
736-
737-
if not cp_size:
738-
cp_size = 0x10000
739-
740-
rbound = cp_off + cp_size
741-
if (rbound < cp_size or
742-
rbound > src_buf_size):
743-
break
744-
write(buffer(src_buf, cp_off, cp_size))
745-
elif c:
746-
write(db[i:i + c])
747-
i += c
748-
else:
749-
raise ValueError("unexpected delta opcode 0")
750-
# END handle command byte
751-
# END while processing delta data
752-
# end save byte_ord call and prevent performance regression in py2
634+
while i < delta_buf_size:
635+
c = db[i]
636+
i += 1
637+
if c & 0x80:
638+
cp_off, cp_size = 0, 0
639+
if (c & 0x01):
640+
cp_off = db[i]
641+
i += 1
642+
if (c & 0x02):
643+
cp_off |= (db[i] << 8)
644+
i += 1
645+
if (c & 0x04):
646+
cp_off |= (db[i] << 16)
647+
i += 1
648+
if (c & 0x08):
649+
cp_off |= (db[i] << 24)
650+
i += 1
651+
if (c & 0x10):
652+
cp_size = db[i]
653+
i += 1
654+
if (c & 0x20):
655+
cp_size |= (db[i] << 8)
656+
i += 1
657+
if (c & 0x40):
658+
cp_size |= (db[i] << 16)
659+
i += 1
660+
661+
if not cp_size:
662+
cp_size = 0x10000
663+
664+
rbound = cp_off + cp_size
665+
if (rbound < cp_size or
666+
rbound > src_buf_size):
667+
break
668+
write(src_buf[cp_off:cp_off + cp_size])
669+
elif c:
670+
write(db[i:i + c])
671+
i += c
672+
else:
673+
raise ValueError("unexpected delta opcode 0")
674+
# END handle command byte
675+
# END while processing delta data
753676

754677
# yes, lets use the exact same error message that git uses :)
755678
assert i == delta_buf_size, "delta replay has gone wild"

Diff for: ‎gitdb/pack.py

+13-15
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,6 @@
6262
from binascii import crc32
6363

6464
from gitdb.const import NULL_BYTE
65-
from gitdb.utils.compat import (
66-
izip,
67-
buffer,
68-
xrange,
69-
to_bytes
70-
)
7165

7266
import tempfile
7367
import array
@@ -119,7 +113,7 @@ def pack_object_at(cursor, offset, as_stream):
119113
# END handle type id
120114
abs_data_offset = offset + total_rela_offset
121115
if as_stream:
122-
stream = DecompressMemMapReader(buffer(data, total_rela_offset), False, uncomp_size)
116+
stream = DecompressMemMapReader(data[total_rela_offset:], False, uncomp_size)
123117
if delta_info is None:
124118
return abs_data_offset, OPackStream(offset, type_id, uncomp_size, stream)
125119
else:
@@ -207,7 +201,7 @@ def write(self, pack_sha, write):
207201
for t in self._objs:
208202
tmplist[byte_ord(t[0][0])] += 1
209203
# END prepare fanout
210-
for i in xrange(255):
204+
for i in range(255):
211205
v = tmplist[i]
212206
sha_write(pack('>L', v))
213207
tmplist[i + 1] += v
@@ -376,7 +370,7 @@ def _read_fanout(self, byte_offset):
376370
d = self._cursor.map()
377371
out = list()
378372
append = out.append
379-
for i in xrange(256):
373+
for i in range(256):
380374
append(unpack_from('>L', d, byte_offset + i * 4)[0])
381375
# END for each entry
382376
return out
@@ -410,14 +404,14 @@ def offsets(self):
410404
if self._version == 2:
411405
# read stream to array, convert to tuple
412406
a = array.array('I') # 4 byte unsigned int, long are 8 byte on 64 bit it appears
413-
a.fromstring(buffer(self._cursor.map(), self._pack_offset, self._pack_64_offset - self._pack_offset))
407+
a.frombytes(self._cursor.map()[self._pack_offset:self._pack_64_offset])
414408

415409
# networkbyteorder to something array likes more
416410
if sys.byteorder == 'little':
417411
a.byteswap()
418412
return a
419413
else:
420-
return tuple(self.offset(index) for index in xrange(self.size()))
414+
return tuple(self.offset(index) for index in range(self.size()))
421415
# END handle version
422416

423417
def sha_to_index(self, sha):
@@ -696,7 +690,7 @@ def _set_cache_(self, attr):
696690
iter_offsets = iter(offsets_sorted)
697691
iter_offsets_plus_one = iter(offsets_sorted)
698692
next(iter_offsets_plus_one)
699-
consecutive = izip(iter_offsets, iter_offsets_plus_one)
693+
consecutive = zip(iter_offsets, iter_offsets_plus_one)
700694

701695
offset_map = dict(consecutive)
702696

@@ -716,7 +710,7 @@ def _iter_objects(self, as_stream):
716710
"""Iterate over all objects in our index and yield their OInfo or OStream instences"""
717711
_sha = self._index.sha
718712
_object = self._object
719-
for index in xrange(self._index.size()):
713+
for index in range(self._index.size()):
720714
yield _object(_sha(index), as_stream, index)
721715
# END for each index
722716

@@ -838,7 +832,7 @@ def is_valid_stream(self, sha, use_crc=False):
838832
while cur_pos < next_offset:
839833
rbound = min(cur_pos + chunk_size, next_offset)
840834
size = rbound - cur_pos
841-
this_crc_value = crc_update(buffer(pack_data, cur_pos, size), this_crc_value)
835+
this_crc_value = crc_update(pack_data[cur_pos:cur_pos + size], this_crc_value)
842836
cur_pos += size
843837
# END window size loop
844838

@@ -882,7 +876,11 @@ def collect_streams_at_offset(self, offset):
882876
stream = streams[-1]
883877
while stream.type_id in delta_types:
884878
if stream.type_id == REF_DELTA:
885-
sindex = self._index.sha_to_index(to_bytes(stream.delta_info))
879+
# smmap can return memory view objects, which can't be compared as buffers/bytes can ...
880+
if isinstance(stream.delta_info, memoryview):
881+
sindex = self._index.sha_to_index(stream.delta_info.tobytes())
882+
else:
883+
sindex = self._index.sha_to_index(stream.delta_info)
886884
if sindex is None:
887885
break
888886
stream = self._pack.stream(self._index.offset(sindex))

Diff for: ‎gitdb/stream.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
)
2828

2929
from gitdb.const import NULL_BYTE, BYTE_SPACE
30-
from gitdb.utils.compat import buffer
3130
from gitdb.utils.encoding import force_bytes
3231

3332
has_perf_mod = False
@@ -278,7 +277,7 @@ def read(self, size=-1):
278277
# END adjust winsize
279278

280279
# takes a slice, but doesn't copy the data, it says ...
281-
indata = buffer(self._m, self._cws, self._cwe - self._cws)
280+
indata = self._m[self._cws:self._cwe]
282281

283282
# get the actual window end to be sure we don't use it for computations
284283
self._cwe = self._cws + len(indata)
@@ -414,7 +413,7 @@ def _set_cache_brute_(self, attr):
414413
buf = dstream.read(512) # read the header information + X
415414
offset, src_size = msb_size(buf)
416415
offset, target_size = msb_size(buf, offset)
417-
buffer_info_list.append((buffer(buf, offset), offset, src_size, target_size))
416+
buffer_info_list.append((buf[offset:], offset, src_size, target_size))
418417
max_target_size = max(max_target_size, target_size)
419418
# END for each delta stream
420419

Diff for: ‎gitdb/test/db/lib.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323

2424
from gitdb.exc import BadObject
2525
from gitdb.typ import str_blob_type
26-
from gitdb.utils.compat import xrange
2726

2827
from io import BytesIO
2928

@@ -45,7 +44,7 @@ def _assert_object_writing_simple(self, db):
4544
# write a bunch of objects and query their streams and info
4645
null_objs = db.size()
4746
ni = 250
48-
for i in xrange(ni):
47+
for i in range(ni):
4948
data = pack(">L", i)
5049
istream = IStream(str_blob_type, len(data), BytesIO(data))
5150
new_istream = db.store(istream)

Diff for: ‎gitdb/test/lib.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
# the New BSD License: http://www.opensource.org/licenses/bsd-license.php
55
"""Utilities used in ODB testing"""
66
from gitdb import OStream
7-
from gitdb.utils.compat import xrange
87

98
import sys
109
import random
@@ -151,13 +150,13 @@ def make_bytes(size_in_bytes, randomize=False):
151150
""":return: string with given size in bytes
152151
:param randomize: try to produce a very random stream"""
153152
actual_size = size_in_bytes // 4
154-
producer = xrange(actual_size)
153+
producer = range(actual_size)
155154
if randomize:
156155
producer = list(producer)
157156
random.shuffle(producer)
158157
# END randomize
159158
a = array('i', producer)
160-
return a.tostring()
159+
return a.tobytes()
161160

162161

163162
def make_object(type, data):

Diff for: ‎gitdb/test/performance/test_pack.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from gitdb.typ import str_blob_type
1818
from gitdb.exc import UnsupportedOperation
1919
from gitdb.db.pack import PackedDB
20-
from gitdb.utils.compat import xrange
2120
from gitdb.test.lib import skip_on_travis_ci
2221

2322
import sys
@@ -118,7 +117,7 @@ def test_correctness(self):
118117
for entity in pdb.entities():
119118
pack_verify = entity.is_valid_stream
120119
sha_by_index = entity.index().sha
121-
for index in xrange(entity.index().size()):
120+
for index in range(entity.index().size()):
122121
try:
123122
assert pack_verify(sha_by_index(index), use_crc=crc)
124123
count += 1

Diff for: ‎gitdb/test/test_pack.py

+2-8
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,6 @@
2525
from gitdb.fun import delta_types
2626
from gitdb.exc import UnsupportedOperation
2727
from gitdb.util import to_bin_sha
28-
from gitdb.utils.compat import xrange
29-
30-
try:
31-
from itertools import izip
32-
except ImportError:
33-
izip = zip
3428

3529
from nose import SkipTest
3630

@@ -63,7 +57,7 @@ def _assert_index_file(self, index, version, size):
6357
assert len(index.offsets()) == size
6458

6559
# get all data of all objects
66-
for oidx in xrange(index.size()):
60+
for oidx in range(index.size()):
6761
sha = index.sha(oidx)
6862
assert oidx == index.sha_to_index(sha)
6963

@@ -155,7 +149,7 @@ def test_pack_entity(self, rw_dir):
155149
pack_objs.extend(entity.stream_iter())
156150

157151
count = 0
158-
for info, stream in izip(entity.info_iter(), entity.stream_iter()):
152+
for info, stream in zip(entity.info_iter(), entity.stream_iter()):
159153
count += 1
160154
assert info.binsha == stream.binsha
161155
assert len(info.binsha) == 20

Diff for: ‎gitdb/utils/compat.py

-43
This file was deleted.

Diff for: ‎gitdb/utils/encoding.py

+3-16
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,18 @@
1-
from gitdb.utils import compat
2-
3-
if compat.PY3:
4-
string_types = (str, )
5-
text_type = str
6-
else:
7-
string_types = (basestring, )
8-
text_type = unicode
9-
10-
111
def force_bytes(data, encoding="utf-8"):
122
if isinstance(data, bytes):
133
return data
144

15-
if isinstance(data, string_types):
5+
if isinstance(data, str):
166
return data.encode(encoding)
177

188
return data
199

2010

2111
def force_text(data, encoding="utf-8"):
22-
if isinstance(data, text_type):
12+
if isinstance(data, str):
2313
return data
2414

2515
if isinstance(data, bytes):
2616
return data.decode(encoding)
2717

28-
if compat.PY3:
29-
return text_type(data, encoding)
30-
else:
31-
return text_type(data)
18+
return str(data, encoding)

Diff for: ‎setup.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
__author__ = "Sebastian Thiel"
88
__contact__ = "byronimo@gmail.com"
99
__homepage__ = "https://github.com/gitpython-developers/gitdb"
10-
version_info = (2, 0, 5)
10+
version_info = (3, 0, 2)
1111
__version__ = '.'.join(str(i) for i in version_info)
1212

1313
setup(
@@ -22,7 +22,7 @@
2222
zip_safe=False,
2323
install_requires=['smmap2 >= 2.0.0'],
2424
long_description="""GitDB is a pure-Python git object database""",
25-
python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
25+
python_requires='>=3.4',
2626
# See https://pypi.python.org/pypi?%3Aaction=list_classifiers
2727
classifiers=[
2828
"Development Status :: 5 - Production/Stable",
@@ -34,11 +34,10 @@
3434
"Operating System :: Microsoft :: Windows",
3535
"Operating System :: MacOS :: MacOS X",
3636
"Programming Language :: Python",
37-
"Programming Language :: Python :: 2",
38-
"Programming Language :: Python :: 2.7",
3937
"Programming Language :: Python :: 3",
4038
"Programming Language :: Python :: 3.4",
4139
"Programming Language :: Python :: 3.5",
4240
"Programming Language :: Python :: 3.6",
41+
"Programming Language :: Python :: 3.7"
4342
]
4443
)

0 commit comments

Comments
 (0)
Please sign in to comment.