| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
| |
`morph merge` only worked for a small subset of cases, and has been left
to bit-rot, since we don't use it.
`morph tag` is just a `git tag` when we have petrified definitions
repository. We don't use it, nor do we need it, so it can go away rather
than take up valuable development time fixing it when requirements
change.
`old-foo` have all been superceded by newer versions and are no-longer
used.
|
|
|
|
|
|
|
| |
This was the wrong response to the problem of accidentally checking-out
morph when trying to check out morphs. Now that it's called definitions,
this is irrelevent, and aborting a checkout when this check fails is the
wrong thing to do.
|
|
|
|
|
|
| |
This was originally used by `morph edit`, but since we removed the need
to run `morph edit system stratum` and could shorten it to `morph edit
chunk`, this function is no longer used.
|
|
|
|
|
|
|
| |
- All tests now pass
- The odd case of chunks with the same name but different repo URLs now
correctly informs the user of the multiple checkouts that were done.
- Tidyups
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since we removed ref: fields from the system morph files, some of the logic
in morph edit is no longer needed. In particular, running
morph edit <system> <stratum>
is a no-op. This is because the version of <system> and <stratum> are now
implicit from the context of what we are doing. In other words we're always
working with the current version of <system> and <stratum> from the system
branch we are in.
Because of the complexity of morph's logic, we didn't notice this when
dropping the ref: fields, and we missed the opportunity to simplify our
logic for 'morph edit'
This patch aims to provide the simplest possible implementation of
morph edit:
morph edit <chunk>
It checks all strata for instances of <chunk>, and does what morph edit should
do for the instances it finds.
A later patch can add warnings to help users deal with situations where <chunk>
is not found, or is found more than once.
Also since this changes the syntax of morph, it breaks many of our tests. Later
patches will address that.
|
|
|
|
|
|
| |
When cloning a repository, the files stored using git-fat need to
be pulled. This situation occurs in `morph branch`, `morph edit`,
and `morph checkout`.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
argument
|
| |
|
|\
| |
| |
| |
| | |
Reviewed by: Lars Wirzenius
Reviewed by: Pedro Alvarezwq
|
| | |
|
|\ \
| |/
|/|
| | |
Changed the error (exception) to list all obsolete fields.
|
| | |
|
|\ \
| | |
| | |
| | |
| | | |
Reviewed-by: Lars Wirzenius <lars.wirzenius@codethink.co.uk>
Reviewed-by: Jonathan Maw <jonathan.maw@codethink.co.uk>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This changes the interface of branch-from-image to only take 1 parameter,
the name of the new system branch, as the root repository is loaded from
the metadata.
This was also what the previous version of branch-from-image did, but
that silently ignored the parameter.
Given there are not many users of branch-from-image, I felt it was a
reasonable change.
|
| | | |
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This creates an object that the with statement can use to handle the
context and clean up the workspace if the body raises an exception.
This is roughly equivalent to having a function that takes a callback of
what to do while the branch is being initialized, but with less
boilerplate at the call site.
contextlib is used to create a context manager from a generator
function. This is less verbose than defining a class with __enter__
and __exit__ methods.
|
|/ |
|
| |
|
| |
|
|
|
|
| |
The previous status is currently still available as old-status.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This currently performs the workspace-wide status, but not the
system-branch status functionality of the older status subcommand.
A quick estimate showed the new code to be 5x faster, comparing
# time (echo 2 >/proc/sys/vm/drop_caches; morph status)
System branches in current workspace:
baserock/richardmaw/S8537/ssh-copy-id
baserock/richardmaw/S8564/ro-staging-area
baserock/richardmaw/S8591/lzo-shared
baserock/richardmaw/cliapp-pipefail
baserock/richardmaw/malformed-strata-test
master
tutorial-1/tutorial/master
tutorial-1/tutorial/update-ssh
real 0m2.517s
user 0m0.998s
sys 0m1.482s
# time (echo 2 >/proc/sys/vm/drop_caches; morph new-status)
System branches in current workspace:
baserock/richardmaw/S8537/ssh-copy-id
baserock/richardmaw/S8564/ro-staging-area
baserock/richardmaw/S8591/lzo-shared
baserock/richardmaw/cliapp-pipefail
baserock/richardmaw/malformed-strata-test
master
tutorial-1/tutorial/master
tutorial-1/tutorial/update-ssh
real 0m0.506s
user 0m0.207s
sys 0m0.233s
|
|\
| |
| |
| |
| |
| |
| |
| | |
Reviewed-by: Lars Wirzenius
Reviewed-by: Daniel Silverstone
Daniel gave his +1 with the caveat that he would like tests for
petrifying a system branch other than master.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This also undoes the test suite change to keep it using the old petrify.
Petrify and Unpetrify have the same structure:
1. Set up
2. Load all the morphologies
3. Make changes to the morphologies
4. Write back any changes
This suggests some re-use in the form of passing a function callback to
a morphology visitor.
|
| |
| |
| |
| |
| | |
This includes amending the test suite to use the old petrify, since the
old unpetrify depends on some implementation details of it.
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The test suite checks the output of the foreach command, this requires
repositories to be returned in a stable order.
The order returned from os.listdir differs by the filesystem used.
btrfs returns roughly in insertion order, tmpfs alphabetically.
This allowed the failure to sort pass through unchecked, since I was
testing on btrfs, but people discovered issues when using /tmp, which
is a tmpfs.
To fix this, foreach sorts the result of list_git_directories() by
directory name.
The previous code would always return the root repository first, this
was a unnecessary complication, so now everything is returned
asciibetically and the tests amended to reflect this.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The previous version attempted to separate the output of the commands
run with newlines by printing a newline at the beginning if it wasn't
the first repository.
The check it used was for the first repository was flawed by assuming
that the root repository was the first repository processed.
Since the complication was not worth keeping the output identical, it
has been changed to separate by printing a newline after every command
and the test output has been amended to include the extra trailing
newline.
|
|
|
|
|
|
|
|
| |
This also amends the test suite.
The git apply command to alter the stratum proved inflexible when
anything changed, so it has been replaced by a small in-line python
script.
|
|
|
|
|
| |
It's nicer to get a clean error message explaining what's wrong than a
stack trace.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit 2dc382a2a9ae977b1158002cd2631ec5593959c1, reversing
changes made to 89a019af088ff62459699a6efdadf8ac8fe35dd9.
We decided to restore the old commands for the release, as we weren't
confident the new implementations were correct yet.
To gain that confidence we need to use them, so the old versions are no
longer available, and the new edit code is used when the edit subcommand
is invoked.
Doing so also requires the test suite to use the edit command instead of
new-edit.
|
|
|
|
|
|
|
|
|
| |
Most of the subcommands are available as "old-foo". The exception is
edit, for which we've decided to stick with the old implementation by
default. Thus the new implementation is "new-edit".
This is all meant to be a safety net so that for BR10 we are not stuck
in limbo in case the new implementations are broken in unexpected ways.
|
|
|
|
| |
Suggested by Richard Maw
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a bug fix. The code would previously blithely load the
morphology from the currently checked out ref (plus any local,
uncommitted changes). This is obviously wrong. However, we can't
check out the right ref, either, so the right thing to do is to
"git cat-file" it. But only when the right ref is not checked out.
This is fairly complex behaviour which may not be obvious to users
either. But we'll worry about that later, this is what needs to
happen now, and I don't want to make big behavioural changes in
the middle of a refactoring.
Bug found based on suggestion by Richard Maw.
|
|
|
|
|
|
| |
Test suite currently fails because MorphologyLoader validates differently
from the old MorphologyFactory code, and because MorphSet changes refs
more correctly (including, it seems, build-dependency refs).
|
| |
|
|
|
|
|
| |
For some reason, there was an unused argument in the method. Remove it
from the definition and all call sites.
|
|
|
|
|
|
|
|
| |
It's rather easy to accidentally try to create a system branch of
the `morph` repository rather than the `morphs` repository.
This commit verifies that a checked out branch contains system
morphologies, otherwise it aborts and cleans up.
|
|
|
|
| |
Reviewed-by: Lars Wirzenius and Jonathan Maw on IRC
|
| |
|
| |
|
| |
|
| |
|