mirror of
https://github.com/actions/checkout.git
synced 2025-03-31 05:20:06 +02:00
added filter option & tests
This commit is contained in:
parent
96f53100ba
commit
99fc22de1f
7 changed files with 46 additions and 1 deletions
11
.github/workflows/test.yml
vendored
11
.github/workflows/test.yml
vendored
|
@ -72,6 +72,17 @@ jobs:
|
||||||
shell: bash
|
shell: bash
|
||||||
run: __test__/verify-side-by-side.sh
|
run: __test__/verify-side-by-side.sh
|
||||||
|
|
||||||
|
# Filter
|
||||||
|
- name: Fetch filter
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
filter: 'blob:none'
|
||||||
|
path: fetch-filter
|
||||||
|
|
||||||
|
- name: Verify fetch filter
|
||||||
|
run: __test__/verify-fetch-filter.sh
|
||||||
|
|
||||||
|
|
||||||
# Sparse checkout
|
# Sparse checkout
|
||||||
- name: Sparse checkout
|
- name: Sparse checkout
|
||||||
uses: ./
|
uses: ./
|
||||||
|
|
|
@ -79,6 +79,7 @@ describe('input-helper tests', () => {
|
||||||
expect(settings.clean).toBe(true)
|
expect(settings.clean).toBe(true)
|
||||||
expect(settings.commit).toBeTruthy()
|
expect(settings.commit).toBeTruthy()
|
||||||
expect(settings.commit).toBe('1234567890123456789012345678901234567890')
|
expect(settings.commit).toBe('1234567890123456789012345678901234567890')
|
||||||
|
expect(settings.filter).toBe(undefined)
|
||||||
expect(settings.sparseCheckout).toBe(undefined)
|
expect(settings.sparseCheckout).toBe(undefined)
|
||||||
expect(settings.sparseCheckoutConeMode).toBe(true)
|
expect(settings.sparseCheckoutConeMode).toBe(true)
|
||||||
expect(settings.fetchDepth).toBe(1)
|
expect(settings.fetchDepth).toBe(1)
|
||||||
|
|
15
__test__/verify-fetch-filter.sh
Executable file
15
__test__/verify-fetch-filter.sh
Executable file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Verify .git folder
|
||||||
|
if [ ! -d "./fetch-filter/.git" ]; then
|
||||||
|
echo "Expected ./fetch-filter/.git folder to exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verify .git/config contains partialclonefilter
|
||||||
|
|
||||||
|
CLONE_FILTER=$(git config --local --get remote.origin.partialclonefilter)
|
||||||
|
|
||||||
|
if [ "$CLONE_FILTER" != "blob:none" ]; then
|
||||||
|
echo "Expected ./fetch-filter/.git/config to have 'remote.origin.partialclonefilter' set to 'blob:none'"
|
||||||
|
fi
|
|
@ -53,6 +53,9 @@ inputs:
|
||||||
clean:
|
clean:
|
||||||
description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
|
description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
|
||||||
default: true
|
default: true
|
||||||
|
filter:
|
||||||
|
description: 'Partially clone against a given filter.'
|
||||||
|
default: null
|
||||||
sparse-checkout:
|
sparse-checkout:
|
||||||
description: >
|
description: >
|
||||||
Do a sparse checkout on given patterns.
|
Do a sparse checkout on given patterns.
|
||||||
|
|
|
@ -154,7 +154,13 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
|
||||||
// Fetch
|
// Fetch
|
||||||
core.startGroup('Fetching the repository')
|
core.startGroup('Fetching the repository')
|
||||||
const fetchOptions: {filter?: string; fetchDepth?: number} = {}
|
const fetchOptions: {filter?: string; fetchDepth?: number} = {}
|
||||||
if (settings.sparseCheckout) fetchOptions.filter = 'blob:none'
|
|
||||||
|
if (settings.filter) {
|
||||||
|
fetchOptions.filter = settings.filter
|
||||||
|
} else if (settings.sparseCheckout) {
|
||||||
|
fetchOptions.filter = 'blob:none'
|
||||||
|
}
|
||||||
|
|
||||||
if (settings.fetchDepth <= 0) {
|
if (settings.fetchDepth <= 0) {
|
||||||
// Fetch all branches and tags
|
// Fetch all branches and tags
|
||||||
let refSpec = refHelper.getRefSpecForAllHistory(
|
let refSpec = refHelper.getRefSpecForAllHistory(
|
||||||
|
|
|
@ -29,6 +29,11 @@ export interface IGitSourceSettings {
|
||||||
*/
|
*/
|
||||||
clean: boolean
|
clean: boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The filter determining which objects to include
|
||||||
|
*/
|
||||||
|
filter: string | undefined
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The array of folders to make the sparse checkout
|
* The array of folders to make the sparse checkout
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -82,6 +82,10 @@ export async function getInputs(): Promise<IGitSourceSettings> {
|
||||||
result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'
|
result.clean = (core.getInput('clean') || 'true').toUpperCase() === 'TRUE'
|
||||||
core.debug(`clean = ${result.clean}`)
|
core.debug(`clean = ${result.clean}`)
|
||||||
|
|
||||||
|
// Filter
|
||||||
|
result.filter = core.getInput('filter')
|
||||||
|
core.debug(`filter = ${result.filter}`)
|
||||||
|
|
||||||
// Sparse checkout
|
// Sparse checkout
|
||||||
const sparseCheckout = core.getMultilineInput('sparse-checkout')
|
const sparseCheckout = core.getMultilineInput('sparse-checkout')
|
||||||
if (sparseCheckout.length) {
|
if (sparseCheckout.length) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue