mirror of
https://github.com/fluxscape/fluxscape.git
synced 2026-01-13 07:42:54 +01:00
Initial commit
Co-Authored-By: Eric Tuvesson <eric.tuvesson@gmail.com> Co-Authored-By: mikaeltellhed <2311083+mikaeltellhed@users.noreply.github.com> Co-Authored-By: kotte <14197736+mrtamagotchi@users.noreply.github.com> Co-Authored-By: Anders Larsson <64838990+anders-topp@users.noreply.github.com> Co-Authored-By: Johan <4934465+joolsus@users.noreply.github.com> Co-Authored-By: Tore Knudsen <18231882+torekndsn@users.noreply.github.com> Co-Authored-By: victoratndl <99176179+victoratndl@users.noreply.github.com>
This commit is contained in:
52
packages/noodl-git/src/core/show-ref.ts
Normal file
52
packages/noodl-git/src/core/show-ref.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { git } from './client';
|
||||
|
||||
export async function getRefHeads(repositoryDir: string): Promise<Map<string, string>> {
|
||||
const args = ['show-ref', '--heads', '-d'];
|
||||
|
||||
const tags = await git(args, repositoryDir, 'getRefHeads', {
|
||||
successExitCodes: new Set([0, 1]) // when there are no tags, git exits with 1.
|
||||
});
|
||||
|
||||
const tagsArray: Array<[string, string]> = tags.output
|
||||
.toString()
|
||||
.split('\n')
|
||||
.filter((line) => line !== '')
|
||||
.map((line) => {
|
||||
const [commitSha, rawTagName] = line.split(' ');
|
||||
|
||||
// Normalize tag names by removing the leading ref/tags/ and the trailing ^{}.
|
||||
//
|
||||
// git show-ref returns two entries for annotated tags:
|
||||
// deadbeef refs/tags/annotated-tag
|
||||
// de510b99 refs/tags/annotated-tag^{}
|
||||
//
|
||||
// The first entry sha correspond to the blob object of the annotation, while the second
|
||||
// entry corresponds to the actual commit where the tag was created.
|
||||
// By normalizing the tag name we can make sure that the commit sha gets stored in the returned
|
||||
// Map of commits (since git will always print the entry with the commit sha at the end).
|
||||
const headName = rawTagName.replace(/^refs\/heads\//, '').replace(/\^\{\}$/, '');
|
||||
|
||||
return [headName, commitSha];
|
||||
});
|
||||
|
||||
return new Map(tagsArray);
|
||||
}
|
||||
|
||||
export async function getAllTags(repositoryDir: string): Promise<Map<string, string>> {
|
||||
const args = ['show-ref', '-d'];
|
||||
|
||||
const tags = await git(args, repositoryDir, 'getAllTags', {
|
||||
successExitCodes: new Set([0, 1]) // when there are no tags, git exits with 1.
|
||||
});
|
||||
|
||||
const tagsArray: Array<[string, string]> = tags.output
|
||||
.toString()
|
||||
.split('\n')
|
||||
.filter((line) => line !== '')
|
||||
.map((line) => {
|
||||
const [commitSha, rawTagName] = line.split(' ');
|
||||
return [rawTagName, commitSha];
|
||||
});
|
||||
|
||||
return new Map(tagsArray);
|
||||
}
|
||||
Reference in New Issue
Block a user