fancygit 1.0.18__tar.gz → 1.0.20__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.
- {fancygit-1.0.18 → fancygit-1.0.20}/MANIFEST.in +1 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/PKG-INFO +1 -1
- fancygit-1.0.20/VERSION +1 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/PKG-INFO +1 -1
- {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/SOURCES.txt +5 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.py +0 -63
- fancygit-1.0.20/images/Logo.png +0 -0
- fancygit-1.0.20/images/Logo_with_name.png +0 -0
- fancygit-1.0.20/images/dark_background_logo.png +0 -0
- fancygit-1.0.20/images/light_background_logo.png +0 -0
- fancygit-1.0.20/images/overview.png +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/setup.py +16 -1
- {fancygit-1.0.18 → fancygit-1.0.20}/src/mermaid_export.py +85 -2
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_conflict_parser_integration.py +6 -4
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_fancygit_advanced.py +8 -7
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_fancygit_commands.py +8 -7
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_fancygit_workflows.py +21 -15
- fancygit-1.0.18/VERSION +0 -1
- {fancygit-1.0.18 → fancygit-1.0.20}/.fancygit_config +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/CD_GUIDE.md +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/COLOR_SYSTEM_GUIDE.md +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/EMAIL_SETUP_GUIDE.md +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/LICENSE +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/README.md +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/TESTING_GUIDE.md +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/TESTING_SUMMARY.md +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/command-list.txt +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/dependency_links.txt +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/entry_points.txt +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/requires.txt +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/top_level.txt +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/setup.cfg +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/__init__.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/ai_engine.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/colors.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/config_manager.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/fancygit_config_dc.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/git_error.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/git_error_parser.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/git_insights.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/git_runner.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/loading_animation.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/merge_conflict.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/model_provider.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/output_colorizer.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/providers/__init__.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/providers/anthropic_model.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/providers/base_model.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/providers/ollama_model.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/providers/openai_model.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/repo_inspector.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/repo_state.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/src/utils.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/__init__.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/conftest.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_ai_engine.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_ai_integration.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_config_manager.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_fancygit_integration.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_git_error.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_git_error_parser.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_git_runner.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_model_provider.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_providers.py +0 -0
- {fancygit-1.0.18 → fancygit-1.0.20}/welcome.py +0 -0
fancygit-1.0.20/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.0.20
|
|
@@ -18,6 +18,11 @@ fancygit.egg-info/dependency_links.txt
|
|
|
18
18
|
fancygit.egg-info/entry_points.txt
|
|
19
19
|
fancygit.egg-info/requires.txt
|
|
20
20
|
fancygit.egg-info/top_level.txt
|
|
21
|
+
images/Logo.png
|
|
22
|
+
images/Logo_with_name.png
|
|
23
|
+
images/dark_background_logo.png
|
|
24
|
+
images/light_background_logo.png
|
|
25
|
+
images/overview.png
|
|
21
26
|
src/__init__.py
|
|
22
27
|
src/ai_engine.py
|
|
23
28
|
src/colors.py
|
|
@@ -136,69 +136,6 @@ class FancyGit:
|
|
|
136
136
|
print(color_warning(f"Warning: {commands_file} not found. No commands available."))
|
|
137
137
|
return []
|
|
138
138
|
|
|
139
|
-
## Keep these functions for now
|
|
140
|
-
def _load_confirmation_state(self):
|
|
141
|
-
"""Load confirmation state from config file"""
|
|
142
|
-
config_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), '.fancygit_config')
|
|
143
|
-
try:
|
|
144
|
-
with open(config_file, 'r') as f:
|
|
145
|
-
for line in f:
|
|
146
|
-
if line.startswith('confirmation_enabled='):
|
|
147
|
-
return line.strip().split('=')[1].lower() == 'true'
|
|
148
|
-
except FileNotFoundError:
|
|
149
|
-
pass
|
|
150
|
-
return True # Default to enabled
|
|
151
|
-
|
|
152
|
-
def _load_ai_analysis_state(self):
|
|
153
|
-
"""Load AI analysis state from config file"""
|
|
154
|
-
config_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), '.fancygit_config')
|
|
155
|
-
try:
|
|
156
|
-
with open(config_file, 'r') as f:
|
|
157
|
-
for line in f:
|
|
158
|
-
if line.startswith('ai_analysis_enabled='):
|
|
159
|
-
return line.strip().split('=')[1].lower() == 'true'
|
|
160
|
-
except FileNotFoundError:
|
|
161
|
-
pass
|
|
162
|
-
return True # Default to enabled
|
|
163
|
-
|
|
164
|
-
def _load_animation_type(self):
|
|
165
|
-
"""Load loading animation type from config file"""
|
|
166
|
-
config_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), '.fancygit_config')
|
|
167
|
-
try:
|
|
168
|
-
with open(config_file, 'r') as f:
|
|
169
|
-
for line in f:
|
|
170
|
-
if line.startswith('loading_animation='):
|
|
171
|
-
anim_type = line.strip().split('=')[1].strip()
|
|
172
|
-
valid_types = ['run', 'dots', 'progress', 'matrix', 'brain']
|
|
173
|
-
if anim_type in valid_types:
|
|
174
|
-
return anim_type
|
|
175
|
-
except FileNotFoundError:
|
|
176
|
-
pass
|
|
177
|
-
return 'dots' # Default to dots animation
|
|
178
|
-
|
|
179
|
-
def _load_output_coloring_state(self):
|
|
180
|
-
"""Load output coloring state from config file"""
|
|
181
|
-
config_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), '.fancygit_config')
|
|
182
|
-
try:
|
|
183
|
-
with open(config_file, 'r') as f:
|
|
184
|
-
for line in f:
|
|
185
|
-
if line.startswith('output_coloring_enabled='):
|
|
186
|
-
return line.strip().split('=')[1].lower() == 'true'
|
|
187
|
-
except FileNotFoundError:
|
|
188
|
-
pass
|
|
189
|
-
return True # Default to enabled
|
|
190
|
-
|
|
191
|
-
def _save_confirmation_state(self):
|
|
192
|
-
"""Save confirmation state to config file"""
|
|
193
|
-
try:
|
|
194
|
-
with open(self.config_file, 'w') as f:
|
|
195
|
-
f.write(f'confirmation_enabled={self.confirmation_enabled}\n')
|
|
196
|
-
f.write(f'ai_analysis_enabled={self.ai_analysis_enabled}\n')
|
|
197
|
-
f.write(f'output_coloring_enabled={self.output_coloring_enabled}\n')
|
|
198
|
-
f.write(f'loading_animation={self.loading_animation_type}\n')
|
|
199
|
-
except Exception as e:
|
|
200
|
-
print(color_warning(f"Warning: Could not save confirmation state: {e}"))
|
|
201
|
-
|
|
202
139
|
def toggle_confirmation(self, enable=None):
|
|
203
140
|
"""Toggle confirmation messages before executing commands
|
|
204
141
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -15,7 +15,10 @@ class CustomBuildPy(_build_py):
|
|
|
15
15
|
shutil.copy('.fancygit_config', os.path.join(build_lib, '.fancygit_config'))
|
|
16
16
|
# Copy images folder for logo files
|
|
17
17
|
if os.path.exists('images'):
|
|
18
|
-
|
|
18
|
+
images_build_dir = os.path.join(build_lib, 'images')
|
|
19
|
+
if os.path.exists(images_build_dir):
|
|
20
|
+
shutil.rmtree(images_build_dir)
|
|
21
|
+
shutil.copytree('images', images_build_dir)
|
|
19
22
|
|
|
20
23
|
import os
|
|
21
24
|
|
|
@@ -67,6 +70,18 @@ setup(
|
|
|
67
70
|
packages=find_packages(),
|
|
68
71
|
py_modules=["fancygit", "welcome"],
|
|
69
72
|
include_package_data=True,
|
|
73
|
+
package_data={
|
|
74
|
+
'': ['images/*.png', 'images/*.jpg', 'images/*.jpeg', 'images/*.gif'],
|
|
75
|
+
},
|
|
76
|
+
data_files=[
|
|
77
|
+
('share/fancygit/images', [
|
|
78
|
+
'images/Logo.png',
|
|
79
|
+
'images/Logo_with_name.png',
|
|
80
|
+
'images/dark_background_logo.png',
|
|
81
|
+
'images/light_background_logo.png',
|
|
82
|
+
'images/overview.png'
|
|
83
|
+
]),
|
|
84
|
+
],
|
|
70
85
|
cmdclass={'build_py': CustomBuildPy},
|
|
71
86
|
classifiers=[
|
|
72
87
|
"Development Status :: 4 - Beta",
|
|
@@ -3,11 +3,90 @@ import os
|
|
|
3
3
|
import re
|
|
4
4
|
import textwrap
|
|
5
5
|
from datetime import datetime
|
|
6
|
+
try:
|
|
7
|
+
import importlib.resources as resources
|
|
8
|
+
except ImportError:
|
|
9
|
+
import importlib_resources as resources
|
|
6
10
|
|
|
7
11
|
|
|
8
12
|
class MermaidExporter:
|
|
9
13
|
def __init__(self, runner):
|
|
10
14
|
self.runner = runner
|
|
15
|
+
self._image_base_path = self._get_image_base_path()
|
|
16
|
+
|
|
17
|
+
def _get_image_base_path(self) -> str:
|
|
18
|
+
"""Get the base path for images, handling both development and installed environments"""
|
|
19
|
+
# Try to get the path from installed package data first
|
|
20
|
+
try:
|
|
21
|
+
# When installed, try to find images in the package
|
|
22
|
+
if resources.is_resource('fancygit', 'images'):
|
|
23
|
+
return resources.files('fancygit').joinpath('images')
|
|
24
|
+
except Exception:
|
|
25
|
+
pass
|
|
26
|
+
|
|
27
|
+
# Fallback to development environment - look relative to this file
|
|
28
|
+
current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
29
|
+
project_root = os.path.dirname(current_dir)
|
|
30
|
+
images_path = os.path.join(project_root, 'images')
|
|
31
|
+
|
|
32
|
+
if os.path.exists(images_path):
|
|
33
|
+
return images_path
|
|
34
|
+
|
|
35
|
+
# Final fallback - assume images are in the same directory as the HTML
|
|
36
|
+
return '.'
|
|
37
|
+
|
|
38
|
+
def _get_image_url(self, image_name: str) -> str:
|
|
39
|
+
"""Get proper URL for image files"""
|
|
40
|
+
# First try to get the file as a resource (installed package)
|
|
41
|
+
try:
|
|
42
|
+
if resources.is_resource('fancygit', f'images/{image_name}'):
|
|
43
|
+
# For installed packages, we'll embed the image as base64
|
|
44
|
+
image_path = resources.files('fancygit').joinpath('images', image_name)
|
|
45
|
+
if hasattr(image_path, 'read_bytes'):
|
|
46
|
+
# Python 3.9+ Path object
|
|
47
|
+
return self._bytes_to_base64(image_path.read_bytes(), image_name)
|
|
48
|
+
elif os.path.exists(str(image_path)):
|
|
49
|
+
return self._image_to_base64(str(image_path))
|
|
50
|
+
except Exception:
|
|
51
|
+
pass
|
|
52
|
+
|
|
53
|
+
# In development, use absolute path
|
|
54
|
+
abs_path = os.path.join(self._image_base_path, image_name)
|
|
55
|
+
if os.path.exists(abs_path):
|
|
56
|
+
return self._image_to_base64(abs_path)
|
|
57
|
+
|
|
58
|
+
# If not found, return empty string to avoid broken images
|
|
59
|
+
return ''
|
|
60
|
+
|
|
61
|
+
def _bytes_to_base64(self, image_bytes: bytes, image_name: str) -> str:
|
|
62
|
+
"""Convert image bytes to base64 data URL"""
|
|
63
|
+
try:
|
|
64
|
+
import base64
|
|
65
|
+
encoded = base64.b64encode(image_bytes).decode('utf-8')
|
|
66
|
+
|
|
67
|
+
# Determine MIME type
|
|
68
|
+
if image_name.lower().endswith('.png'):
|
|
69
|
+
mime_type = 'image/png'
|
|
70
|
+
elif image_name.lower().endswith(('.jpg', '.jpeg')):
|
|
71
|
+
mime_type = 'image/jpeg'
|
|
72
|
+
elif image_name.lower().endswith('.gif'):
|
|
73
|
+
mime_type = 'image/gif'
|
|
74
|
+
else:
|
|
75
|
+
mime_type = 'image/png' # default
|
|
76
|
+
|
|
77
|
+
return f'data:{mime_type};base64,{encoded}'
|
|
78
|
+
except Exception:
|
|
79
|
+
return ''
|
|
80
|
+
|
|
81
|
+
def _image_to_base64(self, image_path: str) -> str:
|
|
82
|
+
"""Convert image file to base64 data URL"""
|
|
83
|
+
try:
|
|
84
|
+
with open(image_path, 'rb') as img_file:
|
|
85
|
+
image_bytes = img_file.read()
|
|
86
|
+
image_name = os.path.basename(image_path)
|
|
87
|
+
return self._bytes_to_base64(image_bytes, image_name)
|
|
88
|
+
except Exception:
|
|
89
|
+
return ''
|
|
11
90
|
|
|
12
91
|
def _git(self, args):
|
|
13
92
|
return self.runner.run_git_command(args)
|
|
@@ -456,6 +535,10 @@ class MermaidExporter:
|
|
|
456
535
|
def build_html(self, diagrams: dict, title: str = 'FancyGit Repository Visualization') -> str:
|
|
457
536
|
payload = json.dumps(diagrams)
|
|
458
537
|
now = datetime.now().isoformat(timespec='seconds')
|
|
538
|
+
|
|
539
|
+
# Get proper image URLs
|
|
540
|
+
light_logo_url = self._get_image_url('light_background_logo.png')
|
|
541
|
+
dark_logo_url = self._get_image_url('dark_background_logo.png')
|
|
459
542
|
|
|
460
543
|
return textwrap.dedent(
|
|
461
544
|
f"""\
|
|
@@ -551,7 +634,7 @@ class MermaidExporter:
|
|
|
551
634
|
.logo {{
|
|
552
635
|
width: 80px;
|
|
553
636
|
height: 80px;
|
|
554
|
-
background-image: url('
|
|
637
|
+
background-image: url('{light_logo_url}');
|
|
555
638
|
background-size: contain;
|
|
556
639
|
background-repeat: no-repeat;
|
|
557
640
|
background-position: center;
|
|
@@ -563,7 +646,7 @@ class MermaidExporter:
|
|
|
563
646
|
}}
|
|
564
647
|
|
|
565
648
|
[data-theme="dark"] .logo {{
|
|
566
|
-
background-image: url('
|
|
649
|
+
background-image: url('{dark_logo_url}');
|
|
567
650
|
}}
|
|
568
651
|
|
|
569
652
|
.meta {{
|
|
@@ -20,10 +20,12 @@ class TestConflictParserIntegration:
|
|
|
20
20
|
"""Setup method called before each test"""
|
|
21
21
|
# Initialize FancyGit with mocked config
|
|
22
22
|
with patch.object(FancyGit, '_load_commands', return_value=['add', 'commit', 'push', 'pull']):
|
|
23
|
-
with patch
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
with patch('src.config_manager.ConfigManager'):
|
|
24
|
+
self.fancy_git = FancyGit()
|
|
25
|
+
# Configure test settings
|
|
26
|
+
self.fancy_git.config_manager.config.confirmation_enabled = True
|
|
27
|
+
self.fancy_git.config_manager.config.ai_analysis_enabled = False
|
|
28
|
+
self.fancy_git.config_manager.config.loading_animation = 'simple'
|
|
27
29
|
|
|
28
30
|
def test_conflict_parser_no_conflicts(self, temp_git_repo):
|
|
29
31
|
"""Test conflict parser when no conflicts exist"""
|
|
@@ -20,13 +20,14 @@ class TestFancyGitAdvancedCommands:
|
|
|
20
20
|
'notes', 'range-diff', 'restore', 'revert', 'shortlog', 'show',
|
|
21
21
|
'sparse-checkout', 'submodule', 'switch', 'tag', 'worktree', 'log', 'status'
|
|
22
22
|
]):
|
|
23
|
-
with patch
|
|
24
|
-
with patch
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
with patch('src.config_manager.ConfigManager'):
|
|
24
|
+
with patch('builtins.input', return_value='y'):
|
|
25
|
+
self.fancy_git = FancyGit()
|
|
26
|
+
# Configure test settings
|
|
27
|
+
self.fancy_git.config_manager.config.ai_analysis_enabled = False
|
|
28
|
+
self.fancy_git.config_manager.config.output_coloring_enabled = False
|
|
29
|
+
self.fancy_git.config_manager.config.loading_animation = 'dots'
|
|
30
|
+
self.fancy_git.config_manager.config.confirmation_enabled = False
|
|
30
31
|
|
|
31
32
|
@patch('src.git_runner.GitRunner.run_git_command')
|
|
32
33
|
def test_archive_command(self, mock_run_git):
|
|
@@ -20,13 +20,14 @@ class TestFancyGitCommands:
|
|
|
20
20
|
'merge', 'rebase', 'reset', 'log', 'diff', 'stash', 'rm', 'mv',
|
|
21
21
|
'welcome', 'confirmation', 'ai', 'colors', 'insights', 'visualize'
|
|
22
22
|
]):
|
|
23
|
-
with patch
|
|
24
|
-
with patch
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
with patch('src.config_manager.ConfigManager'):
|
|
24
|
+
with patch('builtins.input', return_value='y'):
|
|
25
|
+
self.fancy_git = FancyGit()
|
|
26
|
+
# Configure test settings
|
|
27
|
+
self.fancy_git.config_manager.config.ai_analysis_enabled = False
|
|
28
|
+
self.fancy_git.config_manager.config.output_coloring_enabled = False
|
|
29
|
+
self.fancy_git.config_manager.config.loading_animation = 'dots'
|
|
30
|
+
self.fancy_git.config_manager.config.confirmation_enabled = False
|
|
30
31
|
|
|
31
32
|
@patch('src.git_runner.GitRunner.run_git_command')
|
|
32
33
|
def test_add_command_success(self, mock_run_git):
|
|
@@ -19,11 +19,13 @@ class TestFancyGitCommandWorkflows:
|
|
|
19
19
|
'merge', 'rebase', 'reset', 'log', 'diff', 'stash', 'rm', 'mv', 'revert',
|
|
20
20
|
'welcome', 'confirmation', 'ai', 'colors', 'insights', 'visualize'
|
|
21
21
|
]):
|
|
22
|
-
with patch
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
with patch('src.config_manager.ConfigManager'):
|
|
23
|
+
self.fancy_git = FancyGit()
|
|
24
|
+
# Configure test settings
|
|
25
|
+
self.fancy_git.config_manager.config.confirmation_enabled = False
|
|
26
|
+
self.fancy_git.config_manager.config.ai_analysis_enabled = False
|
|
27
|
+
self.fancy_git.config_manager.config.output_coloring_enabled = False
|
|
28
|
+
self.fancy_git.config_manager.config.loading_animation = 'dots'
|
|
27
29
|
|
|
28
30
|
@patch('src.git_runner.GitRunner.run_git_command')
|
|
29
31
|
def test_complete_add_commit_workflow(self, mock_run_git):
|
|
@@ -211,11 +213,13 @@ class TestFancyGitSpecialCommandWorkflows:
|
|
|
211
213
|
'merge', 'rebase', 'reset', 'log', 'diff', 'stash', 'rm', 'mv',
|
|
212
214
|
'welcome', 'confirmation', 'ai', 'colors', 'insights', 'visualize'
|
|
213
215
|
]):
|
|
214
|
-
with patch
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
with patch('src.config_manager.ConfigManager'):
|
|
217
|
+
self.fancy_git = FancyGit()
|
|
218
|
+
# Configure test settings
|
|
219
|
+
self.fancy_git.config_manager.config.confirmation_enabled = False
|
|
220
|
+
self.fancy_git.config_manager.config.ai_analysis_enabled = False
|
|
221
|
+
self.fancy_git.config_manager.config.output_coloring_enabled = False
|
|
222
|
+
self.fancy_git.config_manager.config.loading_animation = 'dots'
|
|
219
223
|
|
|
220
224
|
@patch('src.git_runner.GitRunner.run_git_command')
|
|
221
225
|
def test_ai_error_analysis_workflow(self, mock_run_git):
|
|
@@ -345,11 +349,13 @@ class TestFancyGitErrorRecoveryWorkflows:
|
|
|
345
349
|
def setup_method(self):
|
|
346
350
|
"""Setup method called before each test"""
|
|
347
351
|
with patch.object(FancyGit, '_load_commands', return_value=['add', 'commit', 'push', 'pull', 'status']):
|
|
348
|
-
with patch
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
352
|
+
with patch('src.config_manager.ConfigManager'):
|
|
353
|
+
self.fancy_git = FancyGit()
|
|
354
|
+
# Configure test settings
|
|
355
|
+
self.fancy_git.config_manager.config.confirmation_enabled = False
|
|
356
|
+
self.fancy_git.config_manager.config.ai_analysis_enabled = False
|
|
357
|
+
self.fancy_git.config_manager.config.output_coloring_enabled = False
|
|
358
|
+
self.fancy_git.config_manager.config.loading_animation = 'dots'
|
|
353
359
|
|
|
354
360
|
@patch('src.git_runner.GitRunner.run_git_command')
|
|
355
361
|
def test_network_error_recovery(self, mock_run_git):
|
fancygit-1.0.18/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1.0.18
|
|
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
|
|
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
|