[3/n] [dropshot-api-manager] handle unparseable git ref files gracefully#40
Conversation
Created using spr 1.3.6-beta.1
There was a problem hiding this comment.
Pull request overview
This PR enhances the dropshot-api-manager to gracefully handle unparseable or malformed git ref files, which can occur due to merge conflicts, cross-platform formatting differences, or file corruption. Previously, such issues would block the tool from running.
Key changes:
- Adds
load_unparseable()method to track malformed files for regeneration instead of hard errors - Defines canonical git ref format (forward slashes, single trailing newline) with automatic detection and rewriting via
GitRef::needs_rewrite() - Refactors git ref/JSON filename conversions into dedicated
ApiSpecFileNamemethods
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| crates/integration-tests/tests/integration/git_ref.rs | Adds comprehensive integration tests for unparseable git refs (conflict markers, non-canonical format, empty files, invalid commit hashes) |
| crates/dropshot-api-manager/src/spec_files_local.rs | Updates git ref loading to detect unparseable/non-canonical files and mark them for regeneration |
| crates/dropshot-api-manager/src/spec_files_generic.rs | Implements load_unparseable() method to track unparseable files as warnings rather than errors |
| crates/dropshot-api-manager/src/resolved.rs | Refactors to use new ApiSpecFileName methods for git ref/JSON filename conversions and canonical format writing |
| crates/dropshot-api-manager/src/git.rs | Adds to_file_contents() for canonical format output, needs_rewrite() for format validation, normalizes backslashes in parsing/display, and adds new error variants |
| crates/dropshot-api-manager-types/src/validation.rs | Adds filename conversion methods: to_git_ref_filename(), to_json_filename(), git_ref_basename(), json_basename() |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Created using spr 1.3.6-beta.1
Created using spr 1.3.6-beta.1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Git ref files can become unparseable due to merge conflicts (conflict
markers), non-canonical formatting (backslashes on Windows, missing
trailing newlines), or corruption. Previously, these would cause errors
that blocked the tool from running.
This commit makes the tool resilient to such issues:
trailing newline. The
GitRef::needs_rewrite()method detects filesthat need normalization.
ensuring cross-platform compatibility.
load_unparseable()to track malformed local files so they canbe regenerated during
generateinstead of blocking with errors.automatically regenerated from blessed content.
Also refactor git ref/JSON filename handling into
ApiSpecFileName:git_ref_basename()/json_basename()for basename conversionto_git_ref_filename()as the inverse ofto_json_filename()This simplifies the Fix execution code in resolved.rs and consolidates
the conversion logic in one place.