giterator 0.1.0__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {giterator-0.1.0 → giterator-0.3.0}/.carthorse.yml +2 -2
- {giterator-0.1.0 → giterator-0.3.0}/.circleci/config.yml +4 -4
- {giterator-0.1.0 → giterator-0.3.0}/.coveragerc +1 -0
- giterator-0.3.0/.readthedocs.yml +16 -0
- {giterator-0.1.0 → giterator-0.3.0}/PKG-INFO +24 -8
- giterator-0.3.0/docs/changes.rst +22 -0
- {giterator-0.1.0 → giterator-0.3.0}/docs/conf.py +1 -1
- {giterator-0.1.0 → giterator-0.3.0}/giterator/git.py +16 -4
- {giterator-0.1.0 → giterator-0.3.0}/giterator/testing.py +12 -4
- {giterator-0.1.0 → giterator-0.3.0}/giterator.egg-info/PKG-INFO +24 -8
- {giterator-0.1.0 → giterator-0.3.0}/giterator.egg-info/entry_points.txt +0 -1
- {giterator-0.1.0 → giterator-0.3.0}/giterator.egg-info/requires.txt +1 -0
- {giterator-0.1.0 → giterator-0.3.0}/setup.py +3 -3
- {giterator-0.1.0 → giterator-0.3.0}/tests/conftest.py +5 -0
- {giterator-0.1.0 → giterator-0.3.0}/tests/test_git.py +9 -3
- {giterator-0.1.0 → giterator-0.3.0}/tests/test_testing.py +9 -2
- giterator-0.1.0/.readthedocs.yml +0 -8
- giterator-0.1.0/docs/changes.rst +0 -9
- {giterator-0.1.0 → giterator-0.3.0}/.gitignore +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/LICENSE.rst +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/README.rst +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/docs/Makefile +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/docs/api.rst +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/docs/development.rst +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/docs/index.rst +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/docs/license.rst +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/docs/use.rst +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/giterator/__init__.py +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/giterator/__main__.py +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/giterator/cli.py +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/giterator/clock.py +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/giterator/typing.py +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/giterator.egg-info/SOURCES.txt +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/giterator.egg-info/dependency_links.txt +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/giterator.egg-info/not-zip-safe +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/giterator.egg-info/top_level.txt +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/setup.cfg +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/tests/__init__.py +0 -0
- {giterator-0.1.0 → giterator-0.3.0}/tests/test_cli.py +0 -0
|
@@ -3,7 +3,7 @@ carthorse:
|
|
|
3
3
|
when:
|
|
4
4
|
- version-not-tagged
|
|
5
5
|
actions:
|
|
6
|
-
- run: "
|
|
7
|
-
- run: "
|
|
6
|
+
- run: "pip install -e .[build]"
|
|
7
|
+
- run: "python setup.py sdist bdist_wheel"
|
|
8
8
|
- run: "twine upload -u __token__ -p $PYPI_TOKEN dist/*"
|
|
9
9
|
- create-tag
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
version: 2.1
|
|
2
2
|
|
|
3
3
|
orbs:
|
|
4
|
-
python: cjw296/python-ci@
|
|
4
|
+
python: cjw296/python-ci@6
|
|
5
5
|
|
|
6
6
|
common: &common
|
|
7
7
|
jobs:
|
|
8
8
|
|
|
9
9
|
- python/pip-run-tests:
|
|
10
|
+
name: tests
|
|
10
11
|
matrix:
|
|
11
12
|
parameters:
|
|
12
13
|
image:
|
|
13
|
-
- circleci/python:3.6
|
|
14
14
|
- circleci/python:3.9
|
|
15
15
|
|
|
16
16
|
- python/coverage:
|
|
@@ -22,7 +22,7 @@ common: &common
|
|
|
22
22
|
name: release
|
|
23
23
|
config: .carthorse.yml
|
|
24
24
|
requires:
|
|
25
|
-
-
|
|
25
|
+
- tests
|
|
26
26
|
filters:
|
|
27
27
|
branches:
|
|
28
28
|
only: master
|
|
@@ -34,7 +34,7 @@ workflows:
|
|
|
34
34
|
<<: *common
|
|
35
35
|
triggers:
|
|
36
36
|
- schedule:
|
|
37
|
-
cron: "0
|
|
37
|
+
cron: "0 6 18 * *"
|
|
38
38
|
filters:
|
|
39
39
|
branches:
|
|
40
40
|
only: master
|
|
@@ -1,19 +1,37 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: giterator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Python tools for doing git things.
|
|
5
5
|
Home-page: https://github.com/simplistix/giterator
|
|
6
6
|
Author: Chris Withers
|
|
7
7
|
Author-email: chris@withers.org
|
|
8
8
|
License: MIT
|
|
9
|
-
Platform: UNKNOWN
|
|
10
9
|
Classifier: License :: OSI Approved :: MIT License
|
|
11
10
|
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
Requires-Python: >=3.9
|
|
12
|
+
License-File: LICENSE.rst
|
|
14
13
|
Provides-Extra: test
|
|
14
|
+
Requires-Dist: coverage-enable-subprocess; extra == "test"
|
|
15
|
+
Requires-Dist: pytest; extra == "test"
|
|
16
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
17
|
+
Requires-Dist: sybil; extra == "test"
|
|
18
|
+
Requires-Dist: testfixtures; extra == "test"
|
|
15
19
|
Provides-Extra: build
|
|
16
|
-
|
|
20
|
+
Requires-Dist: furo; extra == "build"
|
|
21
|
+
Requires-Dist: sphinx; extra == "build"
|
|
22
|
+
Requires-Dist: setuptools-git; extra == "build"
|
|
23
|
+
Requires-Dist: twine; extra == "build"
|
|
24
|
+
Requires-Dist: wheel; extra == "build"
|
|
25
|
+
Dynamic: author
|
|
26
|
+
Dynamic: author-email
|
|
27
|
+
Dynamic: classifier
|
|
28
|
+
Dynamic: description
|
|
29
|
+
Dynamic: home-page
|
|
30
|
+
Dynamic: license
|
|
31
|
+
Dynamic: license-file
|
|
32
|
+
Dynamic: provides-extra
|
|
33
|
+
Dynamic: requires-python
|
|
34
|
+
Dynamic: summary
|
|
17
35
|
|
|
18
36
|
|
|
19
37
|
giterator
|
|
@@ -28,5 +46,3 @@ giterator
|
|
|
28
46
|
.. _Docs: http://giterator.readthedocs.org/en/latest/
|
|
29
47
|
|
|
30
48
|
Python tools for doing git things.
|
|
31
|
-
|
|
32
|
-
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
.. py:currentmodule:: giterator
|
|
2
|
+
|
|
3
|
+
Changes
|
|
4
|
+
=======
|
|
5
|
+
|
|
6
|
+
0.3.0 (4 Feb 2026)
|
|
7
|
+
------------------
|
|
8
|
+
|
|
9
|
+
- General refresh.
|
|
10
|
+
|
|
11
|
+
- Add ``short`` parameter to methods that return commit hashes,
|
|
12
|
+
allowing the full commit hash to be returned.
|
|
13
|
+
|
|
14
|
+
0.2.0 (1 Oct 2021)
|
|
15
|
+
------------------
|
|
16
|
+
|
|
17
|
+
- Methods that create commits now return the newly-create commit hash.
|
|
18
|
+
|
|
19
|
+
0.1.0 (28 Sep 2021)
|
|
20
|
+
-------------------
|
|
21
|
+
|
|
22
|
+
- Initial release
|
|
@@ -92,13 +92,20 @@ class Git:
|
|
|
92
92
|
def _coerce_date(dt):
|
|
93
93
|
return dt if isinstance(dt, str) else dt.isoformat()
|
|
94
94
|
|
|
95
|
-
def commit(
|
|
95
|
+
def commit(
|
|
96
|
+
self,
|
|
97
|
+
msg: str,
|
|
98
|
+
author_date: Date = None,
|
|
99
|
+
commit_date: Date = None,
|
|
100
|
+
short: bool = True,
|
|
101
|
+
) -> str:
|
|
96
102
|
"""
|
|
97
103
|
Commit changes in this repo, including and new or deleted files.
|
|
98
104
|
|
|
99
105
|
:param msg: The commit message.
|
|
100
106
|
:param author_date: The author date.
|
|
101
107
|
:param commit_date: The commit date. Defaults to author date if not specified.
|
|
108
|
+
:param short: Return the short commit hash instead of the full 40-character hash.
|
|
102
109
|
"""
|
|
103
110
|
self('add', '.')
|
|
104
111
|
command = ['commit', '-m', msg]
|
|
@@ -108,9 +115,14 @@ class Git:
|
|
|
108
115
|
if commit_date:
|
|
109
116
|
env['GIT_COMMITTER_DATE'] = self._coerce_date(commit_date)
|
|
110
117
|
self(*command, env=env)
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
118
|
+
return self.rev_parse('HEAD', short)
|
|
119
|
+
|
|
120
|
+
def rev_parse(self, label: str, short: bool = True) -> str:
|
|
121
|
+
command = ['rev-parse', '--verify', '-q']
|
|
122
|
+
if short:
|
|
123
|
+
command.append('--short')
|
|
124
|
+
command.append(label)
|
|
125
|
+
return self(*command).strip()
|
|
114
126
|
|
|
115
127
|
def tag(self, name: str) -> None:
|
|
116
128
|
"""
|
|
@@ -26,8 +26,14 @@ class Repo(Git):
|
|
|
26
26
|
repo.init(user or User(name='Giterator', email='giterator@example.com'))
|
|
27
27
|
return repo
|
|
28
28
|
|
|
29
|
-
def commit(
|
|
30
|
-
|
|
29
|
+
def commit(
|
|
30
|
+
self,
|
|
31
|
+
msg: str,
|
|
32
|
+
author_date: Date = None,
|
|
33
|
+
commit_date: Date = None,
|
|
34
|
+
short: bool = True,
|
|
35
|
+
) -> str:
|
|
36
|
+
return super().commit(msg, author_date, commit_date or author_date, short=short)
|
|
31
37
|
|
|
32
38
|
def commit_content(
|
|
33
39
|
self,
|
|
@@ -36,7 +42,8 @@ class Repo(Git):
|
|
|
36
42
|
*,
|
|
37
43
|
tag: str = None,
|
|
38
44
|
branch: str = None,
|
|
39
|
-
|
|
45
|
+
short: bool = True,
|
|
46
|
+
) -> str:
|
|
40
47
|
"""
|
|
41
48
|
Write new context based on the prefix and then commit it
|
|
42
49
|
at the specified datetime, or using at a sequence of increasing
|
|
@@ -45,6 +52,7 @@ class Repo(Git):
|
|
|
45
52
|
if branch:
|
|
46
53
|
self.branch(branch)
|
|
47
54
|
(self.path / prefix).write_text(f'{prefix} content')
|
|
48
|
-
self.commit('a commit', dt or self._clock.now())
|
|
55
|
+
commit = self.commit('a commit', dt or self._clock.now(), short=short)
|
|
49
56
|
if tag:
|
|
50
57
|
self.tag(tag)
|
|
58
|
+
return commit
|
|
@@ -1,19 +1,37 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: giterator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Python tools for doing git things.
|
|
5
5
|
Home-page: https://github.com/simplistix/giterator
|
|
6
6
|
Author: Chris Withers
|
|
7
7
|
Author-email: chris@withers.org
|
|
8
8
|
License: MIT
|
|
9
|
-
Platform: UNKNOWN
|
|
10
9
|
Classifier: License :: OSI Approved :: MIT License
|
|
11
10
|
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
Requires-Python: >=3.9
|
|
12
|
+
License-File: LICENSE.rst
|
|
14
13
|
Provides-Extra: test
|
|
14
|
+
Requires-Dist: coverage-enable-subprocess; extra == "test"
|
|
15
|
+
Requires-Dist: pytest; extra == "test"
|
|
16
|
+
Requires-Dist: pytest-cov; extra == "test"
|
|
17
|
+
Requires-Dist: sybil; extra == "test"
|
|
18
|
+
Requires-Dist: testfixtures; extra == "test"
|
|
15
19
|
Provides-Extra: build
|
|
16
|
-
|
|
20
|
+
Requires-Dist: furo; extra == "build"
|
|
21
|
+
Requires-Dist: sphinx; extra == "build"
|
|
22
|
+
Requires-Dist: setuptools-git; extra == "build"
|
|
23
|
+
Requires-Dist: twine; extra == "build"
|
|
24
|
+
Requires-Dist: wheel; extra == "build"
|
|
25
|
+
Dynamic: author
|
|
26
|
+
Dynamic: author-email
|
|
27
|
+
Dynamic: classifier
|
|
28
|
+
Dynamic: description
|
|
29
|
+
Dynamic: home-page
|
|
30
|
+
Dynamic: license
|
|
31
|
+
Dynamic: license-file
|
|
32
|
+
Dynamic: provides-extra
|
|
33
|
+
Dynamic: requires-python
|
|
34
|
+
Dynamic: summary
|
|
17
35
|
|
|
18
36
|
|
|
19
37
|
giterator
|
|
@@ -28,5 +46,3 @@ giterator
|
|
|
28
46
|
.. _Docs: http://giterator.readthedocs.org/en/latest/
|
|
29
47
|
|
|
30
48
|
Python tools for doing git things.
|
|
31
|
-
|
|
32
|
-
|
|
@@ -9,7 +9,7 @@ base_dir = os.path.dirname(__file__)
|
|
|
9
9
|
|
|
10
10
|
setup(
|
|
11
11
|
name='giterator',
|
|
12
|
-
version='0.
|
|
12
|
+
version='0.3.0',
|
|
13
13
|
author='Chris Withers',
|
|
14
14
|
author_email='chris@withers.org',
|
|
15
15
|
license='MIT',
|
|
@@ -21,14 +21,14 @@ setup(
|
|
|
21
21
|
classifiers=[
|
|
22
22
|
'License :: OSI Approved :: MIT License',
|
|
23
23
|
'Programming Language :: Python :: 3',
|
|
24
|
-
'Programming Language :: Python :: 3.6',
|
|
25
|
-
'Programming Language :: Python :: 3.9',
|
|
26
24
|
],
|
|
27
25
|
packages=find_packages(exclude=["tests"]),
|
|
28
26
|
zip_safe=False,
|
|
29
27
|
include_package_data=True,
|
|
28
|
+
python_requires=">=3.9",
|
|
30
29
|
extras_require=dict(
|
|
31
30
|
test=[
|
|
31
|
+
'coverage-enable-subprocess',
|
|
32
32
|
'pytest',
|
|
33
33
|
'pytest-cov',
|
|
34
34
|
'sybil',
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import os
|
|
1
2
|
from pathlib import Path
|
|
2
3
|
|
|
3
4
|
import pytest
|
|
@@ -7,6 +8,10 @@ from giterator import Git, User
|
|
|
7
8
|
from giterator.testing import Repo
|
|
8
9
|
|
|
9
10
|
|
|
11
|
+
# Enable coverage for subprocesses (CLI tests)
|
|
12
|
+
os.environ.setdefault('COVERAGE_PROCESS_START', str(Path(__file__).parent.parent / '.coveragerc'))
|
|
13
|
+
|
|
14
|
+
|
|
10
15
|
@pytest.fixture()
|
|
11
16
|
def tmpdir():
|
|
12
17
|
with TempDirectory() as _dir:
|
|
@@ -38,9 +38,10 @@ class TestInit:
|
|
|
38
38
|
class TestClone:
|
|
39
39
|
|
|
40
40
|
def test_minimal(self, repo: Repo, tmpdir: TempDirectory):
|
|
41
|
-
repo.commit_content('a')
|
|
41
|
+
hash = repo.commit_content('a')
|
|
42
42
|
git = Git.clone(repo.path, tmpdir.getpath('clone'))
|
|
43
43
|
commit, = git('log', '--format=%h').split()
|
|
44
|
+
compare(hash, expected=commit)
|
|
44
45
|
compare(git.git('show', '--pretty=format:%s', '--stat', commit), expected=(
|
|
45
46
|
'a commit\n'
|
|
46
47
|
' a | 1 +\n'
|
|
@@ -133,14 +134,14 @@ class TestCommit:
|
|
|
133
134
|
(git.path / 'a').write_text('content')
|
|
134
135
|
dt = datetime(2001, 1, 1, 10)
|
|
135
136
|
git.commit('a commit', dt, dt)
|
|
136
|
-
compare(git('log', '--format=%aI %cI'),
|
|
137
|
+
compare(git('log', '--format=%aI %cI').replace("Z", "+00:00"),
|
|
137
138
|
expected='2001-01-01T10:00:00+00:00 2001-01-01T10:00:00+00:00\n')
|
|
138
139
|
|
|
139
140
|
def test_with_tz_datetime(self, git: Git):
|
|
140
141
|
(git.path / 'a').write_text('content')
|
|
141
142
|
dt = datetime(2001, 1, 1, 10).astimezone(timezone.utc)
|
|
142
143
|
git.commit('a commit', dt, dt)
|
|
143
|
-
compare(git('log', '--format=%aI %cI'),
|
|
144
|
+
compare(git('log', '--format=%aI %cI').replace("Z", "+00:00"),
|
|
144
145
|
expected='2001-01-01T10:00:00+00:00 2001-01-01T10:00:00+00:00\n')
|
|
145
146
|
|
|
146
147
|
|
|
@@ -150,6 +151,11 @@ class TestLabels:
|
|
|
150
151
|
repo.commit_content('a', datetime(2001, 1, 1, 10))
|
|
151
152
|
compare(repo.rev_parse('HEAD'), expected='5ee580a')
|
|
152
153
|
|
|
154
|
+
def test_rev_parse_full(self, repo: Repo):
|
|
155
|
+
repo.commit_content('a', datetime(2001, 1, 1, 10))
|
|
156
|
+
compare(repo.rev_parse('HEAD', short=False),
|
|
157
|
+
expected='5ee580aba98816af22cfa4e76ddf96bb3994964b')
|
|
158
|
+
|
|
153
159
|
def test_tags_empty(self, repo: Repo):
|
|
154
160
|
compare(repo.tags(), expected=[])
|
|
155
161
|
|
|
@@ -32,7 +32,7 @@ class TestRepo:
|
|
|
32
32
|
upstream = Repo.make(root / 'upstream')
|
|
33
33
|
upstream.commit_content('a')
|
|
34
34
|
clone = Repo.clone(upstream, root / 'clone')
|
|
35
|
-
tmpdir.
|
|
35
|
+
tmpdir.compare(('clone', 'upstream'), recursive=False)
|
|
36
36
|
config = (clone.path / '.git' / 'config').read_text()
|
|
37
37
|
assert 'name = Giterator' in config
|
|
38
38
|
assert 'email = giterator@example.com' in config
|
|
@@ -40,7 +40,7 @@ class TestRepo:
|
|
|
40
40
|
def test_with_user(self, repo: Repo, tmpdir: TempDirectory):
|
|
41
41
|
repo.commit_content('a')
|
|
42
42
|
clone = Repo.clone(repo, 'clone', User('Foo', 'bar@example.com'))
|
|
43
|
-
tmpdir.
|
|
43
|
+
tmpdir.compare(('clone', 'repo'), recursive=False)
|
|
44
44
|
config = (clone.path / '.git' / 'config').read_text()
|
|
45
45
|
assert 'name = Foo' in config
|
|
46
46
|
assert 'email = bar@example.com' in config
|
|
@@ -56,3 +56,10 @@ class TestRepo:
|
|
|
56
56
|
' a | 1 +\n'
|
|
57
57
|
' 1 file changed, 1 insertion(+)\n'
|
|
58
58
|
))
|
|
59
|
+
|
|
60
|
+
def test_commit_content(self, repo: Repo):
|
|
61
|
+
compare(repo.commit_content('a', datetime(2001, 1, 1, 10)), expected='5ee580a')
|
|
62
|
+
|
|
63
|
+
def test_commit_content_full(self, repo: Repo):
|
|
64
|
+
compare(repo.commit_content('a', datetime(2001, 1, 1, 10), short=False),
|
|
65
|
+
expected='5ee580aba98816af22cfa4e76ddf96bb3994964b')
|
giterator-0.1.0/.readthedocs.yml
DELETED
giterator-0.1.0/docs/changes.rst
DELETED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|