labnotes 0.2.4__tar.gz → 0.2.5__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.
- {labnotes-0.2.4 → labnotes-0.2.5}/PKG-INFO +1 -1
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/project_snapshot.py +3 -1
- labnotes-0.2.5/src/labnotes/runner/untracked_diff.py +39 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/.gitignore +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/CHANGELOG.md +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/MIGRATIONS.md +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/README.md +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/pyproject.toml +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/__init__.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/__main__.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/asset_url.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/check_counts.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/cli.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/compose_experiment.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/context.md +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/context_guide.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/count_groups.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/count_runs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/create_app.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/create_experiment.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/create_note.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/data_html.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/default_config_text.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/default_counts.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/drain_watch.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/experiment_notes.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/experiment_runs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/experiments.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/file_changes.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/format_duration.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/format_started.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/format_value.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/get_state.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/grid_cell.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/group_runs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/init.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/invocation_started.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/is_non_negative_int.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/is_non_negative_number.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/is_positive_int.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/latest_log.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/list_experiments.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/list_runs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/load_config.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/load_experiment.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/load_run.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/log.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/log_path.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/memory_interval.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/models.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/modes.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/nests_runs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/note_path.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/notebook_kernel.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/output_html.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/parse_run_view.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/parse_subset.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/pivot_runs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/print_rows.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/python_blocks.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/read_config.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/read_path.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/render_markdown.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/retries.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/run_output.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/__init__.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/cgroup_memory.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/check_args.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/check_hook_placeholders.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/check_subset.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/claim_run.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/command_flags.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/container_cgroup.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/container_memory.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/continue_run.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/describe_event.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/docker_output.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/execute_run.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/exit_signal.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/fill_dirs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/fill_experiment_env.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/finalize_lost_runs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/first_invocation.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/flag_name.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/group_args.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/in_subset.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/invocation_hook.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/invocation_meta.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/new_param_run_id.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/new_run_id.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/new_stamped_run_id.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/override_flags.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/param_args.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/param_grid.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/param_run_name.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/placeholders.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/plan_runs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/prepare_experiment.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/read_experiment_config.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/record_memory.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/run_experiment.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/run_folder.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/run_git.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/run_headless.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/run_locked.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/runs_parent.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/shell_command.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/signal_tree.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/start_experiment.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/stop_then_kill.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/wait_for_tree.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runner/write_run_json.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/runs_view_command.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/save_conflict_copy.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/save_note.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/saved_outputs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/serve_app.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/server.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/set_state.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/shared_params.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/sort_href.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/sql_quote.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/state_path.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/elapsed.js +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/experiment.js +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/labnotes.css +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/local-time.js +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/new-note.js +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/note-edit.js +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/note-editor.js +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/row-link.js +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/run-cell.js +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/run-output.js +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/static/view-toggle.js +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/summarize_config.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/__init__.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/experiment_rows.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/experiment_run_ids.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/experiment_toml.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/experiments_ddl.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/file_prefix.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/file_text.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/iso_time.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/list_experiment_runs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/list_resumable_runs.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/note_text.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/open_tables.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/path_glob.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/path_pattern.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/read_blocks.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/read_experiment.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/read_file.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/read_log.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/read_memory.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/read_run.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/read_run_file.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/runs_columns.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tables/summarize_experiments.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/templates/base.html +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/templates/editor_imports.html +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/templates/experiment.html +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/templates/index.html +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/templates/note.html +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/templates/run.html +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/__init__.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/browse_app.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/browse_tui.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/check_view_response.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/config.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/dim.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/experiment_screen.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/experiments_screen.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/fill_table.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/format_cell.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/format_elapsed.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/group_cells.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/invocation_columns.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/invocation_rows.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/leave_prompt.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/log_block.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/log_blocks.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/native_rows.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/reload_on_change.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/run_app.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/run_cells.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/run_output.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/run_screen.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/run_tui.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/runs_table.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/runs_view.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/stopped_title.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/view_column.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/tui/view_process.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/utils/__init__.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/utils/format_bytes.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/utils/process_alive.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/utils/run_usage.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/utils/tree_rss.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/utils/tree_usage.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/view/__init__.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/view/answer.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/view/build.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/view/respond.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/view/serve.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/wait_for_note.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/src/labnotes/watch_rows.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/testing-conventions.toml +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/tests/conftest.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/tests/e2e/conftest.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/tests/integration/conftest.py +0 -0
- {labnotes-0.2.4 → labnotes-0.2.5}/uv.lock +0 -0
|
@@ -11,6 +11,8 @@ from pathlib import Path
|
|
|
11
11
|
from tempfile import TemporaryDirectory
|
|
12
12
|
from types import FrameType
|
|
13
13
|
|
|
14
|
+
from labnotes.runner.untracked_diff import untracked_diff
|
|
15
|
+
|
|
14
16
|
|
|
15
17
|
@dataclass
|
|
16
18
|
class ProjectSnapshot:
|
|
@@ -37,7 +39,7 @@ def project_snapshot(root: Path) -> Iterator[ProjectSnapshot]:
|
|
|
37
39
|
sha = git(root, "rev-parse", "HEAD").decode("ascii").strip()
|
|
38
40
|
repo_root = Path(git(root, "rev-parse", "--show-toplevel").decode().strip())
|
|
39
41
|
project_prefix = root.resolve().relative_to(repo_root.resolve())
|
|
40
|
-
diff = git(repo_root, "diff", "HEAD")
|
|
42
|
+
diff = git(repo_root, "diff", "HEAD") + untracked_diff(repo_root)
|
|
41
43
|
except (OSError, subprocess.SubprocessError):
|
|
42
44
|
logging.warning("Project has no readable Git HEAD; running from the live tree")
|
|
43
45
|
yield ProjectSnapshot(root)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import subprocess
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
from tempfile import TemporaryDirectory
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def untracked_diff(repo_root: Path) -> bytes:
|
|
8
|
+
"""Patch adding every untracked, non-ignored file, as the snapshot copies them."""
|
|
9
|
+
listing = subprocess.check_output(
|
|
10
|
+
["git", "ls-files", "-o", "--exclude-standard", "-z"],
|
|
11
|
+
cwd=repo_root,
|
|
12
|
+
stderr=subprocess.DEVNULL,
|
|
13
|
+
)
|
|
14
|
+
# A trailing slash marks an untracked nested repository, which git cannot add.
|
|
15
|
+
paths = [path for path in listing.split(b"\0") if path and not path.endswith(b"/")]
|
|
16
|
+
if not paths:
|
|
17
|
+
return b""
|
|
18
|
+
with TemporaryDirectory(prefix="labnotes-index-") as directory:
|
|
19
|
+
# A throwaway index keeps the user's real index untouched.
|
|
20
|
+
env = {**os.environ, "GIT_INDEX_FILE": str(Path(directory) / "index")}
|
|
21
|
+
subprocess.run(
|
|
22
|
+
["git", "add", "--intent-to-add", "--pathspec-from-file=-"]
|
|
23
|
+
+ ["--pathspec-file-nul"],
|
|
24
|
+
cwd=repo_root,
|
|
25
|
+
env=env,
|
|
26
|
+
input=b"\0".join(paths),
|
|
27
|
+
stdout=subprocess.DEVNULL,
|
|
28
|
+
stderr=subprocess.DEVNULL,
|
|
29
|
+
check=True,
|
|
30
|
+
)
|
|
31
|
+
# Files over 1 MiB show as binary so stray data cannot bloat every patch.
|
|
32
|
+
return subprocess.run(
|
|
33
|
+
["git", "-c", "core.bigFileThreshold=1m", "diff"],
|
|
34
|
+
cwd=repo_root,
|
|
35
|
+
env=env,
|
|
36
|
+
stdout=subprocess.PIPE,
|
|
37
|
+
stderr=subprocess.DEVNULL,
|
|
38
|
+
check=True,
|
|
39
|
+
).stdout
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|