pygit2 1.18.0__tar.gz → 1.18.1__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.
Files changed (191) hide show
  1. {pygit2-1.18.0 → pygit2-1.18.1}/AUTHORS.md +5 -1
  2. {pygit2-1.18.0 → pygit2-1.18.1}/CHANGELOG.md +36 -0
  3. pygit2-1.18.1/Makefile +7 -0
  4. {pygit2-1.18.0 → pygit2-1.18.1}/PKG-INFO +1 -1
  5. {pygit2-1.18.0 → pygit2-1.18.1}/build.sh +10 -0
  6. pygit2-1.18.1/pygit2/__init__.py +664 -0
  7. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/_build.py +1 -1
  8. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/_pygit2.pyi +382 -24
  9. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/_run.py +3 -3
  10. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/blob.py +2 -2
  11. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/callbacks.py +36 -19
  12. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/config.py +1 -1
  13. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/credentials.py +10 -4
  14. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/index.h +6 -0
  15. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/ffi.py +1 -1
  16. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/index.py +82 -8
  17. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/remotes.py +10 -2
  18. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/repository.py +52 -30
  19. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/submodules.py +7 -1
  20. {pygit2-1.18.0 → pygit2-1.18.1}/pyproject.toml +2 -2
  21. {pygit2-1.18.0 → pygit2-1.18.1}/requirements-test.txt +1 -0
  22. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_branch.py +14 -13
  23. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_index.py +38 -1
  24. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_nonunicode.py +11 -1
  25. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_refs.py +23 -23
  26. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_remote.py +53 -33
  27. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_repository.py +144 -1
  28. {pygit2-1.18.0 → pygit2-1.18.1}/test/utils.py +2 -2
  29. pygit2-1.18.0/Makefile +0 -7
  30. pygit2-1.18.0/pygit2/__init__.py +0 -244
  31. {pygit2-1.18.0 → pygit2-1.18.1}/COPYING +0 -0
  32. {pygit2-1.18.0 → pygit2-1.18.1}/README.md +0 -0
  33. {pygit2-1.18.0 → pygit2-1.18.1}/SPONSORS.md +0 -0
  34. {pygit2-1.18.0 → pygit2-1.18.1}/build_tag.py +0 -0
  35. {pygit2-1.18.0 → pygit2-1.18.1}/mypy-stubtest.ini +0 -0
  36. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/blame.py +0 -0
  37. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/branches.py +0 -0
  38. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/attr.h +0 -0
  39. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/blame.h +0 -0
  40. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/buffer.h +0 -0
  41. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/callbacks.h +0 -0
  42. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/checkout.h +0 -0
  43. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/clone.h +0 -0
  44. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/commit.h +0 -0
  45. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/common.h +0 -0
  46. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/config.h +0 -0
  47. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/describe.h +0 -0
  48. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/diff.h +0 -0
  49. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/errors.h +0 -0
  50. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/graph.h +0 -0
  51. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/indexer.h +0 -0
  52. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/merge.h +0 -0
  53. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/net.h +0 -0
  54. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/oid.h +0 -0
  55. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/pack.h +0 -0
  56. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/proxy.h +0 -0
  57. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/refspec.h +0 -0
  58. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/remote.h +0 -0
  59. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/repository.h +0 -0
  60. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/revert.h +0 -0
  61. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/stash.h +0 -0
  62. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/strarray.h +0 -0
  63. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/submodule.h +0 -0
  64. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/transport.h +0 -0
  65. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/decl/types.h +0 -0
  66. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/enums.py +0 -0
  67. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/errors.py +0 -0
  68. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/filter.py +0 -0
  69. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/legacyenums.py +0 -0
  70. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/packbuilder.py +0 -0
  71. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/py.typed +0 -0
  72. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/references.py +0 -0
  73. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/refspec.py +0 -0
  74. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/settings.py +0 -0
  75. {pygit2-1.18.0 → pygit2-1.18.1}/pygit2/utils.py +0 -0
  76. {pygit2-1.18.0 → pygit2-1.18.1}/pytest.ini +0 -0
  77. {pygit2-1.18.0 → pygit2-1.18.1}/requirements.txt +0 -0
  78. {pygit2-1.18.0 → pygit2-1.18.1}/setup.cfg +0 -0
  79. {pygit2-1.18.0 → pygit2-1.18.1}/setup.py +0 -0
  80. {pygit2-1.18.0 → pygit2-1.18.1}/src/blob.c +0 -0
  81. {pygit2-1.18.0 → pygit2-1.18.1}/src/branch.c +0 -0
  82. {pygit2-1.18.0 → pygit2-1.18.1}/src/branch.h +0 -0
  83. {pygit2-1.18.0 → pygit2-1.18.1}/src/commit.c +0 -0
  84. {pygit2-1.18.0 → pygit2-1.18.1}/src/diff.c +0 -0
  85. {pygit2-1.18.0 → pygit2-1.18.1}/src/diff.h +0 -0
  86. {pygit2-1.18.0 → pygit2-1.18.1}/src/error.c +0 -0
  87. {pygit2-1.18.0 → pygit2-1.18.1}/src/error.h +0 -0
  88. {pygit2-1.18.0 → pygit2-1.18.1}/src/filter.c +0 -0
  89. {pygit2-1.18.0 → pygit2-1.18.1}/src/filter.h +0 -0
  90. {pygit2-1.18.0 → pygit2-1.18.1}/src/mailmap.c +0 -0
  91. {pygit2-1.18.0 → pygit2-1.18.1}/src/mailmap.h +0 -0
  92. {pygit2-1.18.0 → pygit2-1.18.1}/src/note.c +0 -0
  93. {pygit2-1.18.0 → pygit2-1.18.1}/src/note.h +0 -0
  94. {pygit2-1.18.0 → pygit2-1.18.1}/src/object.c +0 -0
  95. {pygit2-1.18.0 → pygit2-1.18.1}/src/object.h +0 -0
  96. {pygit2-1.18.0 → pygit2-1.18.1}/src/odb.c +0 -0
  97. {pygit2-1.18.0 → pygit2-1.18.1}/src/odb.h +0 -0
  98. {pygit2-1.18.0 → pygit2-1.18.1}/src/odb_backend.c +0 -0
  99. {pygit2-1.18.0 → pygit2-1.18.1}/src/odb_backend.h +0 -0
  100. {pygit2-1.18.0 → pygit2-1.18.1}/src/oid.c +0 -0
  101. {pygit2-1.18.0 → pygit2-1.18.1}/src/oid.h +0 -0
  102. {pygit2-1.18.0 → pygit2-1.18.1}/src/options.c +0 -0
  103. {pygit2-1.18.0 → pygit2-1.18.1}/src/options.h +0 -0
  104. {pygit2-1.18.0 → pygit2-1.18.1}/src/patch.c +0 -0
  105. {pygit2-1.18.0 → pygit2-1.18.1}/src/patch.h +0 -0
  106. {pygit2-1.18.0 → pygit2-1.18.1}/src/pygit2.c +0 -0
  107. {pygit2-1.18.0 → pygit2-1.18.1}/src/refdb.c +0 -0
  108. {pygit2-1.18.0 → pygit2-1.18.1}/src/refdb.h +0 -0
  109. {pygit2-1.18.0 → pygit2-1.18.1}/src/refdb_backend.c +0 -0
  110. {pygit2-1.18.0 → pygit2-1.18.1}/src/refdb_backend.h +0 -0
  111. {pygit2-1.18.0 → pygit2-1.18.1}/src/reference.c +0 -0
  112. {pygit2-1.18.0 → pygit2-1.18.1}/src/reference.h +0 -0
  113. {pygit2-1.18.0 → pygit2-1.18.1}/src/repository.c +0 -0
  114. {pygit2-1.18.0 → pygit2-1.18.1}/src/repository.h +0 -0
  115. {pygit2-1.18.0 → pygit2-1.18.1}/src/revspec.c +0 -0
  116. {pygit2-1.18.0 → pygit2-1.18.1}/src/revspec.h +0 -0
  117. {pygit2-1.18.0 → pygit2-1.18.1}/src/signature.c +0 -0
  118. {pygit2-1.18.0 → pygit2-1.18.1}/src/signature.h +0 -0
  119. {pygit2-1.18.0 → pygit2-1.18.1}/src/stash.c +0 -0
  120. {pygit2-1.18.0 → pygit2-1.18.1}/src/tag.c +0 -0
  121. {pygit2-1.18.0 → pygit2-1.18.1}/src/tree.c +0 -0
  122. {pygit2-1.18.0 → pygit2-1.18.1}/src/tree.h +0 -0
  123. {pygit2-1.18.0 → pygit2-1.18.1}/src/treebuilder.c +0 -0
  124. {pygit2-1.18.0 → pygit2-1.18.1}/src/treebuilder.h +0 -0
  125. {pygit2-1.18.0 → pygit2-1.18.1}/src/types.h +0 -0
  126. {pygit2-1.18.0 → pygit2-1.18.1}/src/utils.c +0 -0
  127. {pygit2-1.18.0 → pygit2-1.18.1}/src/utils.h +0 -0
  128. {pygit2-1.18.0 → pygit2-1.18.1}/src/walker.c +0 -0
  129. {pygit2-1.18.0 → pygit2-1.18.1}/src/walker.h +0 -0
  130. {pygit2-1.18.0 → pygit2-1.18.1}/src/wildmatch.c +0 -0
  131. {pygit2-1.18.0 → pygit2-1.18.1}/src/wildmatch.h +0 -0
  132. {pygit2-1.18.0 → pygit2-1.18.1}/src/worktree.c +0 -0
  133. {pygit2-1.18.0 → pygit2-1.18.1}/src/worktree.h +0 -0
  134. {pygit2-1.18.0 → pygit2-1.18.1}/test/__init__.py +0 -0
  135. {pygit2-1.18.0 → pygit2-1.18.1}/test/conftest.py +0 -0
  136. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/barerepo.zip +0 -0
  137. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/binaryfilerepo.zip +0 -0
  138. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/blameflagsrepo.zip +0 -0
  139. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/dirtyrepo.zip +0 -0
  140. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/emptyrepo.zip +0 -0
  141. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/encoding.zip +0 -0
  142. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/gpgsigned.zip +0 -0
  143. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/submodulerepo.zip +0 -0
  144. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/testrepo.zip +0 -0
  145. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/testrepoformerging.zip +0 -0
  146. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/testrepopacked.zip +0 -0
  147. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/trailerrepo.zip +0 -0
  148. {pygit2-1.18.0 → pygit2-1.18.1}/test/data/utf8branchrepo.zip +0 -0
  149. {pygit2-1.18.0 → pygit2-1.18.1}/test/keys/pygit2_empty +0 -0
  150. {pygit2-1.18.0 → pygit2-1.18.1}/test/keys/pygit2_empty.pub +0 -0
  151. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_apply_diff.py +0 -0
  152. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_archive.py +0 -0
  153. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_attributes.py +0 -0
  154. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_blame.py +0 -0
  155. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_blob.py +0 -0
  156. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_branch_empty.py +0 -0
  157. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_cherrypick.py +0 -0
  158. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_commit.py +0 -0
  159. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_commit_gpg.py +0 -0
  160. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_commit_trailer.py +0 -0
  161. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_config.py +0 -0
  162. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_credentials.py +0 -0
  163. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_describe.py +0 -0
  164. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_diff.py +0 -0
  165. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_diff_binary.py +0 -0
  166. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_filter.py +0 -0
  167. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_mailmap.py +0 -0
  168. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_merge.py +0 -0
  169. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_note.py +0 -0
  170. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_object.py +0 -0
  171. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_odb.py +0 -0
  172. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_odb_backend.py +0 -0
  173. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_oid.py +0 -0
  174. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_options.py +0 -0
  175. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_packbuilder.py +0 -0
  176. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_patch.py +0 -0
  177. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_patch_encoding.py +0 -0
  178. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_refdb_backend.py +0 -0
  179. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_remote_prune.py +0 -0
  180. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_remote_utf8.py +0 -0
  181. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_repository_bare.py +0 -0
  182. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_repository_custom.py +0 -0
  183. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_repository_empty.py +0 -0
  184. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_revparse.py +0 -0
  185. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_revwalk.py +0 -0
  186. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_signature.py +0 -0
  187. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_status.py +0 -0
  188. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_submodule.py +0 -0
  189. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_tag.py +0 -0
  190. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_tree.py +0 -0
  191. {pygit2-1.18.0 → pygit2-1.18.1}/test/test_treebuilder.py +0 -0
@@ -16,6 +16,7 @@ Authors:
16
16
  Richo Healey
17
17
  Christian Boos
18
18
  Julien Miotte
19
+ Benedikt Seidl
19
20
  Nick Hynes
20
21
  Richard Möhn
21
22
  Xu Tao
@@ -34,6 +35,7 @@ Authors:
34
35
  Xavier Delannoy
35
36
  Michael Jones
36
37
  Saugat Pachhai
38
+ Andrej730
37
39
  Bernardo Heynemann
38
40
  John Szakmeister
39
41
  Nabijacz Leweli
@@ -66,6 +68,7 @@ Authors:
66
68
  Assaf Nativ
67
69
  Bob Carroll
68
70
  Christian Häggström
71
+ Edmundo Carmona Antoranz
69
72
  Erik Johnson
70
73
  Filip Rindler
71
74
  Fraser Tweedale
@@ -133,6 +136,7 @@ Authors:
133
136
  Albin Söderström
134
137
  Alexandru Fikl
135
138
  Andrew Chin
139
+ Andrew McNulty
136
140
  Andrey Trubachev
137
141
  András Veres-Szentkirályi
138
142
  Ash Berlin
@@ -163,7 +167,6 @@ Authors:
163
167
  David Six
164
168
  Dennis Schwertel
165
169
  Devaev Maxim
166
- Edmundo Carmona Antoranz
167
170
  Eric Davis
168
171
  Erik Meusel
169
172
  Erik van Zijst
@@ -220,6 +223,7 @@ Authors:
220
223
  Rui Chen
221
224
  Sandro Jäckel
222
225
  Saul Pwanson
226
+ Sebastian Hamann
223
227
  Shane Turner
224
228
  Sheeo
225
229
  Simone Mosciatti
@@ -1,3 +1,39 @@
1
+ # 1.18.1 (2025-07-26)
2
+
3
+ - Update wheels to libgit2 1.9.1 and OpenSSL 3.3
4
+
5
+ - New `Index.remove_directory(...)`
6
+ [#1377](https://github.com/libgit2/pygit2/pull/1377)
7
+
8
+ - New `Index.add_conflict(...)`
9
+ [#1382](https://github.com/libgit2/pygit2/pull/1382)
10
+
11
+ - Now `Repository.merge_file_from_index(...)` returns a `MergeFileResult` object when
12
+ called with `use_deprecated=False`
13
+ [#1376](https://github.com/libgit2/pygit2/pull/1376)
14
+
15
+ - Typing improvements
16
+ [#1369](https://github.com/libgit2/pygit2/pull/1369)
17
+ [#1370](https://github.com/libgit2/pygit2/pull/1370)
18
+ [#1371](https://github.com/libgit2/pygit2/pull/1371)
19
+ [#1373](https://github.com/libgit2/pygit2/pull/1373)
20
+ [#1384](https://github.com/libgit2/pygit2/pull/1384)
21
+ [#1386](https://github.com/libgit2/pygit2/pull/1386)
22
+
23
+ Deprecations:
24
+
25
+ - Update your code:
26
+
27
+ # Before
28
+ contents = Repository.merge_file_from_index(...)
29
+
30
+ # Now
31
+ result = Repository.merge_file_from_index(..., use_deprecated=False)
32
+ contents = result.contents
33
+
34
+ At some point in the future `use_deprecated=False` will be the default.
35
+
36
+
1
37
  # 1.18.0 (2025-04-24)
2
38
 
3
39
  - Upgrade Linux Glibc wheels to `manylinux_2_28`
pygit2-1.18.1/Makefile ADDED
@@ -0,0 +1,7 @@
1
+ .PHONY: build html
2
+
3
+ build:
4
+ OPENSSL_VERSION=3.3.3 LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.1 sh build.sh
5
+
6
+ html: build
7
+ make -C docs html
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygit2
3
- Version: 1.18.0
3
+ Version: 1.18.1
4
4
  Summary: Python bindings for libgit2.
5
5
  Home-page: https://github.com/libgit2/pygit2
6
6
  Maintainer: J. David Ibáñez
@@ -262,6 +262,16 @@ if [ "$1" = "test" ]; then
262
262
  $PREFIX/bin/pytest --cov=pygit2
263
263
  fi
264
264
 
265
+ # Type checking
266
+ if [ "$1" = "mypy" ]; then
267
+ shift
268
+ if [ -n "$WHEELDIR" ]; then
269
+ $PREFIX/bin/pip install $WHEELDIR/pygit2*-$PYTHON_TAG-*.whl
270
+ fi
271
+ $PREFIX/bin/pip install -r requirements-test.txt
272
+ $PREFIX/bin/mypy pygit2
273
+ fi
274
+
265
275
  # Test .pyi stub file
266
276
  if [ "$1" = "stubtest" ]; then
267
277
  shift