Read-only mirror — the public repositories of the Forgejo instance, refreshed every 10 minutes. The live instance (fg.dieschoenewolke.de) is reachable only over the VPN; clone here with https://git.dieschoenewolke.de/git/<owner>/<repo>.git.
summaryrefslogtreecommitdiff
path: root/src/git-source-provider.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/git-source-provider.ts')
-rw-r--r--src/git-source-provider.ts23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts
index bde53bb..89c16b5 100644
--- a/src/git-source-provider.ts
+++ b/src/git-source-provider.ts
@@ -42,7 +42,8 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
git,
settings.repositoryPath,
repositoryUrl,
- settings.clean
+ settings.clean,
+ settings.ref
)
}
@@ -109,8 +110,24 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
// Fetch
core.startGroup('Fetching the repository')
- const refSpec = refHelper.getRefSpec(settings.ref, settings.commit)
- await git.fetch(settings.fetchDepth, refSpec)
+ if (settings.fetchDepth <= 0) {
+ // Fetch all branches and tags
+ let refSpec = refHelper.getRefSpecForAllHistory(
+ settings.ref,
+ settings.commit
+ )
+ await git.fetch(refSpec)
+
+ // When all history is fetched, the ref we're interested in may have moved to a different
+ // commit (push or force push). If so, fetch again with a targeted refspec.
+ if (!(await refHelper.testRef(git, settings.ref, settings.commit))) {
+ refSpec = refHelper.getRefSpec(settings.ref, settings.commit)
+ await git.fetch(refSpec)
+ }
+ } else {
+ const refSpec = refHelper.getRefSpec(settings.ref, settings.commit)
+ await git.fetch(refSpec, settings.fetchDepth)
+ }
core.endGroup()
// Checkout info