| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit 203f34b2b19b1d3dc51a956ae9329d064ea294dd.
The path inversion logic is still buggy for the case of wanting to keep
the top-level directory writable.
This escaped detection in the test suite because it resulted in
directories two levels down being made read-only, and I was only testing
one level down.
|
|\
| |
| |
| |
| | |
Reviewed-By: Pedro Alvarez <pedro.alvarez@codethink.co.uk>
Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk>
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit c63f4e61f69820c71c2d8e9b96ce9bdec0d476a1.
This change was introduced back when the Baserock system definitions
used named Git refs rather than exact SHA1s. Morph would thus need to
update each repo involved in a build and resolve each ref before it
could build. Now that the system definitions use SHA1s, the 'updating
gits' phase is much less slow.
The problem with forcing 'no-git-update' is that it makes `morph deploy`
depend on the remote repo cache. In the case that all repos involved in
the build are avaiable in the remote repo cache (Trove), there is no
need for them to have been cached locally just to construct a build
graph. But if the network connection to the Trove is unreliable Morph
will need to fall back to the local repo cache. Unless Morph has done a
full local build of the system being built, it might not have every repo
cached locally. Often, cached artifacts from the Trove or distbuild may
be used instead of locally building everything.
In this case the user sees `morph deploy` failing with errors such as:
Repository upstream:binutils-redhat is not cached yet
|
|\
| |
| |
| |
| | |
Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk>
Reviewed-By: Richard Maw <richard.maw@codethink.co.uk>
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
This code is an essential part of 'morph build'. It's quite complex and
really shouldn't be mixed in with the base Application class.
Given a dedicated class we can store some state in the object and avoid
functions with seven parameters, too.
|
|/
|
|
|
|
| |
The MorphologyFactory class only uses the status() function of the
morphlib.Application instance that it gets passed. So make it require
only a status callback.
|
|\
| |
| |
| |
| | |
Reviewed-By: Pedro Alvarez <pedro.alvarez@codethink.co.uk>
Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk>
|
| |
| |
| |
| | |
Clarify that bare repositories are supported, and other fixes.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The GitDirectory() constructor, if passed a 'dirname' that doesn't
contain a '.git' subdirectory, can search upwards to find the real root
of the repository. This is used by the `add-binary`, `push`, and `pull`
commands.
This causes very confusing behaviour in the case that 'dirname' points to
a directory that should be a Git repository, but isn't, and that directory
is a path inside the working tree of another Git repository. Rather than
raising an error, in this case the GitDirectory class would perform
operations on a different repository to the one the caller expected.
This 'search_for_root' behaviour is now opt-in, to avoid confusion.
|
|\ \
| | |
| | |
| | |
| | | |
Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk>
Reviewed-By: Jim MacArtuhur <jim.macarthur@codethink.co.uk>
|
| |/
| |
| |
| |
| | |
This allows checking if a ref exists without requiring the caller
to use a try:, except: block.
|
|\ \
| | |
| | |
| | |
| | |
| | |
| | | |
Reviewed-by:
- Sam Thursfield
- Emmet Hikory
- Paul Sherwood
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This patch solves the issue caused by upgrading a system without
a factory version. Currently we are only using the factory
version to snapshot its orig subvolume to make faster the transfer
of the new content (rsync won't have to send everything).
The default symlink may not be present, but it can't be deleted
easily using system-version-manager.
This is a quick fix, but in the future we may want to not harcode
the path from where we snapshot the orig subvolume. Or improve
system-version-manager to make sure that the default symlink
is always present.
|
|\ \
| |/
|/|
| |
| | |
Reviewed-by: Sam Thursfield <sam.thursfield@codethink.co.uk>
Reviewed-by: Pedro Alvarez <pedro.alvarez@codethink.co.uk>
|
|/
|
|
|
| |
Fix checking for commit object in submodules which their path and
name are not the same.
|
|\
| |
| |
| |
| | |
Reviewed-By: Richard Ipsum <richard.ipsum@codethink.co.uk>
Reviewed-By: Daniel Silverstone <daniel.silverstone@codethink.co.uk>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Morph can appear to hang in situations where it is actually waiting on a
slow network operation. This change gives users a way to see the output
of the subcommands that are doing the network IO (either 'wget', 'git
clone' or 'git remote update').
The status information goes onto stderr, because that is where the
subcommands write it. Morph tends to put its status output on stdout,
but (a) some commands are machine-parsed, such as `serialise-artifact`
and (b) it's tricky to get Git to put status output on stdout.
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
This fixes an issue where various branch-and-merge commands appeared to
be updating Git repos even when --no-git-update was specified. The flag
was actually honoured but the message made it seem as if it was being
ignored.
|
|\ \
| |/
|/|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This removes the last case of global mounting that could cause issues
for being able to run multiple builds in parallel.
There's still concurrent access to caches and git servers that could
cause issues, but with this, it's possible to run morph in the
test-suite in parallel.
Reviewed-by: Daniel Silverstone
Reviewed-by: Sam Thursfield
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| | |
This way the build commands, system integration commands and deployment
extension commands can all share the logic.
|
|/
|
|
|
|
| |
We're going to be passing it "$CHROOT/" as a writable directory by
default, so it needs to be able to tell that it means to leave
everything writable.
|
| |
|
|\
| |
| |
| |
| | |
Reviewed-By: Richard Ipsum <richard.ipsum@codethink.co.uk>
Reviewed-By: Richard Maw <richard.maw@codethink.co.uk>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The recent changes to the BuildCommand.build() function caused distbuild
to break, because I didn't make the same change to the
InitiatorBuildCommand.build() function but did change how it was called.
This commit adds the ability to have optional fields in distbuild
messages. This is used to add an optional 'original_ref' field, which
will get passed to `morph serialise-artifact` by new distbuild
controllers, and will be ignored by older ones.
|
|/ |
|
|\
| |
| |
| |
| | |
Reviewed-By: Daniel Silverstone <daniel.silverstone@codethink.co.uk>
Reviewed-By: Sam Thursfield <sam.thursfield@codethink.co.uk>
|
| | |
|
| |\
| |/
|/|
| | |
HEAD
|
|\ \
| | |
| | |
| | |
| | |
| | | |
Reviewed-By: Richard Ipsum <richard.ipsum@codethink.co.uk>
Reviewed-By: Richard Maw <richard.maw@codethink.co.uk>
Reviewed-By: Daniel Silverstone <daniel.silverstone@codethink.co.uk>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Most usefully, this patch means that Morph no longer updates its cached
copy of definitions.git every time you run `morph build`.
Also, it prevents confusion in the following situation. Imagine I have
run:
morph checkout baserock:baserock/definitions master
I then wait a while, during which time someone pushes to 'master' in the
definitions.git repo that I cloned from. Now I run:
cd master
morph build systems/whatever.morph
Which commit does it build, the local head of 'master' or the remote
head of 'master'?
The answer, both before and after this patch, is that it builds the
local version of master. But previously, this only happened because of
the magic that we have to detect local changes. With this patch, the
local change detection could be disabled and `morph build` would still
build what the user had checked out as 'master' locally, not whatever
'master' pointed to in the remote repo.
|
| | |
| | |
| | |
| | |
| | | |
This means that we can force the building of a specific commit without
losing the original branch name in the metadata of the resulting system.
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| | |
Rather than take a list of triplets to build, the BuildCommand.build()
function now takes a single repo/ref/morph triplet. Iterating through
multiple sets of triplets is now done in the build plugin.
There are a couple of cosmetic changes to the status output at the start
and end of a build as a result.
|
|\ \
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This stripped out the commit from the patch series on the mailing list
to remove /dev/shm.
Reviewed-by: Sam Thursfield
Reviewed-by: Daniel Silverstone
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This works towards allowing multiple concurrent builds in the same
system, which has the same problem as deployments.
This is the easy bit, since linux-user-chroot has support for bind
mounts and /proc mounts.
We also need to get rid of the /dev/shm mount to be able to build in
parallel though.
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If a build happens, it creates a new network namespace, and if this
happens while you have a disk image mounted, then you can't remove the
mount-point, because the other namespace is using it.
We can avoid the other namespace keeping this mount-point open by
creating the disk image in a private mount namespace, so it never sees
it.
The nicest way to do this is to have every extension run in a private
mount namespace, since you'd have to have extensions re-exec themselves,
since the appropriate system calls aren't exposed very well.
|
|\ \
| | |
| | |
| | |
| | |
| | | |
Reviewed-by: Sam Thursfield
Reviewed-by: Pedro Alvarez
Reviewed-by: Daniel Silverstone
|
| | |
| | |
| | |
| | |
| | | |
These were previously completely untested, so their unsafe mounting
wasn't noticed, but now both are fixed.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
All temporary mounts should be done inside a namespace, so that they
don't interfere with other namespaces.
system-integrations may need capabilities that regular builds don't
have, so they're chrooted, rather than linux-user-chrooted, which means
it's more complicated to do namespaces.
In the absence of a better command for it, we can do this with an
in-lined shell script.
This also stops us using the run-parts inside the system, and executes
the integrations directly.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
It now works when passed a file, rather than a command to run, and
ignores comments and set commands, so the generated preamble is
accepted.
|
|/ / |
|
|\ \
| | |
| | |
| | |
| | | |
Reviewed-By: Adam Coldrick <adam.coldrick@codethink.co.uk>
Reviewed-By: Daniel Silverstone <daniel.silverstone@codethink.co.uk>
|
|/ /
| |
| |
| |
| | |
Previously it was incorrect in the `morph help` output and in Morph's
man page.
|