ai-cr 3.2.0__py3-none-any.whl → 3.2.1__py3-none-any.whl

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ai-cr
3
- Version: 3.2.0
3
+ Version: 3.2.1
4
4
  Summary: AI code review tool that works with any language model provider. It detects issues in GitHub pull requests or local changes—instantly, reliably, and without vendor lock-in.
5
5
  License: MIT
6
6
  Keywords: static code analysis,code review,code quality,ai,coding,assistant,llm,github,automation,devops,developer tools,github actions,workflows,git
@@ -14,7 +14,7 @@ gito/commands/version.py,sha256=OdAuKtjGV9Ok2_igAs-EqdJijXCKU1dcLcA5KEz1ydg,178
14
14
  gito/config.toml,sha256=51TeM_m0_v89u3X1lmafA-D5TqjiXWc-j1W_12VBppg,17777
15
15
  gito/constants.py,sha256=1ElhE4RH0EPEq3xlhwyYRUcgr38X8wXduos0gV9yPy8,819
16
16
  gito/context.py,sha256=OBfcQOREsNx8WHANsplNrnrKYrXz1PyZyne11lSfZjw,446
17
- gito/core.py,sha256=H4DcVFt46BdqXfy1AxYFJMFlKgzLiXzBPqY4oaO6NeM,17379
17
+ gito/core.py,sha256=nw3eUiLFWDOQJB7N_y6UE5hUrr4cS8xD_Q_RgktepUM,17795
18
18
  gito/env.py,sha256=TVNxqrnLefqfZt5sSg495p8UenSgHaMgTImK1rRMIlY,146
19
19
  gito/gh_api.py,sha256=2yDikXr9BM2tndYpCo-weJxjoCAlEtuPh-QBinlnHtg,4052
20
20
  gito/issue_trackers.py,sha256=XYspyaIuf0ANQSvDUea5_oOdo9tQvpZZsapI5S9g78U,1551
@@ -34,8 +34,8 @@ gito/tpl/questions/changes_summary.j2,sha256=N80OQoo9UKii0CWLuck5bOwbijul5RefvCq
34
34
  gito/tpl/questions/release_notes.j2,sha256=OXi6o7T1bum88_2Pt4FiLHmKUe86A1t9Be_3s4mrnmU,889
35
35
  gito/tpl/questions/test_cases.j2,sha256=bB7ESjy02mwWml4zyq87DqkFDj-I0-BYpfJVgzE77cc,1410
36
36
  gito/utils.py,sha256=OSBn7IeWKjoLJoGOcdgQcJHBA69UiHUChtaYMInUeko,6852
37
- ai_cr-3.2.0.dist-info/LICENSE,sha256=VbdF_GbbDK24JvdTfnsxa2M6jmhsxmRSFeHCx-lICGE,1075
38
- ai_cr-3.2.0.dist-info/METADATA,sha256=jpHSdAUyaroAZRxlDG6rX2QfohgnCgrbCvFHslRguPA,8874
39
- ai_cr-3.2.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
40
- ai_cr-3.2.0.dist-info/entry_points.txt,sha256=Ua1DxkhJJ8TZuLgnH-IlWCkrre_0S0dq_GtYRaYupWk,38
41
- ai_cr-3.2.0.dist-info/RECORD,,
37
+ ai_cr-3.2.1.dist-info/LICENSE,sha256=VbdF_GbbDK24JvdTfnsxa2M6jmhsxmRSFeHCx-lICGE,1075
38
+ ai_cr-3.2.1.dist-info/METADATA,sha256=SfLgtno0Kb_YCu-x7mCqqdqwNXJ9jNQ2B0lv_C1khog,8874
39
+ ai_cr-3.2.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
40
+ ai_cr-3.2.1.dist-info/entry_points.txt,sha256=Ua1DxkhJJ8TZuLgnH-IlWCkrre_0S0dq_GtYRaYupWk,38
41
+ ai_cr-3.2.1.dist-info/RECORD,,
gito/core.py CHANGED
@@ -121,85 +121,88 @@ def get_diff(
121
121
  if review_subject_is_index(what):
122
122
  what = None # working copy
123
123
  if use_merge_base:
124
- if review_subject_is_index(what):
125
- try:
126
- current_ref = repo.active_branch.name
127
- except TypeError:
128
- # In detached HEAD state, use HEAD directly
129
- current_ref = "HEAD"
130
- logging.info(
131
- "Detected detached HEAD state, using HEAD as current reference"
132
- )
133
- else:
134
- current_ref = what
135
- merge_base = repo.merge_base(current_ref or repo.active_branch.name, against)[0]
136
- logging.info(
137
- f"Merge base({ui.green(current_ref)},{ui.yellow(against)})"
138
- f" --> {ui.cyan(merge_base.hexsha)}"
139
- )
140
- # if branch is already an ancestor of "against", merge_base == branch ⇒ it’s been merged
141
- if merge_base.hexsha == repo.commit(current_ref or repo.active_branch.name).hexsha:
142
- # @todo: check case: reviewing working copy index in main branch #103
143
- logging.info(
144
- f"Branch is already merged. ({ui.green(current_ref)} vs {ui.yellow(against)})"
145
- )
146
- merge_sha = repo.git.log(
147
- '--merges',
148
- '--ancestry-path',
149
- f'{current_ref}..{against}',
150
- '-n',
151
- '1',
152
- '--pretty=format:%H'
153
- ).strip()
154
- if merge_sha:
155
- logging.info(f"Merge commit is {ui.cyan(merge_sha)}")
156
- merge_commit = repo.commit(merge_sha)
157
-
158
- other_merge_parent = None
159
- for parent in merge_commit.parents:
160
- logging.info(f"Checking merge parent: {parent.hexsha[:8]}")
161
- if parent.hexsha == merge_base.hexsha:
162
- logging.info(f"merge parent is {ui.cyan(parent.hexsha[:8])}, skipping")
163
- continue
164
- if not commit_in_branch(repo, parent, against):
165
- logging.warning(f"merge parent is not in {against}, skipping")
166
- continue
167
- logging.info(f"Found other merge parent: {ui.cyan(parent.hexsha[:8])}")
168
- other_merge_parent = parent
169
- break
170
- if other_merge_parent:
171
- first_common_ancestor = repo.merge_base(other_merge_parent, merge_base)[0]
172
- # for gito remote (feature_branch vs origin/main)
173
- # the same merge base appears in first_common_ancestor again
174
- if first_common_ancestor.hexsha == merge_base.hexsha:
175
- if merge_base.parents:
176
- first_common_ancestor = repo.merge_base(
177
- other_merge_parent, merge_base.parents[0]
178
- )[0]
179
- else:
180
- logging.error(
181
- "merge_base has no parents, "
182
- "using merge_base as first_common_ancestor"
183
- )
124
+ try:
125
+ if review_subject_is_index(what):
126
+ try:
127
+ current_ref = repo.active_branch.name
128
+ except TypeError:
129
+ # In detached HEAD state, use HEAD directly
130
+ current_ref = "HEAD"
184
131
  logging.info(
185
- f"{what} will be compared to "
186
- f"first common ancestor of {what} and {against}: "
187
- f"{ui.cyan(first_common_ancestor.hexsha[:8])}"
132
+ "Detected detached HEAD state, using HEAD as current reference"
188
133
  )
189
- against = first_common_ancestor.hexsha
190
- else:
191
- logging.error(f"Can't find other merge parent for {merge_sha}")
192
134
  else:
193
- logging.warning(
194
- f"No merge‐commit found for {current_ref!r}→{against!r}; "
195
- "falling back to merge‐base diff"
196
- )
197
- else:
198
- # normal case: branch not yet merged
199
- against = merge_base.hexsha
135
+ current_ref = what
136
+ merge_base = repo.merge_base(current_ref or repo.active_branch.name, against)[0]
200
137
  logging.info(
201
- f"Using merge base: {ui.cyan(merge_base.hexsha[:8])} ({merge_base.summary})"
138
+ f"Merge base({ui.green(current_ref)},{ui.yellow(against)})"
139
+ f" --> {ui.cyan(merge_base.hexsha)}"
202
140
  )
141
+ # if branch is already an ancestor of "against", merge_base == branch ⇒ it’s been merged
142
+ if merge_base.hexsha == repo.commit(current_ref or repo.active_branch.name).hexsha:
143
+ # @todo: check case: reviewing working copy index in main branch #103
144
+ logging.info(
145
+ f"Branch is already merged. ({ui.green(current_ref)} vs {ui.yellow(against)})"
146
+ )
147
+ merge_sha = repo.git.log(
148
+ '--merges',
149
+ '--ancestry-path',
150
+ f'{current_ref}..{against}',
151
+ '-n',
152
+ '1',
153
+ '--pretty=format:%H'
154
+ ).strip()
155
+ if merge_sha:
156
+ logging.info(f"Merge commit is {ui.cyan(merge_sha)}")
157
+ merge_commit = repo.commit(merge_sha)
158
+
159
+ other_merge_parent = None
160
+ for parent in merge_commit.parents:
161
+ logging.info(f"Checking merge parent: {parent.hexsha[:8]}")
162
+ if parent.hexsha == merge_base.hexsha:
163
+ logging.info(f"merge parent is {ui.cyan(parent.hexsha[:8])}, skipping")
164
+ continue
165
+ if not commit_in_branch(repo, parent, against):
166
+ logging.warning(f"merge parent is not in {against}, skipping")
167
+ continue
168
+ logging.info(f"Found other merge parent: {ui.cyan(parent.hexsha[:8])}")
169
+ other_merge_parent = parent
170
+ break
171
+ if other_merge_parent:
172
+ first_common_ancestor = repo.merge_base(other_merge_parent, merge_base)[0]
173
+ # for gito remote (feature_branch vs origin/main)
174
+ # the same merge base appears in first_common_ancestor again
175
+ if first_common_ancestor.hexsha == merge_base.hexsha:
176
+ if merge_base.parents:
177
+ first_common_ancestor = repo.merge_base(
178
+ other_merge_parent, merge_base.parents[0]
179
+ )[0]
180
+ else:
181
+ logging.error(
182
+ "merge_base has no parents, "
183
+ "using merge_base as first_common_ancestor"
184
+ )
185
+ logging.info(
186
+ f"{what} will be compared to "
187
+ f"first common ancestor of {what} and {against}: "
188
+ f"{ui.cyan(first_common_ancestor.hexsha[:8])}"
189
+ )
190
+ against = first_common_ancestor.hexsha
191
+ else:
192
+ logging.error(f"Can't find other merge parent for {merge_sha}")
193
+ else:
194
+ logging.warning(
195
+ f"No merge‐commit found for {current_ref!r}→{against!r}; "
196
+ "falling back to merge‐base diff"
197
+ )
198
+ else:
199
+ # normal case: branch not yet merged
200
+ against = merge_base.hexsha
201
+ logging.info(
202
+ f"Using merge base: {ui.cyan(merge_base.hexsha[:8])} ({merge_base.summary})"
203
+ )
204
+ except Exception as e:
205
+ logging.error(f"Error finding merge base: {e}")
203
206
  logging.info(
204
207
  f"Making diff: {ui.green(what or 'INDEX')} vs {ui.yellow(against)}"
205
208
  )
File without changes
File without changes