gg_git
A collection of git helper scripts for repository checks and other utilities.
Test helpers
package:gg_git/gg_git_test_helpers.dart provides helpers that create real
git repositories for tests: initGit, initLocalAndRemoteGit,
addAndCommitSampleFile and friends.
Cached test repos
Building a repository spawns several git processes. When every test's
setUp does this, test suites become slow. The cached variants build a
fixture only once per test file and deliver a fresh filesystem copy per
call — no git processes are spawned for a copy:
setUp(() async {
d = await Directory.systemTemp.createTemp();
await initCachedRepo(
d,
key: 'my_fixture',
build: (repo) async {
await initGit(repo);
await addAndCommitSampleFile(repo);
},
);
});
For a local repository wired to a bare remote use initCachedRepoPair. It
copies both directories together and rewires origin to the copied remote
via git remote set-url — the only git process spawned per copy:
setUp(() async {
(d, dRemote) = await initCachedRepoPair(
key: 'my_pair',
build: (local, remote) async {
await initLocalGit(local);
await initRemoteGit(remote);
await addRemoteToLocal(local: local, remote: remote);
},
);
});
initCachedGit and initCachedLocalAndRemoteGit are cached drop-in
variants of initGit and initLocalAndRemoteGit.
Notes:
- Within one test file a
keymust always map to the same recipe — the first builder wins. Keys starting withgg_git/are reserved. - Template directories live in the system temp directory and are kept for
the lifetime of the test process (similar to the temp directories of
initTestDir). The operating system cleans them up eventually. - Tests own the copies and should delete them in
tearDownas usual.