diff --git a/lib/manager/cargo/__snapshots__/update.spec.ts.snap b/lib/manager/cargo/__snapshots__/update.spec.ts.snap deleted file mode 100644 index 7f0809481a0fce655db0db33ce1a4991c00254f5..0000000000000000000000000000000000000000 --- a/lib/manager/cargo/__snapshots__/update.spec.ts.snap +++ /dev/null @@ -1,241 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`lib/manager/cargo/update updateDependency() updates nested version dependency 1`] = ` -"[package] -name = \\"rustcap\\" -version = \\"0.1.2\\" -description = \\"Wrapper for libpcap\\" -homepage = \\"https://github.com/jmmk/rustcap\\" -repository = \\"https://github.com/jmmk/rustcap\\" -authors = [\\"Michael McLellan <jmikem825@gmail.com>\\"] -keywords = [\\"pcap\\", \\"libpcap\\"] -license = \\"MIT\\" -readme = \\"README.md\\" -documentation = \\"https://docs.rs/rustcap\\" - -[workspace] -members = [\\"pcap-sys\\"] - -[dependencies] -libc = \\"=0.2.43\\" -bitflags = \\"1.0.4\\" -pcap-sys = { version = \\"0.2.0\\", path = \\"pcap-sys\\" } -pnet = { version = \\"0.21.0\\", optional = true, default-features = false} -git_dep_with_version = { version = \\"0.1.0\\", git = \\"https://github.com/foo/bar\\" } -git_dep = { git = \\"https://github.com/foo/bar\\" } -same_version_1__ = \\"0.0.0\\" -same_version_1_ = \\"0.0.0\\" -same_version_1 = \\"0.0.0\\" - -[target.'cfg(windows)'.dependencies.winapi] -version = \\"=0.3.6\\" -features = [\\"ws2def\\", \\"ws2ipdef\\"] - -[target.'cfg(target_arch = \\"wasm32\\")'.dependencies] -wasm-bindgen = \\"0.2.37\\" -js-sys = \\"0.3.14\\" -js_relative_import = { path = \\"../../common/js_relative_import\\" } - -[target.'cfg(target_arch = \\"wasm32\\")'.dependencies.web-sys] -version = \\"0.3.14\\" -features = [ - \\"AudioBuffer\\", - \\"AudioBufferSourceNode\\", - \\"AudioContext\\", - \\"AudioDestinationNode\\", - \\"AudioNode\\", -] - -[dependencies.dep1] -version = \\"0.4.2\\" - -[features] -libpnet = [\\"pnet\\"] - -[dev-dependencies] -# libc = \\"0.1.1\\" -# pnet = { version = \\"0.19.0\\", optional = true, default-features = false} -# [target.'cfg(windows)'.dependencies.winapi] -# version = \\"0.3.0\\" -# features = [\\"ws2def\\", \\"ws2ipdef\\"]" -`; - -exports[`lib/manager/cargo/update updateDependency() updates normal dependency 1`] = ` -"[package] -name = \\"rustcap\\" -version = \\"0.1.2\\" -description = \\"Wrapper for libpcap\\" -homepage = \\"https://github.com/jmmk/rustcap\\" -repository = \\"https://github.com/jmmk/rustcap\\" -authors = [\\"Michael McLellan <jmikem825@gmail.com>\\"] -keywords = [\\"pcap\\", \\"libpcap\\"] -license = \\"MIT\\" -readme = \\"README.md\\" -documentation = \\"https://docs.rs/rustcap\\" - -[workspace] -members = [\\"pcap-sys\\"] - -[dependencies] -libc = \\"0.3.0\\" -bitflags = \\"1.0.4\\" -pcap-sys = { version = \\"=0.1\\", path = \\"pcap-sys\\" } -pnet = { version = \\"0.21.0\\", optional = true, default-features = false} -git_dep_with_version = { version = \\"0.1.0\\", git = \\"https://github.com/foo/bar\\" } -git_dep = { git = \\"https://github.com/foo/bar\\" } -same_version_1__ = \\"0.0.0\\" -same_version_1_ = \\"0.0.0\\" -same_version_1 = \\"0.0.0\\" - -[target.'cfg(windows)'.dependencies.winapi] -version = \\"=0.3.6\\" -features = [\\"ws2def\\", \\"ws2ipdef\\"] - -[target.'cfg(target_arch = \\"wasm32\\")'.dependencies] -wasm-bindgen = \\"0.2.37\\" -js-sys = \\"0.3.14\\" -js_relative_import = { path = \\"../../common/js_relative_import\\" } - -[target.'cfg(target_arch = \\"wasm32\\")'.dependencies.web-sys] -version = \\"0.3.14\\" -features = [ - \\"AudioBuffer\\", - \\"AudioBufferSourceNode\\", - \\"AudioContext\\", - \\"AudioDestinationNode\\", - \\"AudioNode\\", -] - -[dependencies.dep1] -version = \\"0.4.2\\" - -[features] -libpnet = [\\"pnet\\"] - -[dev-dependencies] -# libc = \\"0.1.1\\" -# pnet = { version = \\"0.19.0\\", optional = true, default-features = false} -# [target.'cfg(windows)'.dependencies.winapi] -# version = \\"0.3.0\\" -# features = [\\"ws2def\\", \\"ws2ipdef\\"]" -`; - -exports[`lib/manager/cargo/update updateDependency() updates normal dependency with mismatch on first try 1`] = ` -"[package] -name = \\"rustcap\\" -version = \\"0.1.2\\" -description = \\"Wrapper for libpcap\\" -homepage = \\"https://github.com/jmmk/rustcap\\" -repository = \\"https://github.com/jmmk/rustcap\\" -authors = [\\"Michael McLellan <jmikem825@gmail.com>\\"] -keywords = [\\"pcap\\", \\"libpcap\\"] -license = \\"MIT\\" -readme = \\"README.md\\" -documentation = \\"https://docs.rs/rustcap\\" - -[workspace] -members = [\\"pcap-sys\\"] - -[dependencies] -libc = \\"=0.2.43\\" -bitflags = \\"1.0.4\\" -pcap-sys = { version = \\"=0.1\\", path = \\"pcap-sys\\" } -pnet = { version = \\"0.21.0\\", optional = true, default-features = false} -git_dep_with_version = { version = \\"0.1.0\\", git = \\"https://github.com/foo/bar\\" } -git_dep = { git = \\"https://github.com/foo/bar\\" } -same_version_1__ = \\"0.0.0\\" -same_version_1_ = \\"0.0.0\\" -same_version_1 = \\"1.2.3\\" - -[target.'cfg(windows)'.dependencies.winapi] -version = \\"=0.3.6\\" -features = [\\"ws2def\\", \\"ws2ipdef\\"] - -[target.'cfg(target_arch = \\"wasm32\\")'.dependencies] -wasm-bindgen = \\"0.2.37\\" -js-sys = \\"0.3.14\\" -js_relative_import = { path = \\"../../common/js_relative_import\\" } - -[target.'cfg(target_arch = \\"wasm32\\")'.dependencies.web-sys] -version = \\"0.3.14\\" -features = [ - \\"AudioBuffer\\", - \\"AudioBufferSourceNode\\", - \\"AudioContext\\", - \\"AudioDestinationNode\\", - \\"AudioNode\\", -] - -[dependencies.dep1] -version = \\"0.4.2\\" - -[features] -libpnet = [\\"pnet\\"] - -[dev-dependencies] -# libc = \\"0.1.1\\" -# pnet = { version = \\"0.19.0\\", optional = true, default-features = false} -# [target.'cfg(windows)'.dependencies.winapi] -# version = \\"0.3.0\\" -# features = [\\"ws2def\\", \\"ws2ipdef\\"]" -`; - -exports[`lib/manager/cargo/update updateDependency() updates platform specific dependency 1`] = ` -"[package] -name = \\"rustcap\\" -version = \\"0.1.2\\" -description = \\"Wrapper for libpcap\\" -homepage = \\"https://github.com/jmmk/rustcap\\" -repository = \\"https://github.com/jmmk/rustcap\\" -authors = [\\"Michael McLellan <jmikem825@gmail.com>\\"] -keywords = [\\"pcap\\", \\"libpcap\\"] -license = \\"MIT\\" -readme = \\"README.md\\" -documentation = \\"https://docs.rs/rustcap\\" - -[workspace] -members = [\\"pcap-sys\\"] - -[dependencies] -libc = \\"=0.2.43\\" -bitflags = \\"1.0.4\\" -pcap-sys = { version = \\"=0.1\\", path = \\"pcap-sys\\" } -pnet = { version = \\"0.21.0\\", optional = true, default-features = false} -git_dep_with_version = { version = \\"0.1.0\\", git = \\"https://github.com/foo/bar\\" } -git_dep = { git = \\"https://github.com/foo/bar\\" } -same_version_1__ = \\"0.0.0\\" -same_version_1_ = \\"0.0.0\\" -same_version_1 = \\"0.0.0\\" - -[target.'cfg(windows)'.dependencies.winapi] -version = \\"0.4.0\\" -features = [\\"ws2def\\", \\"ws2ipdef\\"] - -[target.'cfg(target_arch = \\"wasm32\\")'.dependencies] -wasm-bindgen = \\"0.2.37\\" -js-sys = \\"0.3.14\\" -js_relative_import = { path = \\"../../common/js_relative_import\\" } - -[target.'cfg(target_arch = \\"wasm32\\")'.dependencies.web-sys] -version = \\"0.3.14\\" -features = [ - \\"AudioBuffer\\", - \\"AudioBufferSourceNode\\", - \\"AudioContext\\", - \\"AudioDestinationNode\\", - \\"AudioNode\\", -] - -[dependencies.dep1] -version = \\"0.4.2\\" - -[features] -libpnet = [\\"pnet\\"] - -[dev-dependencies] -# libc = \\"0.1.1\\" -# pnet = { version = \\"0.19.0\\", optional = true, default-features = false} -# [target.'cfg(windows)'.dependencies.winapi] -# version = \\"0.3.0\\" -# features = [\\"ws2def\\", \\"ws2ipdef\\"]" -`; diff --git a/lib/manager/cargo/index.ts b/lib/manager/cargo/index.ts index 8f67566d64368bc625b71800716539b58300b62a..a416b9f5991abdb089125c64d2f8aebb64b90779 100644 --- a/lib/manager/cargo/index.ts +++ b/lib/manager/cargo/index.ts @@ -1,5 +1,4 @@ import { extractPackageFile } from './extract'; -import { updateDependency } from './update'; import { updateArtifacts } from './artifacts'; import { LANGUAGE_RUST } from '../../constants/languages'; import * as cargoVersioning from '../../versioning/cargo'; @@ -8,7 +7,7 @@ const language = LANGUAGE_RUST; // TODO: Support this export const supportsLockFileMaintenance = false; -export { extractPackageFile, updateArtifacts, language, updateDependency }; +export { extractPackageFile, updateArtifacts, language }; export const defaultConfig = { commitMessageTopic: 'Rust crate {{depName}}', diff --git a/lib/manager/cargo/update.spec.ts b/lib/manager/cargo/update.spec.ts deleted file mode 100644 index e4e52a4d7d181d631451e6445ec92600f9a1500f..0000000000000000000000000000000000000000 --- a/lib/manager/cargo/update.spec.ts +++ /dev/null @@ -1,252 +0,0 @@ -import { readFileSync } from 'fs'; -import { updateDependency } from './update'; - -const cargo1toml = readFileSync( - 'lib/manager/cargo/__fixtures__/Cargo.1.toml', - 'utf8' -); -const cargo4toml = readFileSync( - 'lib/manager/cargo/__fixtures__/Cargo.4.toml', - 'utf8' -); -const cargo5toml = readFileSync( - 'lib/manager/cargo/__fixtures__/Cargo.5.toml', - 'utf8' -); - -describe('lib/manager/cargo/update', () => { - describe('updateDependency()', () => { - let config; - beforeEach(() => { - config = { managerData: {} }; - }); - it('returns same for invalid toml', () => { - const cargotoml = 'invalid toml !#$#'; - expect( - updateDependency({ fileContent: cargotoml, upgrade: config }) - ).toEqual(cargotoml); - }); - it('returns same for null upgrade', () => { - const cargotoml = '[dependencies]\n'; - expect( - updateDependency({ fileContent: cargotoml, upgrade: null }) - ).toEqual(cargotoml); - }); - it('returns same if version has not changed', () => { - const cargotoml = '[dependencies]\n'; - expect( - updateDependency({ fileContent: cargotoml, upgrade: null }) - ).toEqual(cargotoml); - const upgrade = { - depName: 'libc', - depType: 'dependencies', - managerData: { nestedVersion: false }, - newValue: '=0.2.43', - }; - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).not.toBeNull(); - expect(updateDependency({ fileContent: cargo1toml, upgrade })).toBe( - cargo1toml - ); - }); - it('returns same for invalid target', () => { - const cargotoml = '[dependencies]\n'; - expect( - updateDependency({ fileContent: cargotoml, upgrade: null }) - ).toEqual(cargotoml); - const upgrade = { - depName: 'platform-specific-dep', - depType: 'dependencies', - managerData: { nestedVersion: false }, - target: 'foobar', - newValue: '1.2.3', - }; - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).not.toBeNull(); - expect(updateDependency({ fileContent: cargo1toml, upgrade })).toBe( - cargo1toml - ); - }); - it('returns same for invalid depType', () => { - const cargotoml = '[dependencies]\n'; - expect( - updateDependency({ fileContent: cargotoml, upgrade: null }) - ).toEqual(cargotoml); - const upgrade = { - depName: 'libc', - depType: 'foobar', - managerData: { nestedVersion: false }, - newValue: '1.2.3', - }; - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).not.toBeNull(); - expect(updateDependency({ fileContent: cargo1toml, upgrade })).toBe( - cargo1toml - ); - }); - it('returns same for invalid depName', () => { - const cargotoml = '[dependencies]\n'; - expect( - updateDependency({ fileContent: cargotoml, upgrade: null }) - ).toEqual(cargotoml); - const upgrade = { - depName: 'does not exist', - depType: 'dependencies', - managerData: { nestedVersion: false }, - newValue: '1.2.3', - }; - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).not.toBeNull(); - expect(updateDependency({ fileContent: cargo1toml, upgrade })).toBe( - cargo1toml - ); - }); - it('updates normal dependency', () => { - const upgrade = { - depName: 'libc', - depType: 'dependencies', - managerData: { nestedVersion: false }, - newValue: '0.3.0', - }; - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).not.toBeNull(); - expect(updateDependency({ fileContent: cargo1toml, upgrade })).not.toBe( - cargo1toml - ); - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).toMatchSnapshot(); - }); - it('updates normal dependency with mismatch on first try', () => { - const upgrade = { - depName: 'same_version_1', - depType: 'dependencies', - managerData: { nestedVersion: false }, - newValue: '1.2.3', - }; - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).not.toBeNull(); - expect(updateDependency({ fileContent: cargo1toml, upgrade })).not.toBe( - cargo1toml - ); - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).toMatchSnapshot(); - }); - it('updates nested version dependency', () => { - const upgrade = { - depName: 'pcap-sys', - depType: 'dependencies', - managerData: { nestedVersion: true }, - newValue: '0.2.0', - }; - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).not.toBeNull(); - expect(updateDependency({ fileContent: cargo1toml, upgrade })).not.toBe( - cargo1toml - ); - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).toMatchSnapshot(); - }); - it('updates platform specific dependency', () => { - const upgrade = { - depName: 'winapi', - target: 'cfg(windows)', - depType: 'dependencies', - managerData: { nestedVersion: true }, - newValue: '0.4.0', - }; - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).not.toBeNull(); - expect(updateDependency({ fileContent: cargo1toml, upgrade })).not.toBe( - cargo1toml - ); - expect( - updateDependency({ fileContent: cargo1toml, upgrade }) - ).toMatchSnapshot(); - }); - it('handles invalid standard tables gracefully', () => { - const upgrade = { - depName: 'dep5', - managerData: { nestedVersion: true }, - depType: 'dependencies', - newValue: '2.0.0', - }; - expect(updateDependency({ fileContent: cargo4toml, upgrade })).toEqual( - cargo4toml - ); - }); - it('does not update in case of error', () => { - const upgrade = { - depName: 'libc', - devType: 'dev-dependencies', // Wrong devType - managerData: { nestedVersion: false }, - newValue: '0.3.0', - }; - expect(updateDependency({ fileContent: cargo1toml, upgrade })).toEqual( - cargo1toml - ); - }); - it('does not update in case of error', () => { - const upgrade = { - depName: 'libc', - devType: 'dependencies', - managerData: { nestedVersion: true }, // Should be false - newValue: '0.3.0', - }; - expect(updateDependency({ fileContent: cargo1toml, upgrade })).toEqual( - cargo1toml - ); - }); - it('does not update in case of error', () => { - const upgrade = { - depName: 'pcap-sys', - devType: 'dependencies', - managerData: { nestedVersion: false }, // Should be true - newValue: '0.3.0', - }; - expect(updateDependency({ fileContent: cargo1toml, upgrade })).toEqual( - cargo1toml - ); - }); - it('updates platform specific normal dependency', () => { - const upgrade = { - depName: 'wasm-bindgen', - depType: 'dependencies', - managerData: { nestedVersion: false }, - target: 'cfg(target_arch = "wasm32")', - newValue: '0.3.0', - }; - expect( - updateDependency({ fileContent: cargo5toml, upgrade }) - ).not.toBeNull(); - expect(updateDependency({ fileContent: cargo5toml, upgrade })).not.toBe( - cargo5toml - ); - }); - it('updates platform specific table dependency', () => { - const upgrade = { - depName: 'web-sys', - managerData: { nestedVersion: true }, - depType: 'dependencies', - target: 'cfg(target_arch = "wasm32")', - newValue: '0.4.0', - }; - expect( - updateDependency({ fileContent: cargo5toml, upgrade }) - ).not.toBeNull(); - expect(updateDependency({ fileContent: cargo5toml, upgrade })).not.toBe( - cargo5toml - ); - }); - }); -}); diff --git a/lib/manager/cargo/update.ts b/lib/manager/cargo/update.ts deleted file mode 100644 index feda19f632236670388ea9c4ed45c8430f303663..0000000000000000000000000000000000000000 --- a/lib/manager/cargo/update.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { isEqual } from 'lodash'; -import { parse } from 'toml'; -import { logger } from '../../logger'; -import { UpdateDependencyConfig } from '../common'; -import { CargoConfig, CargoSection } from './types'; -import { matchAt, replaceAt } from '../../util/string'; - -export function updateDependency({ - fileContent, - upgrade, -}: UpdateDependencyConfig): string { - logger.trace({ config: upgrade }, 'poetry.updateDependency()'); - if (!upgrade) { - return fileContent; - } - const { target, depType, depName, newValue, managerData } = upgrade; - const { nestedVersion } = managerData; - let parsedContent: CargoConfig; - try { - parsedContent = parse(fileContent); - } catch (err) { - logger.debug({ err }, 'Error parsing Cargo.toml file'); - return fileContent; - } - let section: CargoSection; - if (target) { - section = parsedContent.target[target]; - if (section) { - section = section[depType]; - } - } else { - section = parsedContent[depType]; - } - if (!section) { - if (target) { - logger.debug( - { config: upgrade }, - `Error: Section [target.${target}.${depType}] doesn't exist in Cargo.toml file, update failed` - ); - } else { - logger.debug( - { config: upgrade }, - `Error: Section [${depType}] doesn't exist in Cargo.toml file, update failed` - ); - } - return fileContent; - } - let oldVersion: any; - const oldDep = section[depName]; - if (!oldDep) { - logger.debug( - { config: upgrade }, - `Could not get version of dependency ${depName}, update failed (most likely name is invalid)` - ); - return fileContent; - } - oldVersion = section[depName]; - // if (typeof oldVersion !== 'string') { - // if (oldVersion.version) { - // oldVersion = oldVersion.version; - // } else { - // oldVersion = null; - // } - // } - if (nestedVersion) { - oldVersion = oldVersion.version; - } - if (!oldVersion) { - logger.debug( - { config: upgrade }, - `Could not get version of dependency ${depName}, update failed (most likely name is invalid)` - ); - return fileContent; - } - if (oldVersion === newValue) { - logger.debug('Version is already updated'); - return fileContent; - } - if (nestedVersion) { - section[depName].version = newValue; - } else { - section[depName] = newValue; - } - if (target) { - parsedContent.target[target][depType] = section; - } else { - parsedContent[depType] = section; - } - const searchString = `"${oldVersion}"`; - const newString = `"${newValue}"`; - let newFileContent = fileContent; - let searchIndex = fileContent.indexOf(`${depName}`) + depName.length; - for (; searchIndex < fileContent.length; searchIndex += 1) { - // First check if we have a hit for the old version - if (matchAt(fileContent, searchIndex, searchString)) { - logger.trace(`Found match at index ${searchIndex}`); - // Now test if the result matches - const testContent = replaceAt( - fileContent, - searchIndex, - searchString, - newString - ); - // Compare the parsed toml structure of old and new - if (isEqual(parsedContent, parse(testContent))) { - newFileContent = testContent; - break; - } else { - logger.debug('Mismatched replace at searchIndex ' + searchIndex); - } - } - } - return newFileContent; -}