mirror of
https://github.com/gradle/gradle-build-action.git
synced 2024-12-25 13:46:19 +08:00
Use node to set file timestamps
Using `find` and `touch` will not work on windows, so this provides a cross-platform mechanism.
This commit is contained in:
parent
82bc72e1e7
commit
0e4b100458
@ -1,4 +1,6 @@
|
|||||||
|
import * as core from '@actions/core'
|
||||||
import * as exec from '@actions/exec'
|
import * as exec from '@actions/exec'
|
||||||
|
import * as glob from '@actions/glob'
|
||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
|
|
||||||
@ -46,14 +48,21 @@ export class CacheCleaner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async ageAllFiles(fileName = '*'): Promise<void> {
|
private async ageAllFiles(fileName = '*'): Promise<void> {
|
||||||
await exec.exec(
|
core.debug(`Aging all files in Gradle User Homee with name ${fileName}`)
|
||||||
'find',
|
await this.setUtimes(`${this.gradleUserHome}/**/${fileName}`, new Date(0))
|
||||||
[this.gradleUserHome, '-name', fileName, '-exec', 'touch', '-m', '-t', '197001010000', '{}', '+'],
|
|
||||||
{}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async touchAllFiles(fileName = '*'): Promise<void> {
|
private async touchAllFiles(fileName = '*'): Promise<void> {
|
||||||
await exec.exec('find', [this.gradleUserHome, '-name', fileName, '-exec', 'touch', '-m', '{}', '+'], {})
|
core.debug(`Touching all files in Gradle User Home with name ${fileName}`)
|
||||||
|
await this.setUtimes(`${this.gradleUserHome}/**/${fileName}`, new Date())
|
||||||
|
}
|
||||||
|
|
||||||
|
private async setUtimes(pattern: string, timestamp: Date): Promise<void> {
|
||||||
|
const globber = await glob.create(pattern, {
|
||||||
|
implicitDescendants: false
|
||||||
|
})
|
||||||
|
for await (const file of globber.globGenerator()) {
|
||||||
|
fs.utimesSync(file, timestamp, timestamp)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user