2.2 KiB
2.2 KiB
Research: Git Integration Plugin
Unknowns & Clarifications
-
Git Library: Should we use
GitPythonor callgitCLI directly?- Decision: Use
GitPython. - Rationale: It provides a high-level API for Git operations, making it easier to handle branches, commits, and remotes programmatically compared to parsing CLI output.
- Alternatives considered:
pygit2(faster but requires libgit2),subprocess.run(["git", ...])(simple but brittle).
- Decision: Use
-
Git Provider API Integration: How to handle different providers (GitHub, GitLab, Gitea) for connection testing?
- Decision: Use a unified provider interface with provider-specific implementations.
- Rationale: While Git operations are standard, testing connections and potentially creating repositories might require provider-specific REST APIs.
- Alternatives considered: Generic Git clone test (slower, requires local disk space).
-
Superset Export/Import: How to handle the "unpacked" requirement?
- Decision: Use the existing
superset_toollogic or similar to export as ZIP and then unpack to the Git directory. - Rationale: Superset's native export is a ZIP. To fulfill FR-019, we must unpack this ZIP into the repository structure.
- Decision: Use the existing
-
Merge Conflict UI: How to implement "Keep Mine/Theirs" in a web UI?
- Decision: Implement a file-based conflict resolver in the Frontend.
- Rationale: Since the data is YAML, we can show a list of conflicting files and let the user pick the version.
- Alternatives considered: Full 3-way merge UI (too complex for MVP).
Best Practices
- Security: Never store PATs in plain text in logs. Use environment variables or encrypted storage if possible (though SQLite is the current project standard).
- Concurrency: Git operations on the same repository should be serialized to avoid index locks.
- Repository Isolation: Each dashboard gets its own directory/repository to prevent cross-dashboard pollution.
Findings Consolidations
- Decision: Use
GitPythonfor core Git logic. - Decision: Use Provider-specific API clients for connection validation.
- Decision: Unpack Superset exports into
dashboard/,charts/,datasets/,databases/directories.