mirror of
https://github.com/actions/checkout.git
synced 2026-09-26 20:10:04 +08:00
GitVersion.checkMinimum guarded the patch comparison with a truthiness check
on `this.patch`, so a version whose patch component was explicitly zero was
treated as if the patch were unspecified and the comparison was skipped
entirely. That made `new GitVersion('4.5.0').checkMinimum(new GitVersion('4.5.1'))`
return true.
Compare the patch only when it was actually specified, distinguishing an
explicit zero from an unspecified one. A two-part version such as "2.28" still
leaves patch as NaN and continues to satisfy any patch of that minor version,
which is the behavior the existing tests rely on.
* compare an explicit patch of zero against the minimum version
* add regression coverage for an explicit patch of zero
* rebuild dist
113 lines
5.7 KiB
TypeScript
113 lines
5.7 KiB
TypeScript
import {describe, it, expect} from '@jest/globals'
|
|
import {GitVersion} from '../src/git-version.js'
|
|
import {MinimumGitSparseCheckoutVersion} from '../src/git-command-manager.js'
|
|
|
|
describe('git-version tests', () => {
|
|
it('basics', async () => {
|
|
let version = new GitVersion('')
|
|
expect(version.isValid()).toBeFalsy()
|
|
|
|
version = new GitVersion('asdf')
|
|
expect(version.isValid()).toBeFalsy()
|
|
|
|
version = new GitVersion('1.2')
|
|
expect(version.isValid()).toBeTruthy()
|
|
expect(version.toString()).toBe('1.2')
|
|
|
|
version = new GitVersion('1.2.3')
|
|
expect(version.isValid()).toBeTruthy()
|
|
expect(version.toString()).toBe('1.2.3')
|
|
})
|
|
|
|
it('check minimum', async () => {
|
|
let version = new GitVersion('4.5')
|
|
expect(version.checkMinimum(new GitVersion('3.6'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('3.6.7'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('4.4'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('4.5'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('4.5.0'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('4.6'))).toBeFalsy()
|
|
expect(version.checkMinimum(new GitVersion('4.6.0'))).toBeFalsy()
|
|
expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy()
|
|
expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy()
|
|
|
|
version = new GitVersion('4.5.6')
|
|
expect(version.checkMinimum(new GitVersion('3.6'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('3.6.7'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('4.4'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('4.5'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('4.5.5'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('4.5.6'))).toBeTruthy()
|
|
expect(version.checkMinimum(new GitVersion('4.5.7'))).toBeFalsy()
|
|
expect(version.checkMinimum(new GitVersion('4.6'))).toBeFalsy()
|
|
expect(version.checkMinimum(new GitVersion('4.6.0'))).toBeFalsy()
|
|
expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy()
|
|
expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy()
|
|
})
|
|
|
|
it('compares an explicit patch of zero', async () => {
|
|
// A patch component of zero must be compared, not treated as unspecified
|
|
// (0 is falsy). A patch left unspecified by a two-part version such as
|
|
// "2.28" is treated as satisfying any patch of that minor version.
|
|
expect(
|
|
new GitVersion('4.5.0').checkMinimum(new GitVersion('4.5.1'))
|
|
).toBeFalsy()
|
|
expect(
|
|
new GitVersion('2.28.0').checkMinimum(new GitVersion('2.28.1'))
|
|
).toBeFalsy()
|
|
expect(
|
|
new GitVersion('4.5.0').checkMinimum(new GitVersion('4.5.0'))
|
|
).toBeTruthy()
|
|
expect(
|
|
new GitVersion('4.5.0').checkMinimum(new GitVersion('4.5'))
|
|
).toBeTruthy()
|
|
expect(
|
|
new GitVersion('4.5.1').checkMinimum(new GitVersion('4.5.0'))
|
|
).toBeTruthy()
|
|
// Unspecified patch satisfies any patch of the same minor version
|
|
expect(
|
|
new GitVersion('4.5').checkMinimum(new GitVersion('4.5.0'))
|
|
).toBeTruthy()
|
|
})
|
|
|
|
it('sparse checkout', async () => {
|
|
const minSparseVer = MinimumGitSparseCheckoutVersion
|
|
expect(new GitVersion('1.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('1.99').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.24').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.24.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.24.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.25').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.25.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.25.1').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.25.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.26').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.26.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.26.1').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.26.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.27').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.27.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.27.1').checkMinimum(minSparseVer)).toBeFalsy()
|
|
expect(new GitVersion('2.27.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
// /---------------------------------------
|
|
// ^^^ before / after vvv
|
|
// --------------------------/
|
|
expect(new GitVersion('2.28').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('2.28.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('2.28.1').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('2.28.9').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('2.29').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('2.29.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('2.29.1').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('2.29.9').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('2.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('3.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('3.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('4.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('4.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('5.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
expect(new GitVersion('5.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
})
|
|
})
|