Add command to diff vintf manifests
This commit is contained in:
parent
1f4002d070
commit
3f819ea776
1 changed files with 54 additions and 0 deletions
54
src/commands/diff-vintf.ts
Normal file
54
src/commands/diff-vintf.ts
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
import { Command, flags } from '@oclif/command'
|
||||||
|
import { promises as fs } from 'fs'
|
||||||
|
import * as chalk from 'chalk'
|
||||||
|
|
||||||
|
import { diffVintfHals, getHalFqNames, loadPartVintfInfo, serializeVintfHals } from '../blobs/vintf'
|
||||||
|
import { EXT_PARTITIONS } from '../util/partitions'
|
||||||
|
|
||||||
|
export default class DiffVintf extends Command {
|
||||||
|
static description = 'find missing vintf declarations compared to a reference system'
|
||||||
|
|
||||||
|
static flags = {
|
||||||
|
help: flags.help({char: 'h'}),
|
||||||
|
all: flags.boolean({char: 'a', description: 'show all differences, not only missing/removed HALs', default: false})
|
||||||
|
}
|
||||||
|
|
||||||
|
static args = [
|
||||||
|
{name: 'sourceRef', description: 'path to root of reference system', required: true},
|
||||||
|
{name: 'sourceNew', description: 'path to root of new system', required: true},
|
||||||
|
{name: 'outPath', description: 'output path for manifest fragment with missing HALs'},
|
||||||
|
]
|
||||||
|
|
||||||
|
async run() {
|
||||||
|
let {flags: {all}, args: {sourceRef, sourceNew, outPath}} = this.parse(DiffVintf)
|
||||||
|
|
||||||
|
let vintfRef = await loadPartVintfInfo(sourceRef)
|
||||||
|
let vintfNew = await loadPartVintfInfo(sourceNew)
|
||||||
|
|
||||||
|
for (let partition of EXT_PARTITIONS) {
|
||||||
|
let halsRef = vintfRef.get(partition)?.manifest
|
||||||
|
if (halsRef == null) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
let halsNew = vintfNew.get(partition)?.manifest ?? []
|
||||||
|
|
||||||
|
this.log(chalk.bold(partition))
|
||||||
|
|
||||||
|
let newAdded = diffVintfHals(halsRef, halsNew)
|
||||||
|
let newRemoved = diffVintfHals(halsNew, halsRef)
|
||||||
|
|
||||||
|
getHalFqNames(newRemoved).forEach(f => this.log(chalk.red(` ${f}`)))
|
||||||
|
if (all) {
|
||||||
|
getHalFqNames(newAdded).forEach(f => this.log(chalk.green(` ${f}`)))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (outPath != undefined) {
|
||||||
|
let outManifest = serializeVintfHals(newRemoved)
|
||||||
|
await fs.writeFile(outPath, outManifest)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.log()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue