diff --git a/rstring/cli.py b/rstring/cli.py index c58659a..9921492 100644 --- a/rstring/cli.py +++ b/rstring/cli.py @@ -140,11 +140,12 @@ def main(): file_list = run_rsync(rsync_args) - # Apply git filtering if in a git repository - try: - file_list = filter_ignored_files(target_dir, file_list) - except Exception as e: - logger.warning(f"Git filtering failed: {e}") + # Apply git filtering if in a git repository and gitignore is enabled + if args.use_gitignore: + try: + file_list = filter_ignored_files(target_dir, file_list) + except Exception as e: + logger.warning(f"Git filtering failed: {e}") result = gather_code(file_list, args.preview_length, args.include_dirs) diff --git a/tests/test_rstring.py b/tests/test_rstring.py index 6febc0b..a56fe3c 100644 --- a/tests/test_rstring.py +++ b/tests/test_rstring.py @@ -266,3 +266,33 @@ def test_get_default_patterns(): patterns = get_default_patterns() assert patterns == ['--include=*/'] + + +def test_no_gitignore_flag_skips_git_filtering(): + """Test that --no-gitignore flag skips git filtering, preventing regression of the bug where git filtering was applied regardless of the flag.""" + with patch('rstring.cli.check_rsync', return_value=True): + with patch('rstring.cli.run_rsync', return_value=['test.py']): + with patch('rstring.cli.filter_ignored_files') as mock_filter: + with patch('rstring.cli.gather_code', return_value='test content'): + with patch('rstring.cli.copy_to_clipboard'): + with patch('rstring.cli.get_tree_string', return_value='test.py'): + with patch.dict(os.environ, {'RSTRING_TESTING': 'True'}): + with patch('sys.argv', ['rstring', '--no-gitignore']): + cli.main() + # Should not call filter_ignored_files when --no-gitignore is used + mock_filter.assert_not_called() + + +def test_default_behavior_applies_git_filtering(): + """Test that default behavior (without --no-gitignore) applies git filtering.""" + with patch('rstring.cli.check_rsync', return_value=True): + with patch('rstring.cli.run_rsync', return_value=['test.py']): + with patch('rstring.cli.filter_ignored_files', return_value=['test.py']) as mock_filter: + with patch('rstring.cli.gather_code', return_value='test content'): + with patch('rstring.cli.copy_to_clipboard'): + with patch('rstring.cli.get_tree_string', return_value='test.py'): + with patch.dict(os.environ, {'RSTRING_TESTING': 'True'}): + with patch('sys.argv', ['rstring']): + cli.main() + # Should call filter_ignored_files when --no-gitignore is not used + mock_filter.assert_called_once()