|
|
@@ -35,6 +35,9 @@ namespace Usm {
|
|
|
// 3. Build packages
|
|
|
do_for(lot, build_package, TransactionTask.BUILDING);
|
|
|
|
|
|
+ // 4. Test packages
|
|
|
+ do_for(lot, test_package, TransactionTask.TESTING);
|
|
|
+
|
|
|
// 5. Install packages
|
|
|
do_for(lot, install_package, TransactionTask.INSTALLING);
|
|
|
}
|
|
|
@@ -65,7 +68,7 @@ namespace Usm {
|
|
|
}
|
|
|
|
|
|
public void strategise() throws TransactionError {
|
|
|
- task_count = (to_install.count() * 4) + (to_remove.count() * 3) + 1;
|
|
|
+ task_count = (to_install.count() * 5) + (to_remove.count() * 3) + 1;
|
|
|
uint strategise_worst_case_task_count = (to_remove.count() * to_remove.count()) + (to_install.count() * to_install.count());
|
|
|
uint strategise_current_task = 0;
|
|
|
|
|
|
@@ -212,6 +215,21 @@ namespace Usm {
|
|
|
build_proc.wait_check();
|
|
|
}
|
|
|
|
|
|
+ private void test_package(CachedPackage package) throws Error {
|
|
|
+ var source_dir = package.get_source_directory();
|
|
|
+ var build_dir = package.get_build_directory();
|
|
|
+
|
|
|
+ // "cd" into the source directory and read the manifest
|
|
|
+ Environment.set_current_dir(source_dir);
|
|
|
+ var manifest = new Usm.Manifest.from_file("MANIFEST.usm");
|
|
|
+
|
|
|
+ // Run test process if present
|
|
|
+ var test_proc = manifest.run_test(build_dir, SubprocessFlags.STDOUT_SILENCE);
|
|
|
+ if(test_proc != null) {
|
|
|
+ test_proc.wait_check();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void remove_package(CachedPackage package) throws Error {
|
|
|
// Get source and build directories
|
|
|
var source_dir = package.get_source_directory();
|
|
|
@@ -274,29 +292,32 @@ namespace Usm {
|
|
|
STRATEGISING,
|
|
|
UNPACKING,
|
|
|
BUILDING,
|
|
|
+ TESTING,
|
|
|
REMOVING,
|
|
|
INSTALLING,
|
|
|
CLEANING_UP;
|
|
|
|
|
|
- public string get_verb() {
|
|
|
- switch (this) {
|
|
|
- case STRATEGISING:
|
|
|
- return "preparing a strategy for";
|
|
|
- case UNPACKING:
|
|
|
- return "unpacking";
|
|
|
- case BUILDING:
|
|
|
- return "building";
|
|
|
- case REMOVING:
|
|
|
- return "removing";
|
|
|
- case INSTALLING:
|
|
|
- return "installing";
|
|
|
- case CLEANING_UP:
|
|
|
- return "cleaning up";
|
|
|
- default:
|
|
|
- assert_not_reached();
|
|
|
- }
|
|
|
+ public string get_verb() {
|
|
|
+ switch (this) {
|
|
|
+ case STRATEGISING:
|
|
|
+ return "preparing a strategy for";
|
|
|
+ case UNPACKING:
|
|
|
+ return "unpacking";
|
|
|
+ case BUILDING:
|
|
|
+ return "building";
|
|
|
+ case TESTING:
|
|
|
+ return "testing";
|
|
|
+ case REMOVING:
|
|
|
+ return "removing";
|
|
|
+ case INSTALLING:
|
|
|
+ return "installing";
|
|
|
+ case CLEANING_UP:
|
|
|
+ return "cleaning up";
|
|
|
+ default:
|
|
|
+ assert_not_reached();
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
public errordomain TransactionError {
|
|
|
|