summaryrefslogtreecommitdiff
path: root/morphlib
Commit message (Collapse)AuthorAgeFilesLines
* sourceresolver: Fix InvalidRefError when local git cache is out of dateSam Thursfield2015-02-201-7/+11
| | | | | | | | | | | | | Code in sourceresolver.py assumed that resolve_ref() would be called for the chunk repo before get_morphology() was called, so the repo would always be up to date. This wasn't actually true. If your local repo cache was out of date, you might see the following sort of error: InvalidRefError: Git directory /src/cache/gits/git___git_baserock_org_delta_usbutils has no commit at ref c37f146eb2c6642c600f1b025a6d56996b0697ff^{tree}.
* sourceresolver: Always try to read chunk morph files from definitionsSam Thursfield2015-02-201-29/+40
| | | | | | | | | | | | | | | | | | | | | This fixes the 'Morph ignores the chunk morph file I added to definitions' regression introduced in the recent build-graph speedups branch. The new 'detected-chunk-buildsystems' cache associates a (chunk repo, chunk ref) pair with the auto-detected build system. When calculating the build graph, if the is an auto-detected build system known already, that will be used instead of looking for a chunk morphology. There's a flaw here: if the user added or changed the chunk morphology in the definitions repo, the *chunk* ref won't necessarily have changed -- so Morph will ignore the user's changes, if it had already cached an autodetected buildsystem for that repo/ref pair. This doesn't cost much in terms of speed because we're just reading a file from disk. We can still avoid looking in the chunk repo for a chunk morph, because the chunk ref would be different if something had changed in the chunk repo.
* sourceresolver: Fix LsTreeError raised when constructing build graphSam Thursfield2015-02-202-9/+40
| | | | | | | | | | | | | | | | If you had a repo that was not in your local or remote cache in your definitions, Morph might raise LsTreeError and abort. The code was assuming the repo would already be cached in the local cache by the time it got to detecting build systems, but that's not always true -- if the (reponame, ref) pair was already in the 'resolved_trees' cache but the repo had been deleted from the local Git cache, to name one possibility. Also, the remoterepocache.ls_tree operation can fail if the repo is not hosted in the Trove, so we shouldn't abort the program in that case. Finally, this patch removes an unused variable.
* Show a message when the build is startingAdam Coldrick2015-02-181-1/+1
|
* Add tests for sourceresolverAdam Coldrick2015-02-182-10/+341
| | | | | | | | | This only adds tests for the bits which were moved from morphologyfactory into sourceresolver, namely detection of build systems and the '_get_morphology()' function. These are just the morphologyfactory tests reworked slightly to work properly with the modified API.
* Read files from a local clone of definitions where possibleSam Thursfield2015-02-181-1/+30
| | | | | | | | | | | | | | | | | Most morphologies involved in a build are in the definitions repo these days. Currently we read each of them using `git cat-file`, which is slow. It's quicker to check out all the files in one go to a temporary directory and then read them from there. With the current workflow users often have definitions.git checked out on disk. It seems strange to not just read the files from there. There are two reasons why I don't want to do that yet: - there are commands which don't run inside a system branch, which would be broken if we expected to always be in a system branch - there may be local changes in the checked-out repo, and it takes around 5 seconds on each build to check if there aren't any local changes. It actually seems faster to just check out a known clean version from the cache.
* Add a mechanism for extracting all files from a given commit to a dirSam Thursfield2015-02-184-6/+88
| | | | | | This is nice because it's fast. We don't have to copy all the Git history along with it like we do with a clone. And it doesn't touch any files in the cached repo.
* Split up traverse_morphs to improve readabilitySam Thursfield2015-02-181-61/+79
|
* Add an LRU cache for detected build-systemsSam Thursfield2015-02-181-19/+101
| | | | | | | This will speed up builds of chunks which don't have a chunk morph. It won't have much (if any) effect on the speed of the first build, but subsequent builds will be much faster as we won't have to query the git cache.
* Add an LRU cache for resolved tree refsSam Thursfield2015-02-183-30/+75
| | | | | | | | | | | | This uses the PyLRU module, from: <https://pypi.python.org/pypi/pylru/1.0.6>. Python 3.2 and newer provide a built-in LRU cache, but this is specifically for in-memory use. See <http://bugs.python.org/issue17528>. Git commits are immutable, so caching information about their contents is fairly easy and trouble-free. There's no danger of the cache becoming stale.
* Add a cache manager utilising pylru and pickleAdam Coldrick2015-02-181-2/+52
|
* Move MorphologyFactory into SourceResolverSam Thursfield2015-02-184-381/+69
| | | | | There's no need for this stuff to be in a separate class. This allows integrating it with the caching in the SourceResolver class.
* sourceresolver: Add comments and factor out common functionSam Thursfield2015-02-181-13/+15
|
* Fix copyright yearsSam Thursfield2015-02-111-1/+1
|
* distbuild: Refuse to start controller if there are no workers listedSam Thursfield2015-02-111-0/+5
| | | | | | | | This is another situation where builds could hang forever if the server is misconfigured. Longer term, workers should be able to come and go dynamically without needing to reconfigure and restart the controller process.
* Remove two unused functionsSam Thursfield2015-02-111-17/+0
|
* Remove some ununsed importsSam Thursfield2015-02-111-4/+0
|
* Fix failing coverage testSam Thursfield2015-02-031-2/+2
|
* Update copyright years so ./check passesSam Thursfield2015-02-032-2/+2
|
* Merge branch 'baserock/tiagogomes/armv8'Tiago Gomes2015-02-031-1/+5
|\ | | | | | | | | | | Reviewed by * Pedro Alvarez * Sam Thursfield
| * Add logic for contructing the correct GNU tripet for ARMv8Tiago Gomes2015-02-031-1/+5
| |
* | Remove checks for NETWORK_CONFIG and eth0 and eth1 in itJim MacArthur2015-01-271-14/+0
| | | | | | | | | | | | | | | | network_config isn't used anywhere in this function. The purpose of this function (getting the name of an appropriate host-only network interface) doesn't seem to depend on it either. eth0 and eth1 won't always be present (several Baserock systems will have enp0s3, etc). So I think these checks should be removed.
* | Fix copyrightRichard Ipsum2015-01-231-1/+1
| |
* | Treat path given to deploy cmd as relative to cwdRichard Ipsum2015-01-231-2/+4
| |
* | Treat path given to build cmd as relative to cwdRichard Ipsum2015-01-231-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently the build commands treat the system argument as a path relative to the root repo. This means that regardless of your working directory you must run morph build systems/foo-system.morph This behaviour can be confusing, for example when your working directory is $systembranch/definitions/systems you might expect to be able to run morph build foo-system.morph especially since most shells would tab-complete the filename for you. At the moment running the above command from $systembranch/definitions/systems would result in an error, because morph would look for $systembranch/definitions/foo-system.morph rather than $systembranch/definitions/systems/foo-system.morph This behaviour also means you can't give the morph build commands an absolute path to a system morph. This patch changes the treatment of the system arg so that it is interpreted relative to the current working directory.
* | Add relative_to_root_repo to sysbranchdirRichard Ipsum2015-01-231-0/+6
|/
* Add armv8l64 and armv8b64 to list of valid architecturesJosh Malkinson2015-01-212-5/+5
|
* Fix line > 79 characters that was breaking ./checkSam Thursfield2015-01-191-1/+2
|
* Merge branch 'sam/optional-temporary-build-branches'Sam Thursfield2015-01-193-26/+95
|\ | | | | | | | | Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk> Reviewed-By: Richard Ipsum <richard.ipsum@codethink.co.uk>
| * Make temporary build branches optionalSam Thursfield2015-01-063-26/+95
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Not everyone is a fan of the `morph build` magic that collects up your changes and puts them in a temporary branch. Now you can disable it by setting 'local-changes=ignore' in your morph.conf file. This speeds up `morph build` and `morph deploy` by 5-10 seconds on my machine. I looked an option to make `morph build` warn if there are uncommitted changes. I found that with a cold cache, it takes about 5 seconds on my machine to verify that there are no uncommitted changes to a checkout of definitions.git. That defeats the main purpose of this patch for me, so I didn't include the option.
* | Update CopyrightRichard Ipsum2015-01-191-1/+1
| |
* | Correct resolution of error_message_for_containerised_commandline method.Craig Griffiths2015-01-161-1/+1
| |
* | Fix copyright yearsSam Thursfield2015-01-122-2/+2
| |
* | Merge branch 'sam/cached-repo-cleanup'Sam Thursfield2015-01-1214-315/+211
|\ \ | |/ |/| | | | | Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk> Reviewed-By: Richard Maw <richard.maw@codethink.co.uk>
| * Remove unused code from morphlib.gitSam Thursfield2014-12-031-24/+0
| | | | | | | | | | There is still code here that duplicates stuff the GitDirectory class should be doing, I think.
| * Rework CachedRepo to use the GitDirectory class where possibleSam Thursfield2014-12-0314-284/+196
| | | | | | | | | | | | | | | | | | | | | | | | | | This consolidates a bunch of code paths that were previously duplicated. This also changes the API for local cached repos to match the function names GitDirectory uses. Note that the remote repo cache still uses the old names, and should be fixed when time permits. Some unit tests that use the CachedRepo module required a bit of inelegant monkey-patching in order that they continue to work. A better way to do this would be with the 'mock' library (which would need to be added to Baserock 'build' and 'devel' systems before we could use it).
| * Separate resolution of ref->commit and commit->treeSam Thursfield2014-12-021-7/+15
| |
* | Merge remote-tracking branch 'origin/sam/rename-builder2'Sam Thursfield2015-01-055-10/+10
|\ \ | | | | | | | | | | | | Reviewed-By: Pedro Alvarez <pedro.alvarez@codethink.co.uk> Reviewed-By: Richard Ipsum <richard.ipsum@codethink.co.uk>
| * | Rename builder2 module to builderSam Thursfield2014-12-195-9/+9
| | |
* | | Merge remote-tracking branch 'origin/baserock/tiagogomes/sysroot-checks'Sam Thursfield2015-01-022-3/+31
|\ \ \ | | | | | | | | | | | | | | | | Reviewed-By: Paul Sherwood <paul.sherwood@codethink.co.uk> Reviewed-By: Sam Thursfield <sam.thursfield@codethink.co.uk>
| * | | Add some checks to the sysroot deployment extensionTiago Gomes2015-01-022-3/+31
| | | | | | | | | | | | | | | | | | | | | | | | Ensure that a) the deployment directory must not exist b) the extension can not be used to upgrade a system
* | | | Improve logic for displaying command execution to userSam Thursfield2015-01-021-16/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This avoids writing each command to the log file twice, as we did previously. Also, the user-visible message is now only constructed if we are definitely going to write it to the screen (a tiny optimisation). Hopefully the logic is clearer now too.
* | | | Fix logging and display of commandlines being executed by MorphSam Thursfield2015-01-021-6/+7
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We were attempting to display commandlines with correct shell-escaping, but the logic was super broken so users would end up seeing this sort of thing instead: 2015-01-02 10:25:42 # g | i | t | | r | e | v | - | p | a | r | s | e | | - | - | v | e | r | i | f | y | | ' | 9 | 8 | f | e | a | 8 | 7 | b | 7 | 2 | 7 | 2 | 5 | 3 | e | 7 | f | f | 8 | 1 | 0 | 5 | 4 | 3 | 4 | c | 9 | e | a | 9 | 0 | 2 | b | b | 6 | a | 6 | f | 7 | e | ^ | { | c | o | m | m | i | t | } | ' Commandlines should now display as intended, more like this: 2015-01-02 10:57:17 # git rev-parse --verify '9df9643842e4b4d8ece710fe6105f32fa38a0d22^{commit}' This broken logic was introduced as a post-review fixup in merge commit c57952ef44a0f1f161441970fcf2f27a39b0de7c.
* | | Support armv8l, armv8b, aarch64, and aarch64bEmmet Hikory2014-12-192-5/+19
| | | | | | | | | | | | | | | | | | Also add support to allow building compatible architectures on armv8 machines, as per the rationale in the comment in _validate_architecture().
* | | Merge branch 'baserock/richardmaw/bugfix/stagingarea-mounts-inside-destdir-v2'Sam Thursfield2014-12-191-3/+10
|\ \ \ | |/ / |/| | | | | Reviewed-By: Sam Thursfield <sam.thursfield@codethink.co.uk>
| * | Don't mount /dev/shm in bootstrap mode.Sam Thursfield2014-12-191-3/+4
| | | | | | | | | | | | | | | | | | There's no chroot used in bootstrap mode, so the host's /dev/shm can be used, and nothing in the world will be looking to /src/tmp/staging/tmpXXX/dev/shm for anything.
| * | stagingarea: Mount things inside dirnamebaserock/richardmaw/bugfix/stagingarea-mounts-inside-destdir-v2Richard Maw2014-12-121-1/+6
| | |
* | | Merge remote-tracking branch 'petefoth/petefoth/generic-params2'Sam Thursfield2014-12-186-15/+125
|\ \ \ | | | | | | | | | | | | | | | | Reviewed-By: James Thomas <james.thomas@codethink.co.uk> Reviewed-By: Sam Thursfield <sam.thursfield@codethink.co.uk>
| * | | Add 'do not use' warnings to nfsboot write extensionPete Fotheringham2014-12-152-3/+19
| | | |
| * | | Document KERNEL_ARGS write extension parameterPete Fotheringham2014-12-154-0/+33
| | | |