gabriel / muse public
feat BREAKING task/shelf #1 / 3
gabriel · 157 days ago · Apr 16, 2026 · Diff

feat: retire stash; complete shelf migration

- Delete stash.py (replaced by shelf.py) - Delete test_cmd_stash.py, test_cmd_stash_hardening.py, test_checkout_autostash.py, test_cmd_merge_autostash.py - Update app.py: remove stash import + register call - Update workspace.py: stash_count → shelf_count, stash.json → shelf.json - Update test_cmd_diff.py: --stash → --shelf, muse stash → muse shelf save - Update test_cli_coverage_gaps.py: TestStashGaps → TestShelfGaps - Update test_cli_plugin_dispatch.py: TestStashDispatch → TestShelfDispatch - Update test_porcelain_security.py: TestStashAtomicWrite → TestShelfAtomicWrite - Update test_core_workspace.py: stash_count → shelf_count throughout - Update test_cli_workflow.py: TestStash → TestShelf - Update test_stress_e2e_workflow.py: TestStash → TestShelf

Stash is gone. Work sits on the shelf.

sha256:3fc11b67abf3ab745d7ade48b311289cf3e9a44dafaea44d507e73e24ced5bba sha
+26 ~121 −518 symbols
sha256:006af3cf60d9ec4bc457cee170ff56e49ef8a11e90dcd6fa9f0f588a99faf4be snapshot
+26
symbols added
~121
symbols modified
−518
symbols removed
−1
dead symbol removed
Semantic Changes 665 symbols
~ muse/cli/commands/stash.py .py 45 symbols removed
StashEntry class class StashEntry L68–86
_STASH_FILE variable variable _STASH_FILE L63–63
_STASH_MAX_BYTES variable variable _STASH_MAX_BYTES L62–62
_apply_stash_delta function function _apply_stash_delta L201–229
_load_stash function function _load_stash L89–142
_resolve_index function function _resolve_index L172–189
_save_stash function function _save_stash L145–169
_stash_pop_programmatic function function _stash_pop_programmatic L511–555
_stash_push_programmatic function function _stash_push_programmatic L448–508
_verify_manifest_objects function function _verify_manifest_objects L192–198
ExitCode import import ExitCode L48–48
Manifest import import Manifest L47–47
TypedDict import import TypedDict L45–45
annotations import import annotations L35–35
apply_manifest import import apply_manifest L59–59
argparse import import argparse L37–37
assert_not_symlink import import assert_not_symlink L58–58
compute_snapshot_id import import compute_snapshot_id L52–52
datetime import import datetime L38–38
directories_from_manifest import import directories_from_manifest L52–52
get_head_snapshot_manifest import import get_head_snapshot_manifest L57–57
has_object import import has_object L49–49
is_ignored import import is_ignored L51–51
json import import json L39–39
load_ignore_patterns import import load_ignore_patterns L52–52
logging import import logging L40–40
os import import os L41–41
pathlib import import pathlib L42–42
read_current_branch import import read_current_branch L57–57
read_object import import read_object L49–49
read_repo_id import import read_repo_id L50–50
require_repo import import require_repo L50–50
resolve_plugin import import resolve_plugin L60–60
sanitize_display import import sanitize_display L58–58
sys import import sys L43–43
tempfile import import tempfile L44–44
write_object_from_path import import write_object_from_path L49–49
logger variable variable logger L65–65
register function function register L232–443
run function function run L558–665
run_apply function function run_apply L751–827
run_drop function function run_drop L953–1011
run_list function function run_list L898–950
run_pop function function run_pop L668–748
run_read function function run_read L830–895
~ tests/test_checkout_autostash.py .py 56 symbols removed
TestApplyAutostash class class TestApplyAutostash L170–205
test_corrupt_stash_warns_stderr_does_not_raise method method test_corrupt_stash_warns_stderr_does_not_raise L191–205
test_json_mode_prints_to_stderr method method test_json_mode_prints_to_stderr L181–189
test_text_mode_prints_to_stdout method method test_text_mode_prints_to_stdout L173–179
TestAutostashCLI class class TestAutostashCLI L211–394
test_already_on_branch_no_stash method method test_already_on_branch_no_stash L339–343
test_autostash_and_force_rejected method method test_autostash_and_force_rejected L291–294
test_autostash_and_merge_rejected method method test_autostash_and_merge_rejected L296–299
test_autostash_message_matches_git_idiom method method test_autostash_message_matches_git_idiom L360–372
test_clean_tree_no_autostash_message method method test_clean_tree_no_autostash_message L223–227
test_clean_tree_no_stash_entry_created method method test_clean_tree_no_stash_entry_created L216–221
test_create_branch_autostash_is_noop method method test_create_branch_autostash_is_noop L327–335
test_dirty_tree_changes_restored_on_new_branch method method test_dirty_tree_changes_restored_on_new_branch L244–248
test_dirty_tree_stash_popped_after_switch method method test_dirty_tree_stash_popped_after_switch L238–242
test_dirty_tree_switch_succeeds method method test_dirty_tree_switch_succeeds L231–236
test_dirty_without_autostash_shows_all_remedies method method test_dirty_without_autostash_shows_all_remedies L347–356
test_dry_run_exits_zero_on_existing_branch method method test_dry_run_exits_zero_on_existing_branch L321–323
test_dry_run_no_branch_switch method method test_dry_run_no_branch_switch L309–313
test_dry_run_no_stash_created method method test_dry_run_no_stash_created L303–307
test_dry_run_working_tree_unchanged method method test_dry_run_working_tree_unchanged L315–319
test_json_mode_applied_autostash_goes_to_stderr method method test_json_mode_applied_autostash_goes_to_stderr L273–277
test_json_mode_stdout_is_valid_json method method test_json_mode_stdout_is_valid_json L259–271
test_multiple_dirty_files_all_restored method method test_multiple_dirty_files_all_restored L376–383
test_new_file_on_main_survives_to_feat method method test_new_file_on_main_survives_to_feat L281–287
test_switch_back_restores_original_state method method test_switch_back_restores_original_state L385–394
test_text_mode_prints_stash_then_applied method method test_text_mode_prints_stash_then_applied L250–255
TestProgrammaticStashAPI class class TestProgrammaticStashAPI L99–164
test_pop_raises_on_empty_stash method method test_pop_raises_on_empty_stash L135–137
test_pop_raises_on_out_of_range_index method method test_pop_raises_on_out_of_range_index L139–143
test_pop_removes_entry_from_stack method method test_pop_removes_entry_from_stack L153–158
test_pop_restores_file_content method method test_pop_restores_file_content L145–151
test_push_captures_added_files method method test_push_captures_added_files L125–133
test_push_pop_roundtrip_message_preserved method method test_push_pop_roundtrip_message_preserved L160–164
test_push_restores_working_tree_to_head method method test_push_restores_working_tree_to_head L119–123
test_push_returns_entry_when_dirty method method test_push_returns_entry_when_dirty L109–117
test_push_returns_none_when_clean method method test_push_returns_none_when_clean L103–107
_commit function function _commit L62–65
_invoke function function _invoke L53–59
_stash_size function function _stash_size L68–69
CliRunner import import CliRunner L38–38
InvokeResult import import InvokeResult L38–38
_apply_autostash import import _apply_autostash L45–45
_load_stash import import _load_stash L40–40
_stash_pop_programmatic import import _stash_pop_programmatic L40–40
_stash_push_programmatic import import _stash_push_programmatic L40–40
annotations import import annotations L27–27
contextlib import import contextlib L34–34
io import import io L29–29
json import import json L30–30
os import import os L31–31
pathlib import import pathlib L32–32
pytest import import pytest L36–36
read_current_branch import import read_current_branch L39–39
sys import import sys L33–33
runner variable variable runner L47–47
two_branch_repo function function two_branch_repo L76–93
~ tests/test_cmd_merge_autostash.py .py 50 symbols removed
TestCleanTree class class TestCleanTree L168–180
test_clean_tree_merge_succeeds method method test_clean_tree_merge_succeeds L176–180
test_clean_tree_no_stash_created method method test_clean_tree_no_stash_created L171–174
TestDataIntegrity class class TestDataIntegrity L263–299
test_file_mode_bits_preserved method method test_file_mode_bits_preserved L281–289
test_multiple_wip_files_all_restored method method test_multiple_wip_files_all_restored L291–299
test_no_changes_lost_on_clean_merge method method test_no_changes_lost_on_clean_merge L266–273
test_no_changes_lost_on_conflict method method test_no_changes_lost_on_conflict L275–279
TestDirtyTreeConflict class class TestDirtyTreeConflict L244–255
test_conflict_stash_popped method method test_conflict_stash_popped L247–250
test_conflict_wip_file_restored method method test_conflict_wip_file_restored L252–255
TestDirtyTreeSuccessfulMerge class class TestDirtyTreeSuccessfulMerge L188–236
test_dirty_modified_file_restored_after_merge method method test_dirty_modified_file_restored_after_merge L229–236
test_dirty_tree_json_output_is_valid method method test_dirty_tree_json_output_is_valid L215–227
test_dirty_tree_merge_result_present method method test_dirty_tree_merge_result_present L207–213
test_dirty_tree_stash_popped_after_merge method method test_dirty_tree_stash_popped_after_merge L191–198
test_dirty_tree_wip_file_restored_after_merge method method test_dirty_tree_wip_file_restored_after_merge L200–205
TestDocstrings class class TestDocstrings L452–461
test_run_has_docstring method method test_run_has_docstring L455–457
test_run_merge_helper_has_docstring method method test_run_merge_helper_has_docstring L459–461
TestEndToEnd class class TestEndToEnd L307–326
test_binary_equivalent_content_survives_stash method method test_binary_equivalent_content_survives_stash L319–326
test_multiple_dirty_files_all_restored method method test_multiple_dirty_files_all_restored L310–317
TestFlagValidation class class TestFlagValidation L142–160
test_autostash_and_force_are_mutually_exclusive method method test_autostash_and_force_are_mutually_exclusive L145–150
test_autostash_dry_run_does_not_create_stash method method test_autostash_dry_run_does_not_create_stash L152–160
TestPerformance class class TestPerformance L363–405
test_autostash_merge_under_5s method method test_autostash_merge_under_5s L366–372
test_autostash_overhead_vs_plain_merge method method test_autostash_overhead_vs_plain_merge L374–405
TestSecurity class class TestSecurity L334–355
test_autostash_force_mutually_exclusive method method test_autostash_force_mutually_exclusive L337–340
test_wip_file_not_in_merged_commit method method test_wip_file_not_in_merged_commit L342–355
TestStress class class TestStress L413–444
test_20_consecutive_autostash_merges method method test_20_consecutive_autostash_merges L416–435
test_large_wip_file_survives_stash method method test_large_wip_file_survives_stash L437–444
_commit function function _commit L77–80
_invoke function function _invoke L68–74
_stash_size function function _stash_size L83–84
conflict_repo function function conflict_repo L115–134
CliRunner import import CliRunner L57–57
InvokeResult import import InvokeResult L57–57
_load_stash import import _load_stash L58–58
annotations import import annotations L48–48
json import import json L50–50
os import import os L51–51
pathlib import import pathlib L52–52
pytest import import pytest L55–55
time import import time L53–53
runner variable variable runner L60–60
two_branch_repo function function two_branch_repo L93–111
~ tests/test_cmd_stash.py .py 45 symbols removed
TestStashDeltaRegression class class TestStashDeltaRegression L299–541
_make_commit_with_files method method _make_commit_with_files L311–356
test_stash_does_not_record_ignored_extant_as_deleted method method test_stash_does_not_record_ignored_extant_as_deleted L448–477
test_stash_files_count_is_delta_size method method test_stash_files_count_is_delta_size L529–541
test_stash_pop_does_not_overwrite_newer_commits method method test_stash_pop_does_not_overwrite_newer_commits L382–427
test_stash_pop_does_not_unlink_ignored_extant_file method method test_stash_pop_does_not_unlink_ignored_extant_file L479–504
test_stash_pop_restores_deleted_files method method test_stash_pop_restores_deleted_files L429–446
test_stash_read_lists_only_changed_files method method test_stash_read_lists_only_changed_files L506–527
test_stash_saves_only_delta_not_full_snapshot method method test_stash_saves_only_delta_not_full_snapshot L358–380
TestStashIntegration class class TestStashIntegration L192–226
test_stash_drop_empty_fails method method test_stash_drop_empty_fails L211–215
test_stash_list_empty method method test_stash_list_empty L199–203
test_stash_list_shows_entries method method test_stash_list_shows_entries L217–226
test_stash_pop_empty_fails method method test_stash_pop_empty_fails L205–209
test_stash_with_no_changes_reports_nothing method method test_stash_with_no_changes_reports_nothing L193–197
TestStashPerf class class TestStashPerf L544–602
test_verify_manifest_calls_has_object_not_read_object method method test_verify_manifest_calls_has_object_not_read_object L565–602
test_verify_manifest_uses_has_object_not_read_object method method test_verify_manifest_uses_has_object_not_read_object L547–563
TestStashSecurity class class TestStashSecurity L233–259
test_stash_list_sanitizes_branch_name_with_control_chars method method test_stash_list_sanitizes_branch_name_with_control_chars L234–247
test_stash_pop_sanitizes_branch_name method method test_stash_pop_sanitizes_branch_name L249–259
TestStashSnapshotIdNormalization class class TestStashSnapshotIdNormalization L124–185
test_bare_hex_snapshot_id_normalized_on_load method method test_bare_hex_snapshot_id_normalized_on_load L127–145
test_canonical_snapshot_id_unchanged_on_load method method test_canonical_snapshot_id_unchanged_on_load L147–165
test_mixed_entries_all_normalized method method test_mixed_entries_all_normalized L167–185
TestStashStress class class TestStashStress L266–292
test_many_stash_entries_save_load method method test_many_stash_entries_save_load L267–278
test_repeated_save_load_no_corruption method method test_repeated_save_load_no_corruption L280–292
TestStashUnit class class TestStashUnit L81–121
test_load_stash_empty method method test_load_stash_empty L82–85
test_load_stash_ignores_oversized_file method method test_load_stash_ignores_oversized_file L115–121
test_save_and_load_stash_roundtrip method method test_save_and_load_stash_roundtrip L87–100
test_save_stash_is_atomic method method test_save_stash_is_atomic L102–113
_env function function _env L30–31
_init_repo function function _init_repo L34–49
_make_commit function function _make_commit L52–74
cli variable variable cli L21–21
CliRunner import import CliRunner L19–19
annotations import import annotations L11–11
datetime import import datetime L13–13
json import import json L14–14
pathlib import import pathlib L15–15
pytest import import pytest L18–18
uuid import import uuid L16–16
runner variable variable runner L23–23
~ tests/test_cmd_stash_hardening.py .py 295 symbols removed
TestApply class class TestApply L357–384
test_apply_empty_to_stderr method method test_apply_empty_to_stderr L381–384
test_apply_json_status method method test_apply_json_status L375–379
test_apply_preserves_stash_entry method method test_apply_preserves_stash_entry L358–366
test_apply_restores_workdir method method test_apply_restores_workdir L368–373
TestDeadCodeRemoval class class TestDeadCodeRemoval L155–170
test_assert_not_symlink_in_load_stash method method test_assert_not_symlink_in_load_stash L160–162
test_fsync_in_save_stash method method test_fsync_in_save_stash L164–166
test_no_read_branch_wrapper method method test_no_read_branch_wrapper L156–158
test_verify_manifest_objects_exists method method test_verify_manifest_objects_exists L168–170
TestDropJsonSchema class class TestDropJsonSchema L279–301
test_drop_empty_to_stderr method method test_drop_empty_to_stderr L298–301
test_drop_schema_complete method method test_drop_schema_complete L282–286
test_drop_snapshot_id_is_sha256 method method test_drop_snapshot_id_is_sha256 L293–296
test_drop_status_is_dropped method method test_drop_status_is_dropped L288–291
TestIndexArg class class TestIndexArg L387–429
_push_n method method _push_n L388–395
test_drop_by_index method method test_drop_by_index L405–410
test_non_integer_to_stderr method method test_non_integer_to_stderr L425–429
test_out_of_range_to_stderr method method test_out_of_range_to_stderr L419–423
test_pop_by_index method method test_pop_by_index L397–403
test_read_by_index method method test_read_by_index L412–417
TestListJsonSchema class class TestListJsonSchema L304–333
test_list_empty_returns_empty_array method method test_list_empty_returns_empty_array L324–327
test_list_files_count_positive method method test_list_files_count_positive L314–317
test_list_message_field_present method method test_list_message_field_present L319–322
test_list_schema_complete method method test_list_schema_complete L307–312
test_list_with_message method method test_list_with_message L329–333
TestObjectIntegrity class class TestObjectIntegrity L432–463
test_apply_with_missing_object_exits_internal_error method method test_apply_with_missing_object_exits_internal_error L451–463
test_pop_with_missing_object_exits_internal_error method method test_pop_with_missing_object_exits_internal_error L433–449
TestPopJsonSchema class class TestPopJsonSchema L254–276
test_pop_empty_to_stderr method method test_pop_empty_to_stderr L273–276
test_pop_schema_complete method method test_pop_schema_complete L257–261
test_pop_stash_size_after_decremented method method test_pop_stash_size_after_decremented L268–271
test_pop_status_is_popped method method test_pop_status_is_popped L263–266
TestPushJsonSchema class class TestPushJsonSchema L212–251
test_files_count_positive method method test_files_count_positive L226–229
test_message_default_null method method test_message_default_null L231–234
test_message_with_flag method method test_message_with_flag L236–239
test_nothing_to_stash_schema_complete method method test_nothing_to_stash_schema_complete L241–251
test_stash_schema_complete method method test_stash_schema_complete L215–219
test_status_is_stashed method method test_status_is_stashed L221–224
TestReadJsonSchema class class TestReadJsonSchema L336–354
test_read_empty_to_stderr method method test_read_empty_to_stderr L351–354
test_read_files_is_list_of_strings method method test_read_files_is_list_of_strings L345–349
test_read_schema_complete method method test_read_schema_complete L339–343
TestRegisterFlags class class TestRegisterFlags L110–152
_parse method method _parse L111–116
test_apply_index_arg method method test_apply_index_arg L150–152
test_drop_index_arg method method test_drop_index_arg L142–144
test_format_json_shorthand method method test_format_json_shorthand L130–132
test_message_default_none method method test_message_default_none L126–128
test_message_long method method test_message_long L122–124
test_message_short method method test_message_short L118–120
test_pop_index_arg method method test_pop_index_arg L134–136
test_pop_index_default_none method method test_pop_index_default_none L138–140
test_read_index_arg method method test_read_index_arg L146–148
TestResolveIndex class class TestResolveIndex L173–205
_entries method method _entries L174–182
test_default_returns_0 method method test_default_returns_0 L184–186
test_explicit_index method method test_explicit_index L188–190
test_negative_raises method method test_negative_raises L197–200
test_non_integer_raises method method test_non_integer_raises L202–205
test_out_of_range_raises method method test_out_of_range_raises L192–195
TestRoundTrips class class TestRoundTrips L470–519
test_message_survives_round_trip method method test_message_survives_round_trip L503–507
test_nothing_to_stash_does_not_push method method test_nothing_to_stash_does_not_push L515–519
test_push_apply_apply_idempotent method method test_push_apply_apply_idempotent L479–485
test_push_drop_removes_entry method method test_push_drop_removes_entry L487–491
test_push_pop_restores_state method method test_push_pop_restores_state L471–477
test_stash_persists_across_invocations method method test_stash_persists_across_invocations L509–513
test_stash_stack_is_lifo method method test_stash_stack_is_lifo L493–501
TestSecurity class class TestSecurity L526–593
test_ansi_in_branch_sanitized method method test_ansi_in_branch_sanitized L527–544
test_ansi_in_file_paths_sanitized_in_show method method test_ansi_in_file_paths_sanitized_in_show L552–560
test_ansi_in_message_sanitized method method test_ansi_in_message_sanitized L546–550
test_error_messages_in_stderr method method test_error_messages_in_stderr L586–593
test_invalid_format_to_stderr method method test_invalid_format_to_stderr L576–579
test_pop_invalid_format_to_stderr method method test_pop_invalid_format_to_stderr L581–584
test_symlink_stash_returns_empty_stack method method test_symlink_stash_returns_empty_stack L563–574
TestStashApplyExtended class class TestStashApplyExtended L1055–1197
test_apply_by_index method method test_apply_by_index L1087–1096
test_apply_default_format_is_text method method test_apply_default_format_is_text L1147–1153
test_apply_description_in_help method method test_apply_description_in_help L1183–1186
test_apply_empty_exits_1 method method test_apply_empty_exits_1 L1155–1157
test_apply_j_alias method method test_apply_j_alias L1058–1063
test_apply_json_branch_field method method test_apply_json_branch_field L1120–1122
test_apply_json_empty_error_schema method method test_apply_json_empty_error_schema L1167–1174
test_apply_json_files_count_positive method method test_apply_json_files_count_positive L1116–1118
test_apply_json_message_null_when_none method method test_apply_json_message_null_when_none L1102–1104
test_apply_json_message_when_annotated method method test_apply_json_message_when_annotated L1106–1109
test_apply_json_snapshot_id_is_sha256 method method test_apply_json_snapshot_id_is_sha256 L1111–1114
test_apply_json_stashed_at_is_iso8601 method method test_apply_json_stashed_at_is_iso8601 L1124–1128
test_apply_json_status_is_applied method method test_apply_json_status_is_applied L1098–1100
test_apply_non_integer_index_exits_1 method method test_apply_non_integer_index_exits_1 L1163–1165
test_apply_out_of_range_exits_1 method method test_apply_out_of_range_exits_1 L1159–1161
test_apply_outside_repo_exits_2 method method test_apply_outside_repo_exits_2 L1188–1192
test_apply_preserves_all_entries method method test_apply_preserves_all_entries L1065–1073
test_apply_restores_file_content method method test_apply_restores_file_content L1080–1085
test_apply_schema_complete method method test_apply_schema_complete L1194–1197
test_apply_stash_size_unchanged method method test_apply_stash_size_unchanged L1075–1078
test_apply_text_contains_annotation method method test_apply_text_contains_annotation L1142–1145
test_apply_text_contains_branch method method test_apply_text_contains_branch L1130–1132
test_apply_text_contains_stash_at method method test_apply_text_contains_stash_at L1134–1136
test_apply_text_says_preserved method method test_apply_text_says_preserved L1138–1140
test_apply_twice_idempotent_stash_size method method test_apply_twice_idempotent_stash_size L1176–1181
TestStashApplySecurity class class TestStashApplySecurity L1204–1263
test_ansi_in_branch_sanitized method method test_ansi_in_branch_sanitized L1207–1214
test_ansi_in_message_sanitized method method test_ansi_in_message_sanitized L1216–1219
test_apply_does_not_modify_stash_on_success method method test_apply_does_not_modify_stash_on_success L1249–1255
test_invalid_format_exits_1 method method test_invalid_format_exits_1 L1221–1224
test_large_index_rejected method method test_large_index_rejected L1257–1259
test_missing_object_exits_3 method method test_missing_object_exits_3 L1239–1247
test_missing_object_listed_in_stderr method method test_missing_object_listed_in_stderr L1226–1237
test_negative_index_rejected method method test_negative_index_rejected L1261–1263
TestStashApplyStress class class TestStashApplyStress L1270–1356
test_apply_concurrent_isolated_repos method method test_apply_concurrent_isolated_repos L1315–1356
test_apply_performance_large_stash method method test_apply_performance_large_stash L1274–1290
test_apply_repeated_idempotent method method test_apply_repeated_idempotent L1293–1312
TestStashDropExtended class class TestStashDropExtended L1899–2031
test_drop_branch_field method method test_drop_branch_field L1962–1964
test_drop_by_index method method test_drop_by_index L1941–1950
test_drop_default_is_text method method test_drop_default_is_text L1979–1985
test_drop_description_in_help method method test_drop_description_in_help L2014–2017
test_drop_does_not_restore_workdir method method test_drop_does_not_restore_workdir L1987–1991
test_drop_empty_exits_1 method method test_drop_empty_exits_1 L1993–1995
test_drop_empty_json_error_schema method method test_drop_empty_json_error_schema L2005–2012
test_drop_index_zero_explicit method method test_drop_index_zero_explicit L2025–2027
test_drop_j_alias method method test_drop_j_alias L1900–1903
test_drop_last_entry_leaves_empty method method test_drop_last_entry_leaves_empty L1952–1955
test_drop_message_null_when_none method method test_drop_message_null_when_none L1916–1918
test_drop_message_when_annotated method method test_drop_message_when_annotated L1920–1923
test_drop_non_integer_exits_1 method method test_drop_non_integer_exits_1 L2001–2003
test_drop_out_of_range_exits_1 method method test_drop_out_of_range_exits_1 L1997–1999
test_drop_outside_repo_exits_2 method method test_drop_outside_repo_exits_2 L2019–2023
test_drop_removes_entry_from_disk method method test_drop_removes_entry_from_disk L1932–1939
test_drop_schema_complete method method test_drop_schema_complete L1905–1908
test_drop_snapshot_id_sha256 method method test_drop_snapshot_id_sha256 L1957–1960
test_drop_stash_size_after_zero_when_last method method test_drop_stash_size_after_zero_when_last L2029–2031
test_drop_stash_size_decrements method method test_drop_stash_size_decrements L1925–1930
test_drop_stashed_at_in_json method method test_drop_stashed_at_in_json L1910–1914
test_drop_text_shows_annotation method method test_drop_text_shows_annotation L1974–1977
test_drop_text_shows_branch method method test_drop_text_shows_branch L1970–1972
test_drop_text_shows_index method method test_drop_text_shows_index L1966–1968
TestStashDropSecurity class class TestStashDropSecurity L2038–2079
test_ansi_in_branch_sanitized method method test_ansi_in_branch_sanitized L2039–2046
test_ansi_in_message_sanitized method method test_ansi_in_message_sanitized L2048–2051
test_drop_does_not_leave_partial_on_crash method method test_drop_does_not_leave_partial_on_crash L2071–2079
test_error_to_stderr method method test_error_to_stderr L2066–2069
test_invalid_format_exits_1 method method test_invalid_format_exits_1 L2053–2056
test_large_index_rejected method method test_large_index_rejected L2058–2060
test_negative_index_no_crash method method test_negative_index_no_crash L2062–2064
TestStashDropStress class class TestStashDropStress L2086–2167
test_drop_all_sequential method method test_drop_all_sequential L2088–2107
test_drop_concurrent_isolated_repos method method test_drop_concurrent_isolated_repos L2129–2167
test_drop_performance_large_stash method method test_drop_performance_large_stash L2110–2126
TestStashListExtended class class TestStashListExtended L1635–1782
test_list_after_apply_unchanged method method test_list_after_apply_unchanged L1776–1782
test_list_after_drop_decrements method method test_list_after_drop_decrements L1768–1774
test_list_after_pop_decrements method method test_list_after_pop_decrements L1760–1766
test_list_branch_field method method test_list_branch_field L1703–1705
test_list_count_matches_pushes method method test_list_count_matches_pushes L1734–1739
test_list_default_is_text method method test_list_default_is_text L1720–1726
test_list_description_in_help method method test_list_description_in_help L1741–1744
test_list_does_not_modify_stash_json method method test_list_does_not_modify_stash_json L1728–1732
test_list_empty_exits_0 method method test_list_empty_exits_0 L1641–1642
test_list_empty_json_is_empty_array method method test_list_empty_json_is_empty_array L1644–1646
test_list_empty_text_message method method test_list_empty_text_message L1648–1650
test_list_files_count_accurate method method test_list_files_count_accurate L1676–1681
test_list_index_zero_based method method test_list_index_zero_based L1659–1664
test_list_indices_contiguous method method test_list_indices_contiguous L1752–1758
test_list_j_alias method method test_list_j_alias L1636–1639
test_list_lifo_order method method test_list_lifo_order L1666–1674
test_list_message_null_when_none method method test_list_message_null_when_none L1683–1685
test_list_message_when_annotated method method test_list_message_when_annotated L1687–1690
test_list_outside_repo_exits_2 method method test_list_outside_repo_exits_2 L1746–1750
test_list_schema_complete method method test_list_schema_complete L1652–1657
test_list_snapshot_id_sha256 method method test_list_snapshot_id_sha256 L1692–1695
test_list_stashed_at_iso8601 method method test_list_stashed_at_iso8601 L1697–1701
test_list_text_shows_annotation method method test_list_text_shows_annotation L1715–1718
test_list_text_shows_branch method method test_list_text_shows_branch L1711–1713
test_list_text_stash_at_notation method method test_list_text_stash_at_notation L1707–1709
TestStashListSecurity class class TestStashListSecurity L1789–1843
test_ansi_in_branch_sanitized method method test_ansi_in_branch_sanitized L1790–1797
test_ansi_in_message_sanitized method method test_ansi_in_message_sanitized L1799–1802
test_ansi_in_timestamp_sanitized method method test_ansi_in_timestamp_sanitized L1804–1811
test_invalid_format_exits_1 method method test_invalid_format_exits_1 L1813–1816
test_malformed_stash_json_empty_list method method test_malformed_stash_json_empty_list L1824–1828
test_oversized_stash_json_empty_list method method test_oversized_stash_json_empty_list L1830–1834
test_read_only_no_side_effects method method test_read_only_no_side_effects L1818–1822
test_symlink_stash_json_empty_list method method test_symlink_stash_json_empty_list L1837–1843
TestStashListStress class class TestStashListStress L1850–1892
test_list_performance_50_entries method method test_list_performance_50_entries L1852–1868
test_list_push_pop_count_accurate method method test_list_push_pop_count_accurate L1879–1892
test_list_repeated_deterministic method method test_list_repeated_deterministic L1871–1876
TestStashPopExtended class class TestStashPopExtended L718–874
test_pop_branch_field_matches_current_branch method method test_pop_branch_field_matches_current_branch L852–855
test_pop_decrements_stash_size method method test_pop_decrements_stash_size L728–738
test_pop_default_format_is_text method method test_pop_default_format_is_text L814–822
test_pop_description_in_help method method test_pop_description_in_help L864–868
test_pop_error_no_entries_exits_1 method method test_pop_error_no_entries_exits_1 L829–831
test_pop_error_non_integer_index_exits_1 method method test_pop_error_non_integer_index_exits_1 L837–839
test_pop_error_out_of_range_exits_1 method method test_pop_error_out_of_range_exits_1 L833–835
test_pop_index_zero_explicit method method test_pop_index_zero_explicit L824–827
test_pop_j_alias method method test_pop_j_alias L721–726
test_pop_json_empty_error_schema method method test_pop_json_empty_error_schema L841–850
test_pop_json_files_count_positive method method test_pop_json_files_count_positive L794–797
test_pop_json_message_null_when_none method method test_pop_json_message_null_when_none L765–768
test_pop_json_message_present_when_annotated method method test_pop_json_message_present_when_annotated L770–774
test_pop_json_snapshot_id_is_sha256 method method test_pop_json_snapshot_id_is_sha256 L789–792
test_pop_json_stash_size_after_non_negative method method test_pop_json_stash_size_after_non_negative L799–802
test_pop_last_entry_leaves_empty_stack method method test_pop_last_entry_leaves_empty_stack L752–755
test_pop_outside_repo_exits_2 method method test_pop_outside_repo_exits_2 L870–874
test_pop_removes_entry_from_disk method method test_pop_removes_entry_from_disk L804–812
test_pop_removes_specific_index method method test_pop_removes_specific_index L740–750
test_pop_restores_file_content method method test_pop_restores_file_content L757–763
test_pop_stashed_at_is_iso8601 method method test_pop_stashed_at_is_iso8601 L857–862
test_pop_text_output_contains_annotation method method test_pop_text_output_contains_annotation L784–787
test_pop_text_output_contains_branch method method test_pop_text_output_contains_branch L776–778
test_pop_text_output_contains_stash_at method method test_pop_text_output_contains_stash_at L780–782
TestStashPopSecurity class class TestStashPopSecurity L881–945
test_ansi_in_branch_sanitized_in_pop_text method method test_ansi_in_branch_sanitized_in_pop_text L884–892
test_ansi_in_message_sanitized_in_pop_text method method test_ansi_in_message_sanitized_in_pop_text L894–898
test_invalid_format_exits_1_to_stderr method method test_invalid_format_exits_1_to_stderr L900–903
test_missing_object_error_to_stderr method method test_missing_object_error_to_stderr L905–916
test_pop_index_with_whitespace_rejected method method test_pop_index_with_whitespace_rejected L923–928
test_pop_index_zero_string_not_special method method test_pop_index_zero_string_not_special L918–921
test_pop_large_index_bounded method method test_pop_large_index_bounded L930–933
test_pop_negative_index_rejected method method test_pop_negative_index_rejected L935–945
TestStashPopStress class class TestStashPopStress L952–1048
test_pop_all_entries_sequential method method test_pop_all_entries_sequential L975–996
test_pop_concurrent_isolated_repos method method test_pop_concurrent_isolated_repos L999–1048
test_pop_performance_large_stash method method test_pop_performance_large_stash L956–972
TestStashReadExtended class class TestStashReadExtended L1363–1509
test_read_branch_field method method test_read_branch_field L1442–1444
test_read_by_index method method test_read_by_index L1398–1404
test_read_default_is_text method method test_read_default_is_text L1462–1468
test_read_description_in_help method method test_read_description_in_help L1489–1492
test_read_does_not_modify_stash_json method method test_read_does_not_modify_stash_json L1416–1420
test_read_does_not_modify_workdir method method test_read_does_not_modify_workdir L1410–1414
test_read_empty_exits_1 method method test_read_empty_exits_1 L1470–1472
test_read_empty_json_error_schema method method test_read_empty_json_error_schema L1482–1487
test_read_files_count_matches_files method method test_read_files_count_matches_files L1390–1396
test_read_files_count_zero_for_empty_manifest method method test_read_files_count_zero_for_empty_manifest L1500–1509
test_read_files_is_sorted method method test_read_files_is_sorted L1382–1388
test_read_index_zero_default method method test_read_index_zero_default L1406–1408
test_read_j_alias method method test_read_j_alias L1366–1369
test_read_message_null_when_none method method test_read_message_null_when_none L1422–1424
test_read_message_when_annotated method method test_read_message_when_annotated L1426–1429
test_read_non_integer_exits_1 method method test_read_non_integer_exits_1 L1478–1480
test_read_out_of_range_exits_1 method method test_read_out_of_range_exits_1 L1474–1476
test_read_outside_repo_exits_2 method method test_read_outside_repo_exits_2 L1494–1498
test_read_schema_complete method method test_read_schema_complete L1377–1380
test_read_schema_includes_files_count method method test_read_schema_includes_files_count L1371–1375
test_read_snapshot_id_sha256 method method test_read_snapshot_id_sha256 L1431–1434
test_read_stashed_at_iso8601 method method test_read_stashed_at_iso8601 L1436–1440
test_read_text_annotation method method test_read_text_annotation L1457–1460
test_read_text_header method method test_read_text_header L1446–1449
test_read_text_lists_files method method test_read_text_lists_files L1451–1455
TestStashReadSecurity class class TestStashReadSecurity L1516–1570
test_ansi_in_branch_sanitized method method test_ansi_in_branch_sanitized L1519–1526
test_ansi_in_file_path_sanitized method method test_ansi_in_file_path_sanitized L1533–1540
test_ansi_in_message_sanitized method method test_ansi_in_message_sanitized L1528–1531
test_invalid_format_exits_1 method method test_invalid_format_exits_1 L1542–1545
test_large_index_rejected method method test_large_index_rejected L1547–1549
test_negative_index_no_crash method method test_negative_index_no_crash L1551–1553
test_path_traversal_in_manifest_no_crash method method test_path_traversal_in_manifest_no_crash L1563–1570
test_read_only_no_side_effects method method test_read_only_no_side_effects L1555–1561
TestStashReadStress class class TestStashReadStress L1577–1628
test_read_all_indices_on_50_entry_stack method method test_read_all_indices_on_50_entry_stack L1602–1618
test_read_large_manifest method method test_read_large_manifest L1581–1599
test_read_repeated_deterministic method method test_read_repeated_deterministic L1621–1628
TestStress class class TestStress L600–711
test_concurrent_stash_isolated_repos method method test_concurrent_stash_isolated_repos L651–692
test_large_stash_stack method method test_large_stash_stack L625–648
test_read_performance method method test_read_performance L695–711
test_sequential_push_pop_cycles method method test_sequential_push_pop_cycles L602–622
_env function function _env L80–81
cli variable variable cli L72–72
CliRunner import import CliRunner L70–70
TYPE_CHECKING import import TYPE_CHECKING L63–63
annotations import import annotations L53–53
argparse import import argparse L55–55
inspect import import inspect L56–56
json import import json L57–57
os import import os L58–58
pathlib import import pathlib L59–59
pytest import import pytest L65–65
tempfile import import tempfile L60–60
threading import import threading L61–61
time import import time L62–62
repo function function repo L85–95
runner variable variable runner L73–73
stashed_repo function function stashed_repo L99–103
~ tests/test_cli_coverage_gaps.py .py 5 symbols added, 5 symbols removed
TestStashGaps class class TestStashGaps L226–257
test_stash_drop_empty_errors method method test_stash_drop_empty_errors L255–257
test_stash_drop_removes_entry method method test_stash_drop_removes_entry L238–248
test_stash_pop_empty_errors method method test_stash_pop_empty_errors L250–253
test_stash_pop_restores_files method method test_stash_pop_restores_files L227–236
+ TestShelfGaps class class TestShelfGaps L226–256
+ test_shelf_drop_empty_errors method method test_shelf_drop_empty_errors L254–256
+ test_shelf_drop_removes_entry method method test_shelf_drop_removes_entry L238–248
+ test_shelf_pop_empty_errors method method test_shelf_pop_empty_errors L250–252
+ test_shelf_pop_restores_files method method test_shelf_pop_restores_files L227–236
~ tests/test_cli_plugin_dispatch.py .py 3 symbols added, 3 symbols removed
TestStashDispatch class class TestStashDispatch L434–469
test_stash_calls_plugin_snapshot method method test_stash_calls_plugin_snapshot L435–448
test_stash_snapshot_argument_is_workdir_path method method test_stash_snapshot_argument_is_workdir_path L450–469
+ TestShelfDispatch class class TestShelfDispatch L434–469
+ test_shelf_calls_plugin_snapshot method method test_shelf_calls_plugin_snapshot L435–448
+ test_shelf_snapshot_argument_is_workdir_path method method test_shelf_snapshot_argument_is_workdir_path L450–469
~ tests/test_cli_workflow.py .py 2 symbols added, 2 symbols removed
TestStash class class TestStash L415–425
test_stash_and_pop method method test_stash_and_pop L416–425
+ TestShelf class class TestShelf L415–425
+ test_shelf_save_and_pop method method test_shelf_save_and_pop L416–425
~ tests/test_cmd_diff.py .py 7 symbols added, 7 symbols removed
TestDiffStash class class TestDiffStash L557–602
test_stash_flag_json_schema method method test_stash_flag_json_schema L568–577
test_stash_flag_no_stash_exits_1 method method test_stash_flag_no_stash_exits_1 L579–582
test_stash_flag_shows_stashed_changes method method test_stash_flag_shows_stashed_changes L560–566
test_stash_flag_with_index method method test_stash_flag_with_index L584–594
test_stash_mutually_exclusive_with_staged method method test_stash_mutually_exclusive_with_staged L596–598
test_stash_mutually_exclusive_with_unstaged method method test_stash_mutually_exclusive_with_unstaged L600–602
+ TestDiffShelf class class TestDiffShelf L557–598
+ test_shelf_flag_json_schema method method test_shelf_flag_json_schema L567–576
+ test_shelf_flag_no_shelf_exits_1 method method test_shelf_flag_no_shelf_exits_1 L578–580
+ test_shelf_flag_shows_shelved_changes method method test_shelf_flag_shows_shelved_changes L560–565
+ test_shelf_flag_with_index method method test_shelf_flag_with_index L582–590
+ test_shelf_mutually_exclusive_with_staged method method test_shelf_mutually_exclusive_with_staged L592–594
+ test_shelf_mutually_exclusive_with_unstaged method method test_shelf_mutually_exclusive_with_unstaged L596–598
~ tests/test_core_workspace.py .py 4 symbols added, 4 symbols removed, 2 symbols modified
test_stash_count_does_not_spawn_subprocess function function test_stash_count_does_not_spawn_subprocess L212–224
test_stash_count_read_from_file function function test_stash_count_read_from_file L227–241
test_stash_count_zero_when_file_absent function function test_stash_count_zero_when_file_absent L253–260
test_stash_count_zero_when_file_empty function function test_stash_count_zero_when_file_empty L244–250
+ test_shelf_count_does_not_spawn_subprocess function function test_shelf_count_does_not_spawn_subprocess L212–224
+ test_shelf_count_read_from_file function function test_shelf_count_read_from_file L227–241
+ test_shelf_count_zero_when_file_absent function function test_shelf_count_zero_when_file_absent L253–260
+ test_shelf_count_zero_when_file_empty function function test_shelf_count_zero_when_file_empty L244–250
~ tests/test_porcelain_security.py .py 3 symbols added, 3 symbols removed
TestStashAtomicWrite class class TestStashAtomicWrite L231–254
test_no_temp_files_after_save method method test_no_temp_files_after_save L232–243
test_stash_file_contents_after_atomic_write method method test_stash_file_contents_after_atomic_write L245–254
+ TestShelfAtomicWrite class class TestShelfAtomicWrite L231–261
+ test_no_temp_files_after_save method method test_no_temp_files_after_save L232–245
+ test_shelf_file_contents_after_atomic_write method method test_shelf_file_contents_after_atomic_write L247–261
~ tests/test_stress_e2e_workflow.py .py 2 symbols added, 2 symbols removed
TestStash class class TestStash L139–149
test_stash_and_pop method method test_stash_and_pop L140–149
+ TestShelf class class TestShelf L139–149
+ test_shelf_save_and_pop method method test_shelf_save_and_pop L140–149

0 comments

No comments yet. Be the first to start the discussion.

To add a comment, use the Muse CLI: muse hub commit comment sha256:3fc11b67abf3ab745d7ade48b311289cf3e9a44dafaea44d507e73e24ced5bba --body "your comment"