feat!: add Git version control for editing projects - #2164
Merged
Conversation
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.
Description
Beutl.Editor.VersionControl.main; review remediation is isolated in signed follow-up commits.Frozen scope
Included here:
Explicitly excluded from this PR:
Already-created extracted PRs target
maindirectly and do not depend on this PR:Integration order (direct-to-main, not stacked)
Before this PR is merged, the output/AgentHost safety prerequisites must land independently on
main, and this branch must then be rebased onto that updatedmain:This ordering keeps every PR based directly on
main; there is no stacked-PR dependency chain.Affected areas
Beutl.Engine(rendering / scene / track)Beutl.ProjectSystem(project / document persistence)Beutl.Editor,Beutl.Editor.Components,Beutl.Controls)Beutl.Extensibility(plugin-facing version-control query seam only)Beutl.NodeGraph(node editor)Beutl.FFmpegIpc/Beutl.FFmpegWorker(media IPC boundary)Beutl.Api(server API client)Breaking changes
Beutl.Corenow preserves loaded projectappVersion/minAppVersionuntil persisted content is explicitly migrated. Its sharedJsonHelper/CoreSerializeroptions use LF line endings for projects, configuration, editor state, and every other consumer, so Windows users may observe one-time newline diffs.No public output, context-command, canonical-path, package, AgentHost, proxy, or application-shutdown API contract is changed by this PR. A window close is canceled when the mandatory pre-close project save fails; the broader asynchronous shutdown redesign remains excluded.
The repository uses a blank squash-merge body by default. The merger must explicitly supply this trailer in the final squash commit body:
The exact footer is repeated as the final paragraph of this PR body and must be used unchanged for the squash commit.
Test plan
dotnet build Beutl.slnx -c Debug --no-restore— passed on the final tree, 0 errorsGitCliVersionControlServicecommit/history regressions — 72 passedVersionControlSnapshotScopeTests— 19 passedVersionControlRestoreTestsreview regressions — 5 passedBeutl.HeadlessUITests.VersionControlSaveTests— 16 passedRepositoryWatcherTests— 44 passedBeutl.PublicApiContractTests— 209 passeddotnet format --verify-no-changeson the final review delta — passedgit diff --check— passedFixed issues / References
docs/specs/005-project-git-versioning/BREAKING-CHANGE: Beutl.Core now preserves loaded project appVersion and minAppVersion until explicit migration, and its shared JsonHelper and CoreSerializer output uses LF line endings for projects, configuration, editor state, and every other consumer. Windows consumers may observe one-time newline diffs.