1
0
Fork 0

Merge pull request #8384 from aboks/no-lock

Config option to disable lockfile generation
pull/8390/head
Jordi Boggiano 2019-10-24 11:06:02 +02:00 committed by GitHub
commit 82e0fdccca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 74 additions and 2 deletions

View File

@ -296,4 +296,9 @@ Example:
Defaults to `true`. If set to `false`, Composer will not create `.htaccess` files
in the composer home, cache, and data directories.
## lock
Defaults to `true`. If set to `false`, Composer will not create a `composer.lock`
file.
← [Repositories](05-repositories.md) | [Community](07-community.md) →

View File

@ -290,6 +290,10 @@
"sort-packages": {
"type": "boolean",
"description": "Defaults to false. If set to true, Composer will sort packages when adding/updating a new dependency."
},
"lock": {
"type": "boolean",
"description": "Defaults to true. If set to false, Composer will not create a composer.lock file."
}
}
},

View File

@ -412,6 +412,7 @@ EOT
),
'github-expose-hostname' => array($booleanValidator, $booleanNormalizer),
'htaccess-protect' => array($booleanValidator, $booleanNormalizer),
'lock' => array($booleanValidator, $booleanNormalizer),
);
$multiConfigValues = array(
'github-protocols' => array(

View File

@ -63,6 +63,7 @@ class Config
'archive-dir' => '.',
'htaccess-protect' => true,
'use-github-api' => true,
'lock' => true,
// valid keys without defaults (auth config stuff):
// bitbucket-oauth
// github-oauth
@ -329,6 +330,8 @@ class Config
return $this->config[$key] !== 'false' && (bool) $this->config[$key];
case 'use-github-api':
return $this->config[$key] !== 'false' && (bool) $this->config[$key];
case 'lock':
return $this->config[$key] !== 'false' && (bool) $this->config[$key];
default:
if (!isset($this->config[$key])) {
return null;

View File

@ -118,7 +118,7 @@ class Installer
protected $preferStable = false;
protected $preferLowest = false;
protected $skipSuggest = false;
protected $writeLock = true;
protected $writeLock;
protected $executeOperations = true;
/**
@ -164,6 +164,8 @@ class Installer
$this->installationManager = $installationManager;
$this->eventDispatcher = $eventDispatcher;
$this->autoloadGenerator = $autoloadGenerator;
$this->writeLock = $config->get('lock');
}
/**

View File

@ -0,0 +1,25 @@
--TEST--
Installs from composer.json without writing a lock file
--COMPOSER--
{
"repositories": [
{
"type": "package",
"package": [
{ "name": "a/a", "version": "1.0.0" }
]
}
],
"require": {
"a/a": "1.0.0"
},
"config": {
"lock": "false"
}
}
--RUN--
install
--EXPECT--
Installing a/a (1.0.0)
--EXPECT-LOCK--
false

View File

@ -0,0 +1,25 @@
--TEST--
Updates when no lock file is present without writing a lock file
--COMPOSER--
{
"repositories": [
{
"type": "package",
"package": [
{ "name": "a/a", "version": "1.0.0" }
]
}
],
"require": {
"a/a": "1.0.0"
},
"config": {
"lock": false
}
}
--RUN--
update
--EXPECT--
Installing a/a (1.0.0)
--EXPECT-LOCK--
false

View File

@ -197,6 +197,9 @@ class InstallerTest extends TestCase
// so store value temporarily in reference for later assetion
$actualLock = $hash;
}));
} elseif ($expectLock === false) {
$lockJsonMock->expects($this->never())
->method('write');
}
$contents = json_encode($composerConfig);
@ -319,7 +322,11 @@ class InstallerTest extends TestCase
}
$run = $testData['RUN'];
if (!empty($testData['EXPECT-LOCK'])) {
$expectLock = JsonFile::parseJson($testData['EXPECT-LOCK']);
if ($testData['EXPECT-LOCK'] === 'false') {
$expectLock = false;
} else {
$expectLock = JsonFile::parseJson($testData['EXPECT-LOCK']);
}
}
$expectOutput = isset($testData['EXPECT-OUTPUT']) ? $testData['EXPECT-OUTPUT'] : null;
$expect = $testData['EXPECT'];