in Tasks/GooglePlayReleaseV4/main.ts [241:307]
async function prepareTrackUpdate({
edits,
packageName,
track,
versionCodes,
versionCodeFilterType,
versionCodeFilter,
userFraction,
updatePriority,
releaseNotes,
releaseName
}: TrackUpdateParameters): Promise<pub3.Schema$Track> {
let newTrackVersionCodes: number[] = [];
let res: pub3.Schema$Track;
if (versionCodeFilterType === 'all') {
newTrackVersionCodes = versionCodes;
} else {
try {
res = await googleutil.getTrack(edits, packageName, track);
} catch (e) {
tl.debug(`Failed to download track ${track} information.`);
tl.debug(e);
throw new Error(tl.loc('CannotDownloadTrack', track, e));
}
const oldTrackVersionCodes: number[] = res.releases[0].versionCodes.map((v) => Number(v));
tl.debug('Current version codes: ' + JSON.stringify(oldTrackVersionCodes));
if (typeof(versionCodeFilter) === 'string') {
tl.debug(`Removing version codes matching the regular expression: ^${versionCodeFilter}$`);
const versionCodesToRemove: RegExp = new RegExp(`^${versionCodeFilter}$`);
oldTrackVersionCodes.forEach((versionCode) => {
if (!versionCode.toString().match(versionCodesToRemove)) {
newTrackVersionCodes.push(versionCode);
}
});
} else {
const versionCodesToRemove = versionCodeFilter;
tl.debug('Removing version codes: ' + JSON.stringify(versionCodesToRemove));
oldTrackVersionCodes.forEach((versionCode) => {
if (versionCodesToRemove.indexOf(versionCode) === -1) {
newTrackVersionCodes.push(versionCode);
}
});
}
tl.debug('Version codes to keep: ' + JSON.stringify(newTrackVersionCodes));
versionCodes.forEach((versionCode) => {
if (newTrackVersionCodes.indexOf(versionCode) === -1) {
newTrackVersionCodes.push(versionCode);
}
});
}
tl.debug(`New ${track} track version codes: ` + JSON.stringify(newTrackVersionCodes));
try {
res = await googleutil.updateTrack(edits, packageName, track, newTrackVersionCodes, userFraction, updatePriority, releaseNotes, releaseName);
} catch (e) {
tl.debug(`Failed to update track ${track}.`);
tl.debug(e);
throw new Error(tl.loc('CannotUpdateTrack', track, e));
}
return res;
}