| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| | |
treat subdirectores as subbuilds via cmd line
|
| | |
|
| | |
|
|/ |
|
| |
|
|
|
|
|
| |
to allow these to work with the dynamic configuration
features .copy and DynamicOverride
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
this fixes a bug where finalBuild would over eagerly go down all the way
down to the outermost build instead of stopping at the one requested.
Now it checks the new argument and stops there.
This is necessary to allow having one build depend on another build in
order to embed it in a type-safe way and have access to it’s tasks.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code is much simpler now.
Now cbt sub-tasks are separated by . instead of spaces to
unify the syntax with method calls Scala. Also the reflective
code now works not only on builds but any kind of values,
so zero argument members of any types of return values can
simply be called.
This is also a large step towards detangling the reflective
lookup from cbt and turning it into a fully fletched
shell to Scala "native" call solution.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This should allow for build to add other builds to their dependencies
and interact with them in a type-safe way. And ever regardless it seems
like good practice to never have the same class existing in the same
package or the top-level package even if they don’t end up on the same
classpath. This might also help make stack traces easier to understand.
Also improve error messages for mistakes with the build class, e.g.
constructor, super classes, etc.
|
|
|
|
|
| |
caused by multiple root package Main classes from different subproject
or test projects ending up on the same classpath
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
and prepares for allowing `run` and `runFlat` at
Dependency instead of Build level
|
|
|
|
|
|
| |
makes more sense as multiple projects with the same projectDirectory
but different sources and targets can make sense e.g. for sbt directory
structure, etc
|
| |
|
| |
|
|
|
|
|
| |
by replacing context.projectDirectory by workingDirectory and using
it as the default but allowing it to being overridden
|
| |
|
|
|
|
|
|
|
|
| |
command which was previously hard-coded
This will allow multi-project builds, too but we should first fix
caching across instances and GitDependencies on sub-builds within
other repositories.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|\
| |
| | |
Support custom Dotty compiler
|
| | |
|
|\|
| |
| | |
better caching and change propagation fixing link-time errors
|
| | |
|
| |
| |
| |
| |
| |
| | |
using lastModified instead of a non-idempotent needsUpdate flag
this fixes a bug where dependees would not be rebuilt if cbt exited
or was killed after dependencies were already rebuilt.
|
| | |
|
| |
| |
| |
| |
| | |
this will make it possible to access lastModified times and cache them
in the following commits
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The concurrent hashmap approach to classloader caching was flawed.
Assume you have two concurrently running builds A and B and projects
P2 and P3 depending on project P1. And assume a time sequence where A
compiles P1, then compiles P2, then P1’s sources change, then B compiles
P1, then A compiles P3. At the end P2 and P3 will have different
versions of P1 as their parent classloaders. This is inconsistent.
The easiest way to work around this is making sure only one thread is
changing the classloader cache during it’s entire run. This would mean
either no concurrency or what we have done here, which is letting
threads work on a copy of the cache and replace the original cache in
the end using an atomic operation. This means the thread that finishes
last wins, but for caching that’s fine. Worst case some things aren’t
cached in a concurrent execution.
This change also means that we don’t need concurrent hashmaps for the
classloader cache anymore since no two theads will access the same
hashmap. We still need a concurrent hashmap for the class caches inside
of the classloaders as multiple threads can access the same
classloaders.
|
| |
| |
| |
| |
| |
| |
| | |
This isn’t type-safe, but re-using that same hashmap for both keys and
classloaders allows to reduce the number of members in Context. Also
we can re-use the same hashMap for other things as well in the coming
commits, e.g. timestamps.
|
| | |
|
| | |
|
|/ |
|
| |
|
|\
| |
| | |
minor cleanups regarding Context
|
| | |
|
| |
| |
| |
| | |
Because BuildBuild is only created if there is a build folder.
|
| |
| |
| |
| |
| | |
Before this when doing `build/$ cbt dependencies` cbt would not show up
because cbt would be using a BaseBuild, not a BuildBuild. Not it does.
|
| | |
|
|/ |
|