Skip to content
Snippets Groups Projects
Unverified Commit d0976b49 authored by Stefano Arlandini's avatar Stefano Arlandini Committed by GitHub
Browse files

feat(manager/composer): support updates with minimal changes (#34218)


Co-authored-by: default avatarRhys Arkins <rhys@arkins.net>
parent 3172108d
No related branches found
No related tags found
No related merge requests found
......@@ -33,6 +33,7 @@ import type { AuthJson } from './types';
import {
extractConstraints,
getComposerArguments,
getComposerUpdateArguments,
getPhpConstraint,
isArtifactAuthEnabled,
requireComposerDependencyInstallation,
......@@ -191,7 +192,7 @@ export async function updateArtifacts({
.join(' ')
).trim() + ' --with-dependencies';
}
args += getComposerArguments(config, composerToolConstraint);
args += getComposerUpdateArguments(config, composerToolConstraint);
logger.trace({ cmd, args }, 'composer command');
commands.push(`${cmd} ${args}`);
......
......@@ -5,6 +5,7 @@ import { Lockfile, PackageFile } from './schema';
import {
extractConstraints,
getComposerArguments,
getComposerUpdateArguments,
requireComposerDependencyInstallation,
} from './utils';
......@@ -316,6 +317,48 @@ describe('modules/manager/composer/utils', () => {
});
});
describe('getComposerUpdateArguments', () => {
it.each`
constraint
${'2.6.0'}
${'<=2.6'}
${'<2.7'}
`(
'does not request an update with minimal changes with $constraint',
({ constraint }) => {
expect(
getComposerUpdateArguments({}, { toolName: 'composer', constraint }),
).toBe(
' --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins',
);
},
);
it.each`
constraint
${'2.7.0'}
${'2.8.0'}
${'3.0.0'}
${'^2.6'}
${'^2.7'}
${'^2.8'}
${'^3.0'}
${'>=2.6'}
${'>=2.7'}
${'>=2.8'}
${'>=3.0'}
`(
'requests an update with minimal changes with $constraint',
({ constraint }) => {
expect(
getComposerUpdateArguments({}, { toolName: 'composer', constraint }),
).toBe(
' --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins --minimal-changes',
);
},
);
});
describe('requireComposerDependencyInstallation', () => {
it('returns true when symfony/flex has been installed', () => {
const lockfile = Lockfile.parse({
......
......@@ -49,6 +49,22 @@ export function getComposerArguments(
return args;
}
export function getComposerUpdateArguments(
config: UpdateArtifactsConfig,
toolConstraint: ToolConstraint,
): string {
let args = getComposerArguments(config, toolConstraint);
if (
is.string(toolConstraint.constraint) &&
api.intersects!(toolConstraint.constraint, '>=2.7')
) {
args += ' --minimal-changes';
}
return args;
}
export function getPhpConstraint(
constraints: Record<string, string>,
): string | null {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment