gitbolt 0.0.0.dev24__tar.gz → 0.0.0.dev26__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 (39) hide show
  1. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/PKG-INFO +1 -1
  2. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/pyproject.toml +1 -1
  3. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/base.py +40 -32
  4. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/impl/simple.py +9 -3
  5. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/utils.py +45 -9
  6. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt.egg-info/PKG-INFO +1 -1
  7. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/LICENSE +0 -0
  8. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/README.md +0 -0
  9. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/setup.cfg +0 -0
  10. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/__init__.py +0 -0
  11. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/_internal_init.py +0 -0
  12. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/add.py +0 -0
  13. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/base.py +0 -0
  14. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/constants.py +0 -0
  15. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/exceptions.py +0 -0
  16. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/ls_tree.py +0 -0
  17. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/models.py +0 -0
  18. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/py.typed +0 -0
  19. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/pytest_plugin.py +0 -0
  20. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/__init__.py +0 -0
  21. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/_internal_init.py +0 -0
  22. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/add.py +0 -0
  23. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/constants.py +0 -0
  24. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/exceptions.py +0 -0
  25. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/impl/__init__.py +0 -0
  26. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/ls_tree.py +0 -0
  27. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/runner/__init__.py +0 -0
  28. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/runner/base.py +0 -0
  29. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/runner/simple.py +0 -0
  30. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/utils/__init__.py +0 -0
  31. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/utils/main_cmd.py +0 -0
  32. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/utils/models.py +0 -0
  33. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/utils/session.py +0 -0
  34. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt/subprocess/worktree.py +0 -0
  35. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt.egg-info/SOURCES.txt +0 -0
  36. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt.egg-info/dependency_links.txt +0 -0
  37. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt.egg-info/entry_points.txt +0 -0
  38. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/src/gitbolt.egg-info/requires.txt +0 -0
  39. {gitbolt-0.0.0.dev24 → gitbolt-0.0.0.dev26}/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.dev24
3
+ Version: 0.0.0.dev26
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>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "gitbolt"
3
- version = "0.0.0.dev24"
3
+ version = "0.0.0.dev26"
4
4
  description = "Fast, flexible and type-safe Git commands in Python."
5
5
  requires-python = ">=3.12"
6
6
  readme = "README.md"
@@ -50,6 +50,28 @@ class GitCommand(Git, ABC):
50
50
  self._main_cmd_opts: GitOpts = {}
51
51
  self._env_vars: GitEnvVars | None = None
52
52
  self._cmd_str_repr: str | None = None
53
+ self._main_cmd_opt_builders: dict[str, Callable[[], list[str]]] = {
54
+ "C": self._main_cmd_cap_c_args,
55
+ "c": self._main_cmd_small_c_args,
56
+ "config_env": self._main_cmd_config_env_args,
57
+ "exec_path": self._main_cmd_exec_path_args,
58
+ "paginate": self._main_cmd_paginate_args,
59
+ "no_pager": self._main_cmd_no_pager_args,
60
+ "git_dir": self._main_cmd_git_dir_args,
61
+ "work_tree": self._main_cmd_work_tree_args,
62
+ "namespace": self._main_cmd_namespace_args,
63
+ "bare": self._main_cmd_bare_args,
64
+ "no_replace_objects": self._main_cmd_no_replace_objects_args,
65
+ "no_lazy_fetch": self._main_cmd_no_lazy_fetch_args,
66
+ "no_optional_locks": self._main_cmd_no_optional_locks_args,
67
+ "no_advice": self._main_cmd_no_advice_args,
68
+ "literal_pathspecs": self._main_cmd_literal_pathspecs_args,
69
+ "glob_pathspecs": self._main_cmd_glob_pathspecs_args,
70
+ "noglob_pathspecs": self._main_cmd_noglob_pathspecs_args,
71
+ "icase_pathspecs": self._main_cmd_icase_pathspecs_args,
72
+ "list_cmds": self._main_cmd_list_cmds_args,
73
+ "attr_source": self._main_cmd_attr_source_args,
74
+ }
53
75
 
54
76
  @override
55
77
  def __str__(self) -> str:
@@ -65,7 +87,7 @@ class GitCommand(Git, ABC):
65
87
 
66
88
  >>> _b_git = _a_git.git_opts_override(C=[Path("a"), Path("b")], no_advice=True, no_replace_objects=True)
67
89
  >>> assert str(_a_git) == GIT_CMD # _a_git never changed
68
- >>> assert str(_b_git) == f"{GIT_CMD} -C a -C b --no-replace-objects --no-advice"
90
+ >>> assert str(_b_git) == f"{GIT_CMD} -C a -C b --no-advice --no-replace-objects"
69
91
 
70
92
  Adding git envs:
71
93
 
@@ -74,7 +96,7 @@ class GitCommand(Git, ABC):
74
96
  >>> assert str(_c_git) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD}"
75
97
 
76
98
  >>> _d_git = _c_git.git_opts_override(C=[Path("a"), Path("b")], no_advice=True, no_replace_objects=True, config_env=dict(conf1="val1", glob1="val2"))
77
- >>> assert str(_d_git) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} -C a -C b --config-env conf1=val1 --config-env glob1=val2 --no-replace-objects --no-advice"
99
+ >>> assert str(_d_git) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} -C a -C b --no-advice --no-replace-objects --config-env conf1=val1 --config-env glob1=val2"
78
100
 
79
101
  Does not affect repr:
80
102
 
@@ -127,28 +149,14 @@ class GitCommand(Git, ABC):
127
149
 
128
150
  :return: CLI args for git main cli command.
129
151
  """
130
- return (
131
- self._main_cmd_cap_c_args()
132
- + self._main_cmd_small_c_args()
133
- + self._main_cmd_config_env_args()
134
- + self._main_cmd_exec_path_args()
135
- + self._main_cmd_paginate_args()
136
- + self._main_cmd_no_pager_args()
137
- + self._main_cmd_git_dir_args()
138
- + self._main_cmd_work_tree_args()
139
- + self._main_cmd_namespace_args()
140
- + self._main_cmd_bare_args()
141
- + self._main_cmd_no_replace_objects_args()
142
- + self._main_cmd_no_lazy_fetch_args()
143
- + self._main_cmd_no_optional_locks_args()
144
- + self._main_cmd_no_advice_args()
145
- + self._main_cmd_literal_pathspecs_args()
146
- + self._main_cmd_glob_pathspecs_args()
147
- + self._main_cmd_noglob_pathspecs_args()
148
- + self._main_cmd_icase_pathspecs_args()
149
- + self._main_cmd_list_cmds_args()
150
- + self._main_cmd_attr_source_args()
151
- )
152
+ args: list[str] = []
153
+ for opt_key in self._main_cmd_opts:
154
+ args.extend(self._main_cmd_args_for_opt_key(opt_key))
155
+ return args
156
+
157
+ def _main_cmd_args_for_opt_key(self, opt_key: str) -> list[str]:
158
+ builder = self._main_cmd_opt_builders.get(opt_key)
159
+ return builder() if builder else []
152
160
 
153
161
  @override
154
162
  def git_opts_override(self, **overrides: Unpack[GitOpts]) -> Self:
@@ -686,7 +694,7 @@ class VersionCommand(Version, GitSubcmdCommand, Protocol):
686
694
 
687
695
  >>> _b_git = _a_git.git_opts_override(C=[Path("a"), Path("b")], no_advice=True, no_replace_objects=True)
688
696
  >>> assert str(_a_git.version_subcmd()) == f"{GIT_CMD} {VERSION_CMD}" # _a_git never changed
689
- >>> assert str(_b_git.version_subcmd()) == f"{GIT_CMD} -C a -C b --no-replace-objects --no-advice {VERSION_CMD}"
697
+ >>> assert str(_b_git.version_subcmd()) == f"{GIT_CMD} -C a -C b --no-advice --no-replace-objects {VERSION_CMD}"
690
698
 
691
699
  Adding git envs:
692
700
 
@@ -695,7 +703,7 @@ class VersionCommand(Version, GitSubcmdCommand, Protocol):
695
703
  >>> assert str(_c_git.version_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} {VERSION_CMD}"
696
704
 
697
705
  >>> _d_git = _c_git.git_opts_override(C=[Path("a"), Path("b")], no_advice=True, no_replace_objects=True, config_env=dict(conf1="val1", glob1="val2"))
698
- >>> assert str(_d_git.version_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} -C a -C b --config-env conf1=val1 --config-env glob1=val2 --no-replace-objects --no-advice {VERSION_CMD}"
706
+ >>> assert str(_d_git.version_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} -C a -C b --no-advice --no-replace-objects --config-env conf1=val1 --config-env glob1=val2 {VERSION_CMD}"
699
707
 
700
708
  Does not affect repr:
701
709
 
@@ -756,7 +764,7 @@ class LsTreeCommand(LsTree, GitSubcmdCommand, Protocol):
756
764
 
757
765
  >>> _b_git = _a_git.git_opts_override(C=[Path("a"), Path("b")], no_advice=True, no_replace_objects=True)
758
766
  >>> assert str(_a_git.ls_tree_subcmd()) == f"{GIT_CMD} {LS_TREE_CMD}" # _a_git never changed
759
- >>> assert str(_b_git.ls_tree_subcmd()) == f"{GIT_CMD} -C a -C b --no-replace-objects --no-advice {LS_TREE_CMD}"
767
+ >>> assert str(_b_git.ls_tree_subcmd()) == f"{GIT_CMD} -C a -C b --no-advice --no-replace-objects {LS_TREE_CMD}"
760
768
 
761
769
  Adding git envs:
762
770
 
@@ -765,7 +773,7 @@ class LsTreeCommand(LsTree, GitSubcmdCommand, Protocol):
765
773
  >>> assert str(_c_git.ls_tree_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} {LS_TREE_CMD}"
766
774
 
767
775
  >>> _d_git = _c_git.git_opts_override(C=[Path("a"), Path("b")], no_advice=True, no_replace_objects=True, config_env=dict(conf1="val1", glob1="val2"))
768
- >>> assert str(_d_git.ls_tree_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} -C a -C b --config-env conf1=val1 --config-env glob1=val2 --no-replace-objects --no-advice {LS_TREE_CMD}"
776
+ >>> assert str(_d_git.ls_tree_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} -C a -C b --no-advice --no-replace-objects --config-env conf1=val1 --config-env glob1=val2 {LS_TREE_CMD}"
769
777
 
770
778
  Does not affect repr:
771
779
 
@@ -871,7 +879,7 @@ class AddCommand(Add, GitSubcmdCommand, Protocol):
871
879
 
872
880
  >>> _b_git = _a_git.git_opts_override(C=[Path("a"), Path("b")], no_advice=True, no_replace_objects=True)
873
881
  >>> assert str(_a_git.add_subcmd()) == f"{GIT_CMD} {ADD_CMD}" # _a_git never changed
874
- >>> assert str(_b_git.add_subcmd()) == f"{GIT_CMD} -C a -C b --no-replace-objects --no-advice {ADD_CMD}"
882
+ >>> assert str(_b_git.add_subcmd()) == f"{GIT_CMD} -C a -C b --no-advice --no-replace-objects {ADD_CMD}"
875
883
 
876
884
  Adding git envs:
877
885
 
@@ -880,7 +888,7 @@ class AddCommand(Add, GitSubcmdCommand, Protocol):
880
888
  >>> assert str(_c_git.add_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} {ADD_CMD}"
881
889
 
882
890
  >>> _d_git = _c_git.git_opts_override(C=[Path("a"), Path("b")], no_advice=True, no_replace_objects=True, config_env=dict(conf1="val1", glob1="val2"))
883
- >>> assert str(_d_git.add_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} -C a -C b --config-env conf1=val1 --config-env glob1=val2 --no-replace-objects --no-advice {ADD_CMD}"
891
+ >>> assert str(_d_git.add_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} -C a -C b --no-advice --no-replace-objects --config-env conf1=val1 --config-env glob1=val2 {ADD_CMD}"
884
892
 
885
893
  Does not affect repr:
886
894
 
@@ -1193,7 +1201,7 @@ class WorktreeCommand(Worktree, GitSubcmdCommand, abc.ABC):
1193
1201
 
1194
1202
  >>> _b_git = _a_git.git_opts_override(C=[Path("a"), Path("b")], no_advice=True, no_replace_objects=True)
1195
1203
  >>> assert str(_a_git.worktree_subcmd()) == f"{GIT_CMD} {WORKTREE_CMD}" # _a_git never changed
1196
- >>> assert str(_b_git.worktree_subcmd()) == f"{GIT_CMD} -C a -C b --no-replace-objects --no-advice {WORKTREE_CMD}"
1204
+ >>> assert str(_b_git.worktree_subcmd()) == f"{GIT_CMD} -C a -C b --no-advice --no-replace-objects {WORKTREE_CMD}"
1197
1205
 
1198
1206
  Adding git envs:
1199
1207
 
@@ -1202,7 +1210,7 @@ class WorktreeCommand(Worktree, GitSubcmdCommand, abc.ABC):
1202
1210
  >>> assert str(_c_git.worktree_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} {WORKTREE_CMD}"
1203
1211
 
1204
1212
  >>> _d_git = _c_git.git_opts_override(C=[Path("a"), Path("b")], no_advice=True, no_replace_objects=True, config_env=dict(conf1="val1", glob1="val2"))
1205
- >>> assert str(_d_git.worktree_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} -C a -C b --config-env conf1=val1 --config-env glob1=val2 --no-replace-objects --no-advice {WORKTREE_CMD}"
1213
+ >>> assert str(_d_git.worktree_subcmd()) == f"GIT_ADVICE=False GIT_AUTHOR_NAME=Suhas GIT_PAGER=vi {GIT_CMD} -C a -C b --no-advice --no-replace-objects --config-env conf1=val1 --config-env glob1=val2 {WORKTREE_CMD}"
1206
1214
 
1207
1215
  Does not affect repr:
1208
1216
 
@@ -387,7 +387,13 @@ class SimpleGitCommand(GitCommand, RootDirOp):
387
387
 
388
388
  @override
389
389
  def worktree_subcmd(self) -> WorktreeCommand:
390
- warnings.warn("Worktree implementations are not stable.")
390
+ warnings.warn("Worktree implementations are not stable. Use subcmd_unchecked instead.")
391
+ return self._worktree_subcmd_clone()
392
+
393
+ def _worktree_subcmd_clone(self) -> WorktreeCommand:
394
+ """
395
+ Non public-facing worktree clone extract.
396
+ """
391
397
  worktree_subcmd = self._worktree_subcmd.clone()
392
398
  worktree_subcmd._set_underlying_git(self)
393
399
  return worktree_subcmd
@@ -400,7 +406,7 @@ class SimpleGitCommand(GitCommand, RootDirOp):
400
406
  version_subcmd=self.version_subcmd(),
401
407
  ls_tree_subcmd=self.ls_tree_subcmd(),
402
408
  add_subcmd=self.add_subcmd(),
403
- worktree_subcmd=self.worktree_subcmd(),
409
+ worktree_subcmd=self._worktree_subcmd_clone(),
404
410
  subcmd_unchecked=self.subcmd_unchecked(),
405
411
  )
406
412
 
@@ -508,6 +514,6 @@ class CLISimpleGitCommand(SimpleGitCommand):
508
514
  version_subcmd=self.version_subcmd(),
509
515
  ls_tree_subcmd=self.ls_tree_subcmd(),
510
516
  add_subcmd=self.add_subcmd(),
511
- worktree_subcmd=self.worktree_subcmd(),
517
+ worktree_subcmd=self._worktree_subcmd_clone(),
512
518
  subcmd_unchecked=self.subcmd_unchecked(),
513
519
  )
@@ -7,6 +7,7 @@ Utility functions related to processors specific to git commands.
7
7
 
8
8
  from __future__ import annotations
9
9
 
10
+ from vt.utils.commons.commons.core_py import is_unset
10
11
 
11
12
  from gitbolt.models import GitOpts, GitEnvVars
12
13
 
@@ -86,7 +87,7 @@ def merge_git_opts(primary: GitOpts, fallback: GitOpts) -> GitOpts:
86
87
  fallbacks on the corresponding property from the ``fallback`` ``GitOpts`` object if that corresponding property
87
88
  is ``None`` in the ``primary`` ``GitOpts`` object.
88
89
  """
89
- return merge_typed_dicts(primary, fallback, GitOpts)
90
+ return merge_typed_dicts(primary, fallback, GitOpts, omit_unset_keys=True)
90
91
 
91
92
 
92
93
  def merge_git_envs(primary: GitEnvVars, fallback: GitEnvVars) -> GitEnvVars:
@@ -164,16 +165,51 @@ def merge_git_envs(primary: GitEnvVars, fallback: GitEnvVars) -> GitEnvVars:
164
165
  fallbacks on the corresponding property from the ``fallback`` ``GitEnvVars`` object if that corresponding property
165
166
  is explicitly ``None`` in the ``primary`` ``GitEnvVars`` object.
166
167
  """
167
- return merge_typed_dicts(primary, fallback, GitEnvVars)
168
+ return merge_typed_dicts(primary, fallback, GitEnvVars, omit_unset_keys=False)
168
169
 
169
170
 
170
171
  # TODO: check for typing this function
171
- def merge_typed_dicts(primary, fallback, the_typed_dict):
172
- merged = {}
173
- for k in the_typed_dict.__annotations__.keys(): # type: ignore
174
- val = primary.get(k) # type: ignore # required as mypy thinks k is not str
172
+ def merge_typed_dicts(
173
+ primary, fallback, the_typed_dict, *, omit_unset_keys: bool = False
174
+ ):
175
+ """
176
+ Merge typed dicts preserving insertion order of ``fallback`` then new keys from ``primary``.
177
+
178
+ Value resolution matches the previous annotation-order merge: primary wins, ``None`` in primary
179
+ falls back, ``Unset`` is kept for env merges and omitted from opts when ``omit_unset_keys`` is True.
180
+ """
181
+ valid_keys = frozenset(the_typed_dict.__annotations__.keys())
182
+
183
+ keys_order: list[str] = []
184
+ seen: set[str] = set()
185
+ for k in fallback:
186
+ if k in valid_keys and k not in seen:
187
+ keys_order.append(k)
188
+ seen.add(k)
189
+ for k in primary:
190
+ if k in valid_keys and k not in seen:
191
+ keys_order.append(k)
192
+ seen.add(k)
193
+
194
+ merged: dict = {}
195
+ for k in keys_order:
196
+ if k in primary and is_unset(primary[k]):
197
+ if omit_unset_keys:
198
+ continue
199
+ merged[k] = primary[k]
200
+ continue
201
+
202
+ if k in primary:
203
+ val = primary[k]
204
+ if val is None:
205
+ val = fallback.get(k)
206
+ else:
207
+ val = fallback.get(k)
208
+
175
209
  if val is None:
176
- val = fallback.get(k) # type: ignore # required as mypy thinks k is not str
177
- if val is not None:
178
- merged[k] = val # type: ignore # required as mypy thinks k is not str
210
+ continue
211
+ if omit_unset_keys and is_unset(val):
212
+ continue
213
+ merged[k] = val
214
+
179
215
  return merged
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gitbolt
3
- Version: 0.0.0.dev24
3
+ Version: 0.0.0.dev26
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>
File without changes
File without changes
File without changes