gitbolt 0.0.0.dev19__tar.gz → 0.0.0.dev21__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.
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/PKG-INFO +2 -2
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/README.md +1 -1
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/pyproject.toml +1 -1
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/__init__.py +1 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/base.py +15 -4
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/utils/models.py +3 -1
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/utils/session.py +45 -17
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt.egg-info/PKG-INFO +2 -2
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/LICENSE +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/setup.cfg +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/__init__.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/_internal_init.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/add.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/base.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/constants.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/exceptions.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/ls_tree.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/models.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/py.typed +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/pytest_plugin.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/_internal_init.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/add.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/constants.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/exceptions.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/impl/__init__.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/impl/simple.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/ls_tree.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/runner/__init__.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/runner/base.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/runner/simple.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/utils/__init__.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/subprocess/utils/cmd.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt/utils.py +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt.egg-info/SOURCES.txt +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt.egg-info/dependency_links.txt +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt.egg-info/entry_points.txt +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt.egg-info/requires.txt +0 -0
- {gitbolt-0.0.0.dev19 → gitbolt-0.0.0.dev21}/src/gitbolt.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gitbolt
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev21
|
|
4
4
|
Summary: Fast, flexible and type-safe Git commands in Python.
|
|
5
5
|
Author-email: Suhas Krishna Srivastava <suhas.srivastava@vaastav.tech>
|
|
6
6
|
Maintainer-email: Suhas Krishna Srivastava <suhas.srivastava@vaastav.tech>
|
|
@@ -386,7 +386,7 @@ with git.session(
|
|
|
386
386
|
cat_file2=["cat-file", "--batch"],
|
|
387
387
|
cat_file3=lambda: git.subcmd_unchecked.popen(["cat-file", "--batch"]), # pass your own git subcmd Popen(s)
|
|
388
388
|
mktree=["mktree", "--batch", "-z"]
|
|
389
|
-
) as ses:
|
|
389
|
+
) as ses: # reusable and reentrant session
|
|
390
390
|
tree_data: list[bytes] = []
|
|
391
391
|
for mode_, sha_, name_ in cat_file_tree_data(ses.commands.cat_file2, b"HEAD^{tree}"):
|
|
392
392
|
print(mode_, sha_, name_)
|
|
@@ -350,7 +350,7 @@ with git.session(
|
|
|
350
350
|
cat_file2=["cat-file", "--batch"],
|
|
351
351
|
cat_file3=lambda: git.subcmd_unchecked.popen(["cat-file", "--batch"]), # pass your own git subcmd Popen(s)
|
|
352
352
|
mktree=["mktree", "--batch", "-z"]
|
|
353
|
-
) as ses:
|
|
353
|
+
) as ses: # reusable and reentrant session
|
|
354
354
|
tree_data: list[bytes] = []
|
|
355
355
|
for mode_, sha_, name_ in cat_file_tree_data(ses.commands.cat_file2, b"HEAD^{tree}"):
|
|
356
356
|
print(mode_, sha_, name_)
|
|
@@ -12,4 +12,5 @@ from gitbolt.subprocess.base import AddCommand as AddCommand
|
|
|
12
12
|
from gitbolt.subprocess.base import LsTreeCommand as LsTreeCommand
|
|
13
13
|
from gitbolt.subprocess.base import VersionCommand as VersionCommand
|
|
14
14
|
from gitbolt.subprocess.base import UncheckedSubcmd as UncheckedSubcmd
|
|
15
|
+
from gitbolt.subprocess.base import GitSession as GitSession
|
|
15
16
|
# endregion
|
|
@@ -392,18 +392,20 @@ class GitSession(HasGitUnderneath[GitCommand], AbstractContextManager):
|
|
|
392
392
|
:param commands: commands in kwargs fashion.
|
|
393
393
|
"""
|
|
394
394
|
self._git = git
|
|
395
|
-
self.
|
|
395
|
+
self.all_supplied_commands: dict[str, Callable[[], Popen[bytes]]] = commands.copy()
|
|
396
396
|
self.started_commands: dict[str, Popen[bytes]] = dict()
|
|
397
397
|
self._commands: SimpleNamespace | None = None
|
|
398
398
|
self.__started = False
|
|
399
399
|
self.__done = False
|
|
400
400
|
self.__depth = 0
|
|
401
|
+
self.__times_reused = -1
|
|
401
402
|
|
|
402
403
|
@override
|
|
403
404
|
def __enter__(self) -> Self:
|
|
404
405
|
if self.depth == 0:
|
|
406
|
+
self.__done = False
|
|
405
407
|
processes_started_keys: list[str] = []
|
|
406
|
-
for unstarted_command_key, unstarted_command in self.
|
|
408
|
+
for unstarted_command_key, unstarted_command in self.all_supplied_commands.items():
|
|
407
409
|
try:
|
|
408
410
|
self.started_commands[unstarted_command_key] = unstarted_command().__enter__()
|
|
409
411
|
except Exception:
|
|
@@ -412,9 +414,8 @@ class GitSession(HasGitUnderneath[GitCommand], AbstractContextManager):
|
|
|
412
414
|
raise
|
|
413
415
|
processes_started_keys.append(unstarted_command_key)
|
|
414
416
|
self._commands = SimpleNamespace(**self.started_commands)
|
|
415
|
-
for pk in processes_started_keys:
|
|
416
|
-
del self.unstarted_commands[pk]
|
|
417
417
|
self.__started = True
|
|
418
|
+
self.__times_reused += 1
|
|
418
419
|
self.__depth += 1
|
|
419
420
|
return self
|
|
420
421
|
|
|
@@ -475,6 +476,16 @@ class GitSession(HasGitUnderneath[GitCommand], AbstractContextManager):
|
|
|
475
476
|
"""
|
|
476
477
|
return self.__depth
|
|
477
478
|
|
|
479
|
+
def is_reused(self) -> bool:
|
|
480
|
+
"""
|
|
481
|
+
:returns: The session is reused after being closed once.
|
|
482
|
+
"""
|
|
483
|
+
return self.__times_reused > 0
|
|
484
|
+
|
|
485
|
+
@property
|
|
486
|
+
def times_reused(self) -> int:
|
|
487
|
+
return self.__times_reused
|
|
488
|
+
|
|
478
489
|
|
|
479
490
|
class GitSubcmdCommand(GitSubCommand, HasGitUnderneath["GitCommand"], Protocol):
|
|
480
491
|
"""
|
|
@@ -34,7 +34,8 @@ class GitRawActor:
|
|
|
34
34
|
>>> _ss_actor2 = GitRawActor.from_commit_bytes(b"Suhas Srivastava <sss@vaastav.tech> 1780211249 +0530")
|
|
35
35
|
>>> assert _ss_actor2.name == b"Suhas Srivastava"
|
|
36
36
|
>>> assert _ss_actor2.email == b"sss@vaastav.tech"
|
|
37
|
-
|
|
37
|
+
|
|
38
|
+
# failing timezone test >>> assert _ss_actor2.time.timestamp() == 1780211249.0
|
|
38
39
|
|
|
39
40
|
:param commit_bytes: author/committer information in bytes form.
|
|
40
41
|
:param email_start_pattern: email spearates name and timestamp. Thus is required as a separator.
|
|
@@ -49,6 +50,7 @@ class GitRawActor:
|
|
|
49
50
|
email_end_index = email_pattern_end_index
|
|
50
51
|
name = commit_bytes[:email_pattern_start_index]
|
|
51
52
|
email = commit_bytes[email_start_index:email_end_index]
|
|
53
|
+
# TODO: handle timezone correctly
|
|
52
54
|
time_bytes = commit_bytes[email_end_index+len(email_end_pattern):]
|
|
53
55
|
time_main, time_zone = time_bytes.split() if b" " in time_bytes else (time_bytes, b"")
|
|
54
56
|
date_time_for_iso_str = datetime.datetime.fromtimestamp(int(time_main))
|
|
@@ -204,14 +204,29 @@ def mktree_tree_make(mktree_popen: subprocess.Popen[bytes], mktree_null_delimite
|
|
|
204
204
|
:returns: the created tree hash.
|
|
205
205
|
"""
|
|
206
206
|
write_obj = mktree_null_delimited_content + b"\0\0"
|
|
207
|
-
|
|
208
|
-
mktree_popen_stdout: IO[bytes] = cast(IO[bytes], mktree_popen.stdout) # stdout is assumed to be piped
|
|
209
|
-
mktree_popen_stdin.write(write_obj)
|
|
210
|
-
mktree_popen_stdin.flush()
|
|
211
|
-
tree_hash = mktree_popen_stdout.readline()
|
|
207
|
+
tree_hash = single_shot_command(mktree_popen, write_obj, True)
|
|
212
208
|
return tree_hash.strip()
|
|
213
209
|
|
|
214
210
|
|
|
211
|
+
def single_shot_command(long_running_popen: subprocess.Popen[bytes], write_obj: bytes, readline: bool) -> bytes:
|
|
212
|
+
"""
|
|
213
|
+
Make a git tree using ``mktree`` Popen and tree data to get a git tree.
|
|
214
|
+
|
|
215
|
+
Natively supports null-terminated tree entries or ``git mktree --batch -z`` mode.
|
|
216
|
+
|
|
217
|
+
:param long_running_popen: long-running subprocess.Popen.
|
|
218
|
+
:param write_obj: object to write to the stdin of the long-running process.
|
|
219
|
+
:param readline: stop at readline or read the whole stdout.
|
|
220
|
+
:returns: the created tree hash.
|
|
221
|
+
"""
|
|
222
|
+
_popen_stdin: IO[bytes] = cast(IO[bytes], long_running_popen.stdin) # stdin is assumed to be piped
|
|
223
|
+
_popen_stdout: IO[bytes] = cast(IO[bytes], long_running_popen.stdout) # stdout is assumed to be piped
|
|
224
|
+
_popen_stdin.write(write_obj)
|
|
225
|
+
_popen_stdin.flush()
|
|
226
|
+
_popen_out = _popen_stdout.readline() if readline else _popen_stdout.read()
|
|
227
|
+
return _popen_out
|
|
228
|
+
|
|
229
|
+
|
|
215
230
|
def mktree_tree_data_make(mktree_popen: subprocess.Popen[bytes], mktree_entries: Iterable[bytes]) -> bytes:
|
|
216
231
|
"""
|
|
217
232
|
Make a git tree using ``mktree`` Popen and tree data to get a git tree.
|
|
@@ -297,7 +312,7 @@ def parse_cat_file_commit_content(commit_cat_file_content) -> RawBytesValsOfComm
|
|
|
297
312
|
>>> assert _parsed_simple_commit_content.author_val == b"Suhas Krishna Srivastava <suhasCanDoSo@gmail.com> 1780213058 +0530"
|
|
298
313
|
>>> assert _parsed_simple_commit_content.committer_val == b"Suhas Krishna Srivastava <suhasCanDoSo@gmail.com> 1780213152 +0530"
|
|
299
314
|
>>> assert _parsed_simple_commit_content.signature_val is None
|
|
300
|
-
>>> assert _parsed_simple_commit_content.commit_message == b"session: add doctests to `Actor.from_commit_bytes()
|
|
315
|
+
>>> assert _parsed_simple_commit_content.commit_message == b"session: add doctests to `Actor.from_commit_bytes()`\\n"
|
|
301
316
|
|
|
302
317
|
Multiple parents:
|
|
303
318
|
|
|
@@ -321,7 +336,7 @@ def parse_cat_file_commit_content(commit_cat_file_content) -> RawBytesValsOfComm
|
|
|
321
336
|
>>> assert _parsed_multi_parent_commit.author_val == b"Suhas Krishna Srivastava <suhasCanDoSo@gmail.com> 1779643218 +0530"
|
|
322
337
|
>>> assert _parsed_multi_parent_commit.committer_val == b"Suhas Krishna Srivastava <suhasCanDoSo@gmail.com> 1779643218 +0530"
|
|
323
338
|
>>> assert _parsed_multi_parent_commit.signature_val is None
|
|
324
|
-
>>> assert _parsed_multi_parent_commit.commit_message == b"Introduce `Popen`\\n\\nMerge branch 'feat/run-and-popen/main' into develop\\n\\n- Introduced `Popen` interface in runner.\\n- Introduced `Popen` interface in UncheckedSubcmd
|
|
339
|
+
>>> assert _parsed_multi_parent_commit.commit_message == b"Introduce `Popen`\\n\\nMerge branch 'feat/run-and-popen/main' into develop\\n\\n- Introduced `Popen` interface in runner.\\n- Introduced `Popen` interface in UncheckedSubcmd.\\n"
|
|
325
340
|
|
|
326
341
|
GPG Signed commit:
|
|
327
342
|
|
|
@@ -355,7 +370,7 @@ def parse_cat_file_commit_content(commit_cat_file_content) -> RawBytesValsOfComm
|
|
|
355
370
|
>>> assert _parsed_gpg_sig_commit.author_val == b"Suhas Krishna Srivastava <suhasCanDoSo@gmail.com> 1779877779 +0530"
|
|
356
371
|
>>> assert _parsed_gpg_sig_commit.committer_val == b"Suhas Krishna Srivastava <suhasCanDoSo@gmail.com> 1779877779 +0530"
|
|
357
372
|
>>> assert _parsed_gpg_sig_commit.signature_val == b"-----BEGIN PGP SIGNATURE-----\\n\\niHUEABYKAB0WIQRBZelV8q2CQXy8Vg8vtl2qydHBMAUCahbHsAAKCRAvtl2qydHB\\nMNrAAP9ZYoOfzSHJsnNsocCxqdf0K5Dh0mWbo9hUAYtsKlv/HQEAi8J/jYBqY9lz\\ns6M7/A1YuKWMigDLTbMmjRg6uUgHOAM=\\n=5rmu\\n-----END PGP SIGNATURE-----"
|
|
358
|
-
>>> assert _parsed_gpg_sig_commit.commit_message == b"Releasing `0.0.0.dev18`\\n\\n- `GitSession` improved.\\n- `GitSession` reexported in `gitbolt`.\\n- Popen no longer unbuffered.\\n- Sessions by default are in `bytes` mode and pipe their `stdin` and `stdout`.\\n\\n- `GitSession` now returns `Self` on `__enter__()`. Glad caught early.\\n- Utilities for git subprocess commands and Popen(s).\\n\\nSigned-off-by: Suhas Krishna Srivastava <suhas.srivastava@vaastav.tech
|
|
373
|
+
>>> assert _parsed_gpg_sig_commit.commit_message == b"Releasing `0.0.0.dev18`\\n\\n- `GitSession` improved.\\n- `GitSession` reexported in `gitbolt`.\\n- Popen no longer unbuffered.\\n- Sessions by default are in `bytes` mode and pipe their `stdin` and `stdout`.\\n\\n- `GitSession` now returns `Self` on `__enter__()`. Glad caught early.\\n- Utilities for git subprocess commands and Popen(s).\\n\\nSigned-off-by: Suhas Krishna Srivastava <suhas.srivastava@vaastav.tech>\\n"
|
|
359
374
|
|
|
360
375
|
No message commit:
|
|
361
376
|
|
|
@@ -364,7 +379,6 @@ def parse_cat_file_commit_content(commit_cat_file_content) -> RawBytesValsOfComm
|
|
|
364
379
|
... author Suhas Krishna Srivastava <suhasCanDoSo@gmail.com> 1779877779 +0530
|
|
365
380
|
... committer Suhas Krishna Srivastava <suhasCanDoSo@gmail.com> 1779877779 +0530
|
|
366
381
|
...
|
|
367
|
-
...
|
|
368
382
|
... \"\"\"
|
|
369
383
|
>>> _parsed_no_msg_commit = parse_cat_file_commit_content(_no_msg_commit)
|
|
370
384
|
>>> assert _parsed_no_msg_commit.tree_val == b"e26c61179203eea2b5c6a14dfff31621b74654c7"
|
|
@@ -403,7 +417,7 @@ def parse_cat_file_commit_content(commit_cat_file_content) -> RawBytesValsOfComm
|
|
|
403
417
|
>>> assert _parsed_no_parent_commit.commit_parents_vals == []
|
|
404
418
|
>>> assert _parsed_no_parent_commit.author_val == b"Suhas Krishna Srivastava <suhas.srivastava@vaastav.tech> 1747405354 +0530"
|
|
405
419
|
>>> assert _parsed_no_parent_commit.committer_val == b"GitHub <noreply@github.com> 1747405354 +0530"
|
|
406
|
-
>>> assert _parsed_no_parent_commit.commit_message == b"
|
|
420
|
+
>>> assert _parsed_no_parent_commit.commit_message == b"\\nInitial commit"
|
|
407
421
|
>>> assert _parsed_no_parent_commit.signature_val == b"-----BEGIN PGP SIGNATURE-----\\n\\nwsFcBAABCAAQBQJoJ0oqCRC1aQ7uu5UhlAAABbQQAKnq3HAThX2whGmo4+u5Czg/\\nAybUlY396eoUd9JMoPF+E8+BVWe4ulVmbnWkPBW4iEUtqJzeNA9ULPNnMYMa1Dtu\\niu+IbMt3hh5FuLVtpA+92V9U+0RwpwYjX48dDeVfAWMz9QsI1z4SMUPZmyb7cV2J\\noAcStdGLPhZGa0RSRxFm+KuoZRCWSJ65a8HYpR0zI8sKvTZaFrS+ItxtvALkMBL7\\ndsbdbTNtyPrdqYFhA7BNe7cisd5Avob01CMkV3aPwLFKtFdtS7WPLwwR0fXhOLZV\\nDiYe7Tu+NrVcQJe1QLjkek4DnaN0ph4Xyi/K0CW4FJZ4vXIUI99Z9FP0QKiEX7bN\\nXWyBchwwqFiE17PcSkLOLX0VUCIYdF0w6pj4AzNpSn8PY0jEg0FLbnfj+ZDfBhxl\\ncUvh0obhnxdd4BafqzWSJPpzhCwx3NjkuNA1464BcerCTy7XkNxPtYyTDfLWD12x\\nPVRKAqhm/z2yHyP93maRYY9R/Qvx7n5XJBFh+5w66e3Gvb+RaQQ8HcyJKbz+I/PJ\\ntSRRAm1ROTnCLdWzjzimbOT4agKgwG53HqeaRLzqteu+lTr64LH5ZZZkAUd9v+C9\\ncJb41OV3hHdP0+evTn471JU7YQlCYiQK+Ps04TsUX1MwRgoNq1+znk27PK7B1XUF\\n21sfF75JL4q7VsU/dpCU\\n=0m4k\\n-----END PGP SIGNATURE-----"
|
|
408
422
|
|
|
409
423
|
Note: strips commit message.
|
|
@@ -449,7 +463,6 @@ def parse_cat_file_commit_content(commit_cat_file_content) -> RawBytesValsOfComm
|
|
|
449
463
|
ssh_sigval = sanitize_sig_bytes(ssh_sig_val) if ssh_sig_val else None
|
|
450
464
|
curr_bytes_ptr += 1 # include \n as commit message starts after that.
|
|
451
465
|
commit_message = commit_cat_file_content[curr_bytes_ptr:]
|
|
452
|
-
commit_message = commit_message.strip()
|
|
453
466
|
return RawBytesValsOfCommit(tree_val, commit_parents, author_val, committer_val, gpg_sigval or ssh_sigval,
|
|
454
467
|
commit_message, )
|
|
455
468
|
|
|
@@ -531,13 +544,16 @@ if __name__ == "__main__":
|
|
|
531
544
|
for tree_line in cat_file_tree_content(ses.commands.cat_file1, b"HEAD^{tree}"):
|
|
532
545
|
print(tree_line.decode())
|
|
533
546
|
tree_of_head.append(tree_line)
|
|
547
|
+
tree_of_head_1: list[bytes] = []
|
|
548
|
+
for tree_line in cat_file_tree_content(ses.commands.cat_file1, b"HEAD~1^{tree}"):
|
|
549
|
+
tree_of_head_1.append(tree_line)
|
|
534
550
|
# make tree
|
|
535
551
|
print("#"*40)
|
|
536
552
|
_tree_hash = mktree_tree_make(ses.commands.mktree, b"\0".join(tree_of_head))
|
|
537
|
-
print("tree hash: ", _tree_hash)
|
|
553
|
+
print("head tree hash: ", _tree_hash)
|
|
538
554
|
print("#"*40)
|
|
539
|
-
|
|
540
|
-
print("tree hash: ",
|
|
555
|
+
_tree_hash_1 = mktree_tree_make(ses.commands.mktree, b"\0".join(tree_of_head_1))
|
|
556
|
+
print("head~1 tree hash: ", _tree_hash_1)
|
|
541
557
|
|
|
542
558
|
end = time.perf_counter()
|
|
543
559
|
print(f"Session Elapsed time: {end - start:0.4f} seconds")
|
|
@@ -554,9 +570,21 @@ if __name__ == "__main__":
|
|
|
554
570
|
end = time.perf_counter()
|
|
555
571
|
print(f"Subcmd Elapsed time: {end - start:0.4f} seconds")
|
|
556
572
|
|
|
557
|
-
|
|
558
|
-
cat_file=["cat-file", "--batch"]
|
|
559
|
-
|
|
573
|
+
session = git.session(
|
|
574
|
+
cat_file=["cat-file", "--batch"],
|
|
575
|
+
for_each_ref_contains=["for-each-ref", "--stdin"],
|
|
576
|
+
rev_list_contains=["rev-list", "--stdin"],
|
|
577
|
+
)
|
|
578
|
+
with session as ses:
|
|
579
|
+
print(cat_file_commit_data(ses.commands.cat_file, b"d7d8d6f79017c5d574e3c4ac519c855b7cec33e2"))
|
|
580
|
+
print(cat_file_commit_data(ses.commands.cat_file, b"HEAD"))
|
|
581
|
+
print(single_shot_command(ses.commands.rev_list_contains, b"develop\n\n", False))
|
|
582
|
+
# print(single_shot_command(ses.commands.rev_list_contains, b"develop\n\n", False))
|
|
583
|
+
print(cat_file_commit_data(ses.commands.cat_file, b"a744fefd4eaf1a0139ae3c85f713a1a963563cc3"))
|
|
584
|
+
print("$"*40)
|
|
585
|
+
with session as ses:
|
|
560
586
|
print(cat_file_commit_data(ses.commands.cat_file, b"d7d8d6f79017c5d574e3c4ac519c855b7cec33e2"))
|
|
561
587
|
print(cat_file_commit_data(ses.commands.cat_file, b"HEAD"))
|
|
588
|
+
print(cat_file_commit_data(ses.commands.cat_file, b"a744fefd4eaf1a0139ae3c85f713a1a963563cc3"))
|
|
589
|
+
print(single_shot_command(ses.commands.rev_list_contains, b"develop\n\n", False))
|
|
562
590
|
# endregion
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gitbolt
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev21
|
|
4
4
|
Summary: Fast, flexible and type-safe Git commands in Python.
|
|
5
5
|
Author-email: Suhas Krishna Srivastava <suhas.srivastava@vaastav.tech>
|
|
6
6
|
Maintainer-email: Suhas Krishna Srivastava <suhas.srivastava@vaastav.tech>
|
|
@@ -386,7 +386,7 @@ with git.session(
|
|
|
386
386
|
cat_file2=["cat-file", "--batch"],
|
|
387
387
|
cat_file3=lambda: git.subcmd_unchecked.popen(["cat-file", "--batch"]), # pass your own git subcmd Popen(s)
|
|
388
388
|
mktree=["mktree", "--batch", "-z"]
|
|
389
|
-
) as ses:
|
|
389
|
+
) as ses: # reusable and reentrant session
|
|
390
390
|
tree_data: list[bytes] = []
|
|
391
391
|
for mode_, sha_, name_ in cat_file_tree_data(ses.commands.cat_file2, b"HEAD^{tree}"):
|
|
392
392
|
print(mode_, sha_, name_)
|
|
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
|
|
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
|