mirror_pull: parse 'git fetch --porcelain' instead of human readable output #35548
+41
−97
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.
I was surprised to see that the pull mirroring mechanism is trying to parse the human-readable
git fetch
output instead of using the machine-readablegit fetch --porcelain
or an equivalent approach.This change makes the parsing less fragile since the underlying command now has a predictable output format.
I do notice that
git fetch --porcelain
was only added in Git 2.41.0 (~8 months ago?), according to the release notes. So I might need to add a fallback mechanism to use the existingparseRemoteUpdateOutput
if we're using an old git version, with a new feature flag added here?Also, an alternative approach would be to do something like... record the output of
git for-each-ref --format='%(refname) %(objectname)'
before and after thegit fetch
invocation and figure out the differences based on that, but I'm open to suggestions.