| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
|\
| |
| |
| | |
Reviewed-by: Richard Maw
|
| | |
|
| | |
|
|/ |
|
|\ |
|
|/
|
|
|
|
| |
Previous fix only quoted URLs, which fixed petrify --no-git-update, but not the
whole problem, quoting ref and filename prevents other problems that may be
caused by non URL friendly characters.
|
|\ |
|
|/ |
|
|\ |
|
|/ |
|
|\
| |
| |
| | |
'remotes/origin/baserock/richardmaw/S9475/refactor-build-cmd-v3'
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It now does not push branches as this is not necessary to locate the
artifact.
It still makes temporary build branches, since it is assumed that if
you have changes in your workspace, it's preferable for the deploy to
fail, rather than think you've deployed something you haven't.
|
| |
| |
| |
| |
| | |
The new build code uses `git update-index --add`, which means it can use
morphologies that haven't previously been added.
|
| |
| |
| |
| | |
The old build is still around for comparison.
|
| |
| |
| |
| |
| |
| | |
This uses all the new APIs, so the code is shared across morphlib and
unit tested rather than everything being in one massive plugin that is
only black-box tested.
|
| |
| |
| |
| |
| |
| |
| | |
This is an abstraction on top of SystemBranchDirectories, providing the
ability to add uncommitted changes to the temporary build branch, push
temporary build branches and retrieve the correct repository URI and ref
to build the system.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Now it will optionally clean up on success based on a constructor
parameter.
It can be later cleaned up explicitly by calling close().
It is called close, rather than something more obvious, like cleanup(),
since it means the manager can be re-used with contextlib.closing().
This now means that using the Managers without a context manager is less
ugly, since you can explicitly call .close() in a finally block.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This was previously a private method of the branch and merge
plugin, but it's useful to other plugins, so has been moved to the
SystemBranchDirectory class, where everything else can get to it.
It has an unpleasant amount of coupling to other classes, but in a *good*
object oriented design it would either be a tiny module on its own,
or not exist and leave all its users to re-implement the same logic
multiple ways, so we've opted for a less clean, but more useful design.
It is left un-covered by the unit tests, since it requires a great deal
of instrumentation to test, at which point it may be best to leave it
to integration tests.
|
| |
| |
| |
| |
| |
| | |
It doesn't make sense to be able to specify an architecture from the
IMPLEMENTS name, since you either need your architecture for something
to build, or testarch for something that consistently doesn't build.
|
| |
| |
| |
| | |
It saves some boilerplate.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Bootstrap chunks don't make it into the final system, so there needs to
be an extra check for empty systems after the sources have been collected.
This was complicated slightly by the fact that if you try to build a chunk
directly you will have no strata in your sources, hence no non-bootstrap
chunks, but validation for having been told to build a chunk is best
handled later.
This amends the old yarns that depended on building a bootstrap chunk
and adds a new one that explicitly builds a system with bootstrap
chunks.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
It doesn't currently make sense to build a system which contains no
strata. We may later add other fields, such as initramfs to contribute
to the system's artifact, but until then it's another bug to trip over.
This uses collections.Sequence for checking the type of the systems entry
in the morphology as a style choice, though it allows more flexibility
if the types in the parsed morphology change.
|
| |
| |
| |
| |
| |
| |
| |
| | |
This was omittted from the MorphologyLoader due to cluster morphologies
being added at about the same time.
This bug escaped detection since the MorphologyLoader was not required
to deploy. It soon will be.
|
| |
| |
| |
| |
| | |
Dedicated exceptions allow more fine-grained exception catching and can
have extra data.
|
|/
|
|
|
| |
Set -e meant that the stderr could never be re-output, catching the
return code and re-outputting was not sufficient.
|
|\ |
|
| |\
| | |
| | |
| | | |
Reviewed-by: Lars Wirzenius
|
| |/ |
|
|\ \
| |/
|/|
| | |
'remotes/origin/baserock/ps/show-stratum-versions-in-build'
|
| | |
|
|\ \
| |/
|/|
| | |
'origin/baserock/richardmaw/S9475/build-refactor-foundations-v2'
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This adds a LocalRefManager, which handles ref updates to local
repositories (i.e. your workspace).
It provides proxy methods for ref updates to a set of repositories.
If an exception occurs in the body of the context manager, the updates
will be rolled back to before the context manager was entered.
The purpose for using a LocalRefManager instead of making the changes to
the repositories directly, is to provide atomic updates to a set of refs
in a set of repositories, where all refs are updated, or none are.
This also adds a RemoteRefManager, which handles pushing branches to
remote repositories.
It provides a proxy push method, which will delete pushed branches, and
re-push deleted branches after the context manager exits.
Its purpose, instead of providing atomic updates to remote repositories,
is to provide temporary branches. This is because it is used to provide
temporary build branches. The difference between atomic update and
temporary push, is that the remote branches are deleted when the context
is left, rather than kept, as LocalRefManager does.
The RemoteRefManager currently cannot provide the same atomicity
guarantees as the LocalRefManager, so if there is a push between the
branch being created and the RemoteRefManager cleaning it up, that change
is lost without RemoteRefManager even knowing it existed.
Git 1.8.5 will add functionality to make this possible.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Remotes have a push method, which takes multiple RefSpecs, runs git push
using arguments derived from the set of refspecs, then returns the
push's result.
If it fails the push, it will return the result in the exception.
|
| | |
|
| |
| |
| |
| | |
Operations on remotes are now accessed through this proxy object.
|
| | |
|
| |
| |
| |
| |
| | |
This is used to create commit objects. This is used by build without
commit to provide the behind-the-scenes history.
|
| |
| |
| |
| |
| | |
This generates a tree object from the index.
This can then be used to create a commit.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This is like GitIndex.add_files_from_index_info, but uses the working
tree and a list of paths. This is more convenient when the changes exist
in the working tree.
The comment describes its relationship with
GitIndex.add_files_from_index_info, but it is faster, since it calls out
to `git add` rather than calling out to `git hash-object` for every file.
|
| |
| |
| |
| |
| |
| | |
This is used to add files directly to the index, without touching the
working tree. This is used in the build without commit code for creating
new morphologies pointing to different branches.
|
| |
| |
| |
| |
| |
| |
| | |
This is used to set the state of the index to that of a previously known
commit. This is needed for the build without commit logic, so that
commits generated are that of the last commit in the repository and
anything uncommitted.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This represents the state of the index of a GitDirectory.
Methods that use the index are now used via the GitIndex class, rather
than using the default index, as previously used when the methods were
in GitDirectory.
GitIndex may be constructed with an alternative path, which can be used
to manipulate a git checkout without altering a developer's view of the
repository i.e. The working tree and default index.
This is needed for `morph build` and `morph deploy` to handle the build
without commit logic.
|
| |
| |
| |
| | |
This is needed for making commits without touching the workspace.
|
| |
| |
| |
| |
| |
| |
| |
| | |
This is used to split a large iterable into more manageable chunks.
This is important when a consumer can only handle so much input at once
e.g. A program can take a large, but finite number of arguments, xargs
exists to handle this for shell programs.
|
| |
| |
| |
| |
| |
| |
| |
| | |
The set of helpers isn't helping for re-usability, since every new use
for the traverse_specs method is different enough that it is only used
in one place.
So just export traverse_specs itself and be done with it.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Some APIs should take SHA1 object IDs, there needs to be a way to get
one from a ref. To handle this, we add APIs for getting either the
commit or the tree pointed to by the ref.
Commits are provided because we need to create commits from
existing commits and update refs from existing values.
Trees are provided because we need trees to create commits, and we can
read trees into the index to eventually create another tree.
|
| |
| |
| |
| |
| |
| |
| | |
We need to use cat-file for files by SHA1, commits by SHA1 and files by
ref and path, so provide access in separate methods, since while it's
all the same thing "under the hood", it avoids the user needing to know
the command-line syntax.
|