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.
Files changed (65) hide show
  1. {fancygit-1.0.18 → fancygit-1.0.20}/MANIFEST.in +1 -0
  2. {fancygit-1.0.18 → fancygit-1.0.20}/PKG-INFO +1 -1
  3. fancygit-1.0.20/VERSION +1 -0
  4. {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/PKG-INFO +1 -1
  5. {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/SOURCES.txt +5 -0
  6. {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.py +0 -63
  7. fancygit-1.0.20/images/Logo.png +0 -0
  8. fancygit-1.0.20/images/Logo_with_name.png +0 -0
  9. fancygit-1.0.20/images/dark_background_logo.png +0 -0
  10. fancygit-1.0.20/images/light_background_logo.png +0 -0
  11. fancygit-1.0.20/images/overview.png +0 -0
  12. {fancygit-1.0.18 → fancygit-1.0.20}/setup.py +16 -1
  13. {fancygit-1.0.18 → fancygit-1.0.20}/src/mermaid_export.py +85 -2
  14. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_conflict_parser_integration.py +6 -4
  15. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_fancygit_advanced.py +8 -7
  16. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_fancygit_commands.py +8 -7
  17. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_fancygit_workflows.py +21 -15
  18. fancygit-1.0.18/VERSION +0 -1
  19. {fancygit-1.0.18 → fancygit-1.0.20}/.fancygit_config +0 -0
  20. {fancygit-1.0.18 → fancygit-1.0.20}/CD_GUIDE.md +0 -0
  21. {fancygit-1.0.18 → fancygit-1.0.20}/COLOR_SYSTEM_GUIDE.md +0 -0
  22. {fancygit-1.0.18 → fancygit-1.0.20}/EMAIL_SETUP_GUIDE.md +0 -0
  23. {fancygit-1.0.18 → fancygit-1.0.20}/LICENSE +0 -0
  24. {fancygit-1.0.18 → fancygit-1.0.20}/README.md +0 -0
  25. {fancygit-1.0.18 → fancygit-1.0.20}/TESTING_GUIDE.md +0 -0
  26. {fancygit-1.0.18 → fancygit-1.0.20}/TESTING_SUMMARY.md +0 -0
  27. {fancygit-1.0.18 → fancygit-1.0.20}/command-list.txt +0 -0
  28. {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/dependency_links.txt +0 -0
  29. {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/entry_points.txt +0 -0
  30. {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/requires.txt +0 -0
  31. {fancygit-1.0.18 → fancygit-1.0.20}/fancygit.egg-info/top_level.txt +0 -0
  32. {fancygit-1.0.18 → fancygit-1.0.20}/setup.cfg +0 -0
  33. {fancygit-1.0.18 → fancygit-1.0.20}/src/__init__.py +0 -0
  34. {fancygit-1.0.18 → fancygit-1.0.20}/src/ai_engine.py +0 -0
  35. {fancygit-1.0.18 → fancygit-1.0.20}/src/colors.py +0 -0
  36. {fancygit-1.0.18 → fancygit-1.0.20}/src/config_manager.py +0 -0
  37. {fancygit-1.0.18 → fancygit-1.0.20}/src/fancygit_config_dc.py +0 -0
  38. {fancygit-1.0.18 → fancygit-1.0.20}/src/git_error.py +0 -0
  39. {fancygit-1.0.18 → fancygit-1.0.20}/src/git_error_parser.py +0 -0
  40. {fancygit-1.0.18 → fancygit-1.0.20}/src/git_insights.py +0 -0
  41. {fancygit-1.0.18 → fancygit-1.0.20}/src/git_runner.py +0 -0
  42. {fancygit-1.0.18 → fancygit-1.0.20}/src/loading_animation.py +0 -0
  43. {fancygit-1.0.18 → fancygit-1.0.20}/src/merge_conflict.py +0 -0
  44. {fancygit-1.0.18 → fancygit-1.0.20}/src/model_provider.py +0 -0
  45. {fancygit-1.0.18 → fancygit-1.0.20}/src/output_colorizer.py +0 -0
  46. {fancygit-1.0.18 → fancygit-1.0.20}/src/providers/__init__.py +0 -0
  47. {fancygit-1.0.18 → fancygit-1.0.20}/src/providers/anthropic_model.py +0 -0
  48. {fancygit-1.0.18 → fancygit-1.0.20}/src/providers/base_model.py +0 -0
  49. {fancygit-1.0.18 → fancygit-1.0.20}/src/providers/ollama_model.py +0 -0
  50. {fancygit-1.0.18 → fancygit-1.0.20}/src/providers/openai_model.py +0 -0
  51. {fancygit-1.0.18 → fancygit-1.0.20}/src/repo_inspector.py +0 -0
  52. {fancygit-1.0.18 → fancygit-1.0.20}/src/repo_state.py +0 -0
  53. {fancygit-1.0.18 → fancygit-1.0.20}/src/utils.py +0 -0
  54. {fancygit-1.0.18 → fancygit-1.0.20}/tests/__init__.py +0 -0
  55. {fancygit-1.0.18 → fancygit-1.0.20}/tests/conftest.py +0 -0
  56. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_ai_engine.py +0 -0
  57. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_ai_integration.py +0 -0
  58. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_config_manager.py +0 -0
  59. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_fancygit_integration.py +0 -0
  60. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_git_error.py +0 -0
  61. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_git_error_parser.py +0 -0
  62. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_git_runner.py +0 -0
  63. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_model_provider.py +0 -0
  64. {fancygit-1.0.18 → fancygit-1.0.20}/tests/test_providers.py +0 -0
  65. {fancygit-1.0.18 → fancygit-1.0.20}/welcome.py +0 -0
@@ -7,5 +7,6 @@ include welcome.py
7
7
  include fancygit.py
8
8
  recursive-include src *.py
9
9
  recursive-include tests *.py
10
+ recursive-include images *.png *.jpg *.jpeg *.gif
10
11
  global-exclude *.pyc
11
12
  global-exclude __pycache__
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fancygit
3
- Version: 1.0.18
3
+ Version: 1.0.20
4
4
  Summary: A smart CLI tool that provides intelligent recommendations and helps solve merge conflicts
5
5
  Author: Youssif Ashmawy
6
6
  Author-email: ashmawyyoussif@gmail.com
@@ -0,0 +1 @@
1
+ 1.0.20
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fancygit
3
- Version: 1.0.18
3
+ Version: 1.0.20
4
4
  Summary: A smart CLI tool that provides intelligent recommendations and helps solve merge conflicts
5
5
  Author: Youssif Ashmawy
6
6
  Author-email: ashmawyyoussif@gmail.com
@@ -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
@@ -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
- shutil.copytree('images', os.path.join(build_lib, 'images'))
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('../images/light_background_logo.png');
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('../images/dark_background_logo.png');
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.object(FancyGit, '_load_confirmation_state', return_value=True):
24
- with patch.object(FancyGit, '_load_ai_analysis_state', return_value=False):
25
- with patch.object(FancyGit, '_load_animation_type', return_value='simple'):
26
- self.fancy_git = FancyGit()
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.object(FancyGit, '_load_ai_analysis_state', return_value=False):
24
- with patch.object(FancyGit, '_load_output_coloring_state', return_value=False):
25
- with patch.object(FancyGit, '_load_animation_type', return_value='dots'):
26
- with patch('builtins.input', return_value='y'):
27
- self.fancy_git = FancyGit()
28
- # Disable confirmation directly on config
29
- self.fancy_git.config_manager.config.confirmation_enabled = False
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.object(FancyGit, '_load_ai_analysis_state', return_value=False):
24
- with patch.object(FancyGit, '_load_output_coloring_state', return_value=False):
25
- with patch.object(FancyGit, '_load_animation_type', return_value='dots'):
26
- with patch('builtins.input', return_value='y'):
27
- self.fancy_git = FancyGit()
28
- # Disable confirmation directly on config
29
- self.fancy_git.config_manager.config.confirmation_enabled = False
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.object(FancyGit, '_load_confirmation_state', return_value=False):
23
- with patch.object(FancyGit, '_load_ai_analysis_state', return_value=False):
24
- with patch.object(FancyGit, '_load_output_coloring_state', return_value=False):
25
- with patch.object(FancyGit, '_load_animation_type', return_value='dots'):
26
- self.fancy_git = FancyGit()
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.object(FancyGit, '_load_confirmation_state', return_value=False):
215
- with patch.object(FancyGit, '_load_ai_analysis_state', return_value=False):
216
- with patch.object(FancyGit, '_load_output_coloring_state', return_value=False):
217
- with patch.object(FancyGit, '_load_animation_type', return_value='dots'):
218
- self.fancy_git = FancyGit()
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.object(FancyGit, '_load_confirmation_state', return_value=False):
349
- with patch.object(FancyGit, '_load_ai_analysis_state', return_value=False):
350
- with patch.object(FancyGit, '_load_output_coloring_state', return_value=False):
351
- with patch.object(FancyGit, '_load_animation_type', return_value='dots'):
352
- self.fancy_git = FancyGit()
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