Skip to content

Commit

Permalink
refactor: store bucket releases, not versions
Browse files Browse the repository at this point in the history
  • Loading branch information
rarkins committed Feb 13, 2021
1 parent 2f4b938 commit 1acda01
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 21 deletions.
9 changes: 9 additions & 0 deletions lib/versioning/pep440/index.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,15 @@ describe('pep440.isStable(version)', () => {
});
});

describe('pep440.equals(version1, version2)', () => {
it('returns correct true', () => {
expect(pep440.equals('1.0', '1.0.0')).toBeTruthy();
});
it('returns false when version invalid', () => {
expect(pep440.equals('1.0.0', '1.0..foo')).toBeFalsy();
});
});

describe('pep440.isSingleVersion()', () => {
it('returns true if naked version', () => {
expect(pep440.isSingleVersion('1.2.3')).toBeTruthy();
Expand Down
46 changes: 25 additions & 21 deletions lib/workers/repository/process/lookup/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -311,20 +311,26 @@ export async function lookupUpdates(
if (vulnerabilityAlert) {
filteredVersions = filteredVersions.slice(0, 1);
}
const buckets: Record<string, [string]> = {};
for (const toVersion of filteredVersions.map((v) => v.version)) {
const bucket = getBucket(config, fromVersion, toVersion, versioning);
const buckets: Record<string, [Release]> = {};
for (const release of filteredVersions) {
const bucket = getBucket(
config,
fromVersion,
release.version,
versioning
);
if (buckets[bucket]) {
buckets[bucket].push(toVersion);
buckets[bucket].push(release);
} else {
buckets[bucket] = [toVersion];
buckets[bucket] = [release];
}
}
for (const [bucket, versions] of Object.entries(buckets)) {
const bucketVersions = versions.sort((v1, v2) =>
versioning.sortVersions(v1, v2)
for (const [bucket, bucketReleases] of Object.entries(buckets)) {
const sortedReleases = bucketReleases.sort((r1, r2) =>
versioning.sortVersions(r1.version, r2.version)
);
const toVersion = bucketVersions.pop();
const release = sortedReleases.pop();
const toVersion = release.version;
const update: LookupUpdate = { fromVersion, toVersion, newValue: null };
update.bucket = bucket;
try {
Expand Down Expand Up @@ -367,21 +373,19 @@ export async function lookupUpdates(
if (!versioning.isVersion(update.newValue)) {
update.isRange = true;
}
const updateRelease = releases.find((release) =>
versioning.equals(release.version, toVersion)
);
// TODO: think more about whether to just Object.assign this
const releaseFields: (keyof Pick<
Release,
'releaseTimestamp' | 'downloadUrl' | 'checksumUrl' | 'newDigest'
>)[] = ['releaseTimestamp', 'newDigest'];
const releaseFields = [
'checksumUrl',
'downloadUrl',
'newDigest',
'releaseTimestamp',
];
releaseFields.forEach((field) => {
if (updateRelease[field] !== undefined) {
update[field] = updateRelease[field] as never;
if (release[field] !== undefined) {
update[field] = release[field];
}
});
if (bucketVersions.length) {
update.skippedOverVersions = bucketVersions;
if (sortedReleases.length) {
update.skippedOverVersions = sortedReleases.map((r) => r.version);
}
if (
rangeStrategy === 'update-lockfile' &&
Expand Down

0 comments on commit 1acda01

Please sign in to comment.