summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Add support for Baserock definitions version 6Sam Thursfield2015-07-295-100/+150
| | | | Change-Id: I891d1b13ed0581b293fe6b09b3cc73af8fd81d67
* Remove support for Baserock definitions format versions 0, 1 and 2Sam Thursfield2015-07-236-63/+13
| | | | | | | | | | | The previous release of the Baserock reference systems (baserock-15.25 tag) used Baserock definitions version 3, so this version of Morph can still build the last release of the Baserock reference systems. In the course of fixing up the cmdtest tests to use version 5 definitions, I removed a couple of bits of redundant code. Change-Id: If9d480aa966d2ea5939cf04351f3d488cccea67f
* Don't provide default strip-commands for 'manual' build systemSam Thursfield2015-07-231-1/+6
| | | | | | | | | | | | | | | | | | | | | This makes more sense to me conceptually: the idea of the 'manual' build system is you specify *everything* manually. However, I made this change to work around a problem in the Yarn test suite. If the definitions used for testing are set to version 5 or newer, `morph build` will try to run 'strip' and 'objcopy', which fails because they don't exist in the test definitions. We could solve this by setting 'strip-commands: []' in the test chunk .morph files, but this triggers an error further down where `morph edit` fails with 'Field strip-commands not allowed in morphology test-chunk.morph'. This bug is caused by the conditional way that strip-commands are currently implemented in Morph. When we drop support for versions of the definitions format older than V5, the bug will go away, and the `morph edit` command is deprecated in any case, so I think it makes sense to work around it instead of trying to fix it. Change-Id: Ib5124d72466a77cf3f28ed3e14cc4c231bdce4c4
* Extract downloaded tarball as current userRichard Ipsum2015-07-201-1/+1
| | | | | | | | | | | | | | | | | | tar will preserve ownership and permissions by default if running as the superuser, whereas git doesn't track ownership, the owner is set to the user running the clone. This is a reproducibility hole since the resulting repo may differ depending on whether the repo was obtained from a tarball or via a git clone, but morph considers the repos to be equivalent. Running tar with --no-same-owner ensures the files written by tar will be owned by the user extracting the archive. This only fixes half the problem, lorry may also need to be modified to ensure files in the tarball have the same mode as those in the git repo. Change-Id: I849d054bc4574f9c0bbcfd608914306e52b7a22e
* Add bitbucket repo alias to default aliasesRichard Ipsum2015-07-061-0/+3
| | | | Change-Id: Ife16546fc90e26919672f6658b30084bafa42f94
* sourceresolver_tests: Remove bogus testRichard Maw2015-07-041-9/+0
| | | | | | | | | | | | | | | | | | This test, tests for a case that produces unhelpful results. It asserts that if we don't have the repository locally, and we try to fetch it remotely and the file doesn't exist, that we should have no morphology. What we'd actually like is for it to fetch the repository and try that locally, at which point it would succeed. The reason the flawed previous behaviour (that this test asserted to be correct) failed to cause problems for us, is that in the normal course of resolving refs, we would always either have found it remotely or cached it locally, when we were doing ls_tree or resolve_ref operations. Change-Id: I287eb1e5bc9c916b31f306b4f5f24b0a6d3f0559
* sourceresolver_tests: Fix invalid backup definitionRichard Maw2015-07-041-1/+2
| | | | | | | If we did end up trying to load a morphology that wasn't defined, we'd get an unhelpful error about the yaml being invalid. Change-Id: If1b182f1100430424a0fe62bd8938a88c1b9a11a
* distbuild: Fix cache status messageSam Thursfield2015-06-241-2/+3
| | | | | | | | The initiator would always say "Need to build 260/260 artifacts" even when it didn't need to build everything, because we were counting the number of unbuilt artifacts wrongly. Change-Id: I5da88157dba59949597c58a983f7b31975c52d7f
* distbuild: Fix crash when worker disconnectsSam Thursfield2015-06-241-1/+1
| | | | | | | Bad function prototype meant that the mechanism for handling workers disconnecting actually caused the controller to crash instead. Change-Id: I8ceb6ad027ba2481c0c4c335e1760692823c208b
* distbuild: Fix partial distbuildingSam Thursfield2015-06-241-1/+1
| | | | | | | | | | | | | | | | | | | | I was getting an error from this command: morph distbuild systems/build-system-x86_64.morph stage2-fhs-dirs Saying this: ERROR: Failed to build git://git.baserock.org/baserock/baserock/definitions 93575a2ceeeda77a5bb8c6121a9cac3edde1afbf systems/build-system-x86_64.morph: Some of the requested components are not in build-system-x86_64-rootfs: stage2-fhs-dirs This patch fixes that issue and makes Morph build up to stage2-fhs-dirs successfully. Change-Id: I61c373272484dcb5dc62f281cae8f21f742c31a9
* distbuild: Add __str__() and __repr__() to ArtifactReferenceSam Thursfield2015-06-231-0/+6
| | | | | | | | This is just to make the log files more readable, as what would previously have been logged as '<ArtifactReference at 0x1235478>' is now logged as the actual name of the artifact. Change-Id: I6189aa1390268cec379dd459fc3f4fecc71363b1
* distbuild: Hide a log messageSam Thursfield2015-06-231-1/+4
| | | | | | | | The 'BC: got artifact: <distbuild.artifact_reference.ArtifactReference object at 0x7f84ea2b5c10>' message is only useful when _debug_build_output is true, if at all. Change-Id: I079b398e841d5508ecefd00167fb0d83be748ce6
* distbuild: Check cache status each time we enqueue new artifactsSam Thursfield2015-06-231-131/+174
| | | | | | | | | | | | | | | | | | | This fixes an issue where distbuild would build the same artifact more than once. The problem occurs with a single distbuild controller, if multiple initiators request builds of the same thing at roughly the same time (which scripts/release-build in definitions.git does). This change also means that multiple distbuild controllers sharing a single artifact cache will be smart about sharing built artifacts. It does not mean that distbuild can handle having built artifacts removed from the cache while it is building stuff. The number of HTTP requests made to the shared artifact cache is higher with this patch, but these seem to take no more than 1 second and we only ever need to run one request before starting more builds, so there should be no noticable impact on performance. Change-Id: Ib3246219a10ca95d40b8a21bd0fe53f32e46c1c9
* distbuild: Add docstrings to BuildController state machineSam Thursfield2015-06-231-2/+96
| | | | | | | Hopefully this makes the code a little less cryptic. No functional changes. Change-Id: I615810e4eacdd5454731e07387b1dbb9eb348fd5
* Fix crash in `morph distbuild` commandSam Thursfield2015-06-231-1/+1
| | | | | | | | This was causing: UnboundLocalError: local variable 'original_ref' referenced before assignment Change-Id: I46e4b5d527d9ac5480a3d1fe5e6d631f0b7279dc
* Make `morph show-build-log` look in local repo cache for build logsSam Thursfield2015-06-221-21/+33
| | | | | | | This makes it more useful and saves people from poking around in the cache in order to dig up build logs. Change-Id: I8e062c5c32b01aca0df54e1974ead3c3b3134cc3
* Make more commands work outside a system-branch/workspaceSam Thursfield2015-06-224-67/+61
| | | | | | | | | | | | | | | | This makes `morph get-chunk-details`, `morph get-repo` and `morph show-build-log` work in any Git checkout of definitions.git. These are all of the commands outside of the deprecated branch_and_merge_plugin that take notice of system branches. The DefinitionsRepo.relative_path_to_chunk() function is changed a bit. It actually only existed for the `get-repo` command to use, but it turns out that it did the wrong thing by returning a long path for the repo (e.g. baserock/baserock/fhs-dirs) instead of a short one (fhs-dirs). The latter is less typing, and is the behaviour expected by the `get-repo` yarn tests, so it now does that. Change-Id: I430b540b3b0f309cf7018e0b8236f0e8a9042d89
* Determine whether to include_local_changes from app.settingsSam Thursfield2015-06-223-9/+5
| | | | | | | Previously callers to DefinitionsRepoWithApp.source_pool() could override the user's value, but that's not actually used anywhere. Change-Id: I43b53e7b9fc937886c8e6e95947e5e2b6776d085
* Raise exception if show-build-log doesn't find the build logSam Thursfield2015-06-191-5/+14
| | | | | | | | | | | | | Previously it would print nothing and then exit with success. Better to tell the user that an error occurred. Example of the new error: ERROR: No build log for artifact 6fb39673b8f9a1c9848063f5132aa958ffa75f2be61a8dde68ebb11f5a3c4a5f found on cache server http://cache.baserock.org:8080/ Change-Id: Icf8ceef60eb497ff90e00391d442a394e3d76f10
* Fix `morph show-build-log` for chunks of a different architectureSam Thursfield2015-06-191-0/+6
| | | | | | | | Previously if you tried to view the log on an x86_32 machine for a chunk that was build on ARM, it'd give a spurious error saying "Are you trying to cross-build?" Change-Id: I19c3781e0951ecb4161f06fd8b3a0c8ea5bfef9d
* localrepocache: Count freshly cloned repositories as updatedRichard Maw2015-06-171-1/+4
| | | | | | | This fixes requires_update_for_ref when it is given a non-fixed ref and it is retrieved from a call to get_updated_repo. Change-Id: Icbcf2e4ec45bd559c6bcb450ceb4a8861b56f654
* Fix anchor yarnRichard Ipsum2015-06-171-1/+8
| | | | | | | This yarn was failing 'cause of a missing chunk morph rather than a failure to push Change-Id: I70d79b1b9ec972cebde825d90c039666867bb1fa
* Add script to run a distbuild network on the local machineSam Thursfield2015-06-171-0/+523
| | | | Change-Id: I8d3f3ec6a1796b06b32e43dc4839360ff1cc2d86
* Don't ignore the 'cwd' parameterSam Thursfield2015-06-161-1/+1
| | | | Thanks to Richard Maw for suggesting this fixup.
* Expose reset_workdir in GitDirectory classRichard Ipsum2015-06-161-0/+6
| | | | Change-Id: Ib2d7bd31bea49c052a59582524382df6b931a31f
* Swap repr() for str() in ref add errmsgRichard Ipsum2015-06-161-1/+1
| | | | | | | | | | | | | | | | | | | | Old message: ERROR: Adding ref refs/heads/baserock/builds/review/javier_jard_n/foundation_core/d3401783ea054fc18ee56ccdb0030d0a with commit 1c60a89a98c5ee532fefd363240b06870ada02f5 failed in git repository located at /src/definitions: AppException() New message: ERROR: Adding ref refs/heads/baserock/builds/review/javier_jard_n/foundation_core/d3401783ea054fc18ee56ccdb0030d0a with commit 1c60a89a98c5ee532fefd363240b06870ada02f5 failed in git repository located at /src/definitions: Command failed: git update-ref refs/heads/baserock/builds/review/javier_jard_n/foundation_core/d3401783ea054fc18ee56ccdb0030d0a 1c60a89a98c5ee532fefd363240b06870ada02f5... Change-Id: Idc6a47388f53d358b7dfc2c0f7fa82eefbc92630
* Improve error when local HEAD of definitions repo is not found in remoteSam Thursfield2015-06-163-7/+30
| | | | | | | | | | | | | | | | | | Old error: ERROR: Git directory /build/cache/gits/git___git_baserock_org_baserock_baserock_definitions has no commit at ref 5046c3a0e4fd587c23f7c6a9e0d0b50d1914dcca^{commit}. New error: ERROR: Commit 5046c3a0e4fd587c23f7c6a9e0d0b50d1914dcca wasn't found in the "origin" remote git://git.baserock.org/baserock/baserock/definitions. You either need to push your local commits on branch xxx to "origin", or use the --local-changes=include feature. Change-Id: I0c3658e9cd27c23f40653662ba7e4ba58b7892de
* Use DefinitionsRepo class in deploy pluginSam Thursfield2015-06-162-92/+77
| | | | | | | | | | This allows you to run `morph deploy` from any Git checkout of definitions.git. This also changes `morph help-extensions` to use the DefinitionsRepo class, as the code overlaps. Change-Id: I64c48f59c8ec5aebc7169f3b4b4abbb759bd0b9a
* Use DefinitionsRepo in build commandSam Thursfield2015-06-163-147/+81
| | | | | | | | | This allows using `morph build`, `morph distbuild` and `morph distbuild-start` from any Git checkout of a definitions.git repo, so nobody needs to use `morph checkout` or `morph branch` if they don't want to. Change-Id: I5fdfae0f8bec1953893e26f0d227e289da11fa84
* Add DefinitionsRepo classSam Thursfield2015-06-166-39/+521
| | | | | | | | | | | | | | The intention is for this class to take over the from the Workspace and SystemBranch classes. It allows Morph to load and parse definitions from a Git repo, without requiring the user to run `morph checkout` or `morph branch`: it can operate from any normal Git repository. The class behaves differently when the Git repository is inside a Morph system-branch checkout made with `morph branch` or `morph checkout`, to avoid changing things under the feet of people who are used to those commands. Change-Id: I52a898efb9f6fb7f7e94c65b9ed38516bd51f49d
* Treat True and False as actual commands, rather than booleans.Jim MacArthur2015-06-161-0/+3
| | | | | | | | | | | It's quite easy to forget that "true" and "false" are special words in YAML, and write "false" to halt the build process while debugging. This was treated as a Boolean instead of a string, so causes an unhelpful error in morph. Since there is no use for booleans in morphologies, they should be treated as strings. Change-Id: I7c872f9696611920febec5f375b599eee89d040e
* buildsystem: Comment strip commandRichard Maw2015-06-121-0/+7
| | | | Change-Id: Ib8ed113731590b3c9bc3559fb07820bd25c462b8
* sourceresolver: Support version 5Richard Maw2015-06-121-1/+1
| | | | | | | | This adds support for strip commands, and deployment extensions that rely on python libraries being available alongside the extensions in the definitions repository. Change-Id: I23dafd4968002037d182507762b09147f87bf469
* Set PYTHONPATH when running deployment extensionsAdam Coldrick2015-06-121-0/+8
| | | | | | | | | | | | | After moving deployment extensions into the definitions repository, but they need access to shared code, so deployment extensions need to import code which lives in definitions. However morph runs a copy of them in a temporary directory. Version 5 will allow deployment extensions to depend only on code which is also in definitions and the Python standard library, though they may also include code from elsewhere as described in PYTHONPATH. Change-Id: I998f01830656a5118bba1e579f649ec98f5f82c6
* cachekey/builder: Use and cache strip commandsRichard Maw2015-06-122-6/+12
| | | | Change-Id: I19a6c31979aa36ff3c03f41e16e2d25ef407533b
* sourceresolver: Use versioned morphology loaderRichard Maw2015-06-121-1/+2
| | | | | | | | | | | | We don't use this globally, since other users of the MorphologyLoader don't need them to be aware of strip commands yet, and a more significant rework would be required to allow the injection of this context, because previously the MorpohologyLoader did not need any, so code which used the MorphologyLoader just created one as they needed it, rather than allowing one to be passed in where the context was available. Change-Id: Iea707a1cb2c631dd6f251b5b989d31e192f2387d
* morphloader: Smoke test strip command inclusionRichard Maw2015-06-121-0/+10
| | | | Change-Id: Icd8858dbdbb45a636641f7c5b8ab540a8376acc7
* morphloader: Allow build-system lookup to be customisedRichard Maw2015-06-121-3/+5
| | | | | | | This defaults to the default, and only useful behaviour at this point. It is there so that tests may mock it out. Change-Id: I17499fc1bb0a1ad39da2ac836a2946b1a0ed5abe
* morphloader: When given definitions v5, include strip commandsRichard Maw2015-06-121-0/+9
| | | | Change-Id: Ib64e4f823de129a3a5a78eb1db6a4e0f6da03928
* buildsystems: Add strip commandsRichard Maw2015-06-121-0/+21
| | | | | | | This adds strip commands to all build systems, that will be hooked up into the cache and build logic. Change-Id: I37ad3e43311a417a949e7dfef860a50fdf6b8c43
* sourceresolver: Re-order method definitions in use orderRichard Maw2015-06-121-74/+74
| | | | Change-Id: I66560dfb0e97c1d55a4e2399f81747644eb6d74e
* sourceresolver: Pass all hidden stateRichard Maw2015-06-122-112/+164
| | | | Change-Id: I72327a2fdb091fc742369af68c8ebfe16f34be5e
* Fix test suiteSam Thursfield2015-06-101-2/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The test suite was failing in my Baserock 15.19 chroot with: FAILURE: test_commit_tree (gitdir_tests.GitDirectoryContentsTests) Traceback (most recent call last): File "morphlib/gitdir_tests.py", line 294, in test_commit_tree self.assertEqual(expected, gd.get_commit_contents(commit).split('\n')) AssertionError: Lists differ: ['tree 01d830ae9bae1a9970a9f14... != ['tree 01d830ae9bae1a9970a9f14... First differing element 2: author Author Name <author@email> 683074800 +0000 author Author Name <author@email> 683074800 +0100 ['tree 01d830ae9bae1a9970a9f1491c914ad177f8afce', 'parent 1240834484cebc4ba8cc40cd5b76f6dffd937a50', - 'author Author Name <author@email> 683074800 +0000', ? ^ + 'author Author Name <author@email> 683074800 +0100', ? ^ - 'committer Committer Name <committer@email> 683074800 +0000', ? ^ + 'committer Committer Name <committer@email> 683074800 +0100', ? ^ '', 'MESSAGE', ''] 1 failures, 0 errors 1543 excluded statements 57 excluded modules Time: 8.4 s Change-Id: If03e7ccbb5e3415eead9dcbcf908d3d2717e8fe0
* CacheKeyComputer: Only attempt to include commands present in morphologyRichard Maw2015-06-051-1/+2
| | | | | | | | The set of commands is potentially extendable, and it's easier to accept optional keys than get the list of potential fields from the build system. Change-Id: I0d876112db43637661e9548472a9fb191ea88268
* morphloader: Hoist buildsystem lookup outside of loopsRichard Maw2015-06-051-6/+6
| | | | Change-Id: If548a9962d5e70480f7eaba6ab6596465975e894
* morphloader: Add test-commands to key orderRichard Maw2015-06-051-0/+3
| | | | Change-Id: I01b3132c9fb27f1c0277ffe5eb0166e489312e38
* sourceresolver: bind util.sanitise_morphology_pathRichard Maw2015-06-051-3/+4
| | | | | | It's too much of a mouthful to use a qualified import. Change-Id: Ide5695e49fd6188b520fecce9d6b076fd7280b8e
* sourceresolver: Remove cache_repo_locallyRichard Maw2015-06-052-20/+9
| | | | Change-Id: Ib8281c4030c42b61e298d6cc52f150a02384ed96
* sourceresolver: Use context managers for cleanup and cache writebackRichard Maw2015-06-051-17/+17
| | | | Change-Id: I895776bfd57ca6a14997c5535355b259d827b3a6
* morphlib: Use new temp_dir helper context managerRichard Maw2015-06-054-59/+40
| | | | Change-Id: Ie4e024a63f2ab1c7ea66f2cbedaef99c9adf5e69