|
@@ -1,5 +1,6 @@
|
|
|
Usm.Manifest manifest = null;
|
|
Usm.Manifest manifest = null;
|
|
|
string? build_path = null;
|
|
string? build_path = null;
|
|
|
|
|
+bool replace_provides = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
public static int manifest_main(string[] args) {
|
|
public static int manifest_main(string[] args) {
|
|
@@ -11,8 +12,17 @@ public static int manifest_main(string[] args) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
var verb = args[1];
|
|
var verb = args[1];
|
|
|
-
|
|
|
|
|
- if(verb != "remove" && verb != "acquire" && verb != "install" && verb != "package" && verb != "autoprovides") {
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // Check for --replace flag for autoprovides
|
|
|
|
|
+ if(verb == "autoprovides") {
|
|
|
|
|
+ for(int i = 2; i < args.length; i++) {
|
|
|
|
|
+ if(args[i] == "--replace") {
|
|
|
|
|
+ replace_provides = true;
|
|
|
|
|
+ } else if(build_path == null) {
|
|
|
|
|
+ build_path = args[i];
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if(verb != "remove" && verb != "acquire" && verb != "install" && verb != "package") {
|
|
|
if(args.length < 3) {
|
|
if(args.length < 3) {
|
|
|
manifest_usage();
|
|
manifest_usage();
|
|
|
return 255;
|
|
return 255;
|
|
@@ -78,7 +88,7 @@ public static int manifest_main(string[] args) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void manifest_usage() {
|
|
private void manifest_usage() {
|
|
|
- printerr("USAGE:\n\tusm manifest build <build path>\n\tusm manifest install <build path>\n\tusm manifest remove\nusm manifest acquire\n");
|
|
|
|
|
|
|
+ printerr("USAGE:\n\tusm manifest build <build path>\n\tusm manifest install <build path>\n\tusm manifest remove\nusm manifest acquire\nusm manifest autoprovides [--replace] [build path]\n");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -404,8 +414,40 @@ private int autoprovides() {
|
|
|
if(provides.any()) {
|
|
if(provides.any()) {
|
|
|
json = json.substring(0, json.length - 2);
|
|
json = json.substring(0, json.length - 2);
|
|
|
}
|
|
}
|
|
|
|
|
+ json += "\n}";
|
|
|
|
|
|
|
|
- print(@"$json\n}\n");
|
|
|
|
|
|
|
+ if(replace_provides) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // Update the manifest's provides property
|
|
|
|
|
+ var new_provides = new Invercargill.DataStructures.Dictionary<Usm.ResourceRef, Usm.ManifestFile>();
|
|
|
|
|
+ foreach (var item in provides) {
|
|
|
|
|
+ new_provides[new Usm.ResourceRef(item)] = new Usm.ManifestFile.from_string("as-expected");
|
|
|
|
|
+ }
|
|
|
|
|
+ manifest.provides = new_provides;
|
|
|
|
|
+
|
|
|
|
|
+ // Serialize the updated manifest back to JSON
|
|
|
|
|
+ var mapper = Usm.Manifest.get_mapper();
|
|
|
|
|
+ var properties = mapper.map_from(manifest);
|
|
|
|
|
+ var json_element = new InvercargillJson.JsonElement.from_properties(properties);
|
|
|
|
|
+ var json_string = json_element.stringify(true);
|
|
|
|
|
+
|
|
|
|
|
+ // Write the updated manifest to file
|
|
|
|
|
+ var file = File.new_for_path("MANIFEST.usm");
|
|
|
|
|
+ var data_stream = new DataOutputStream(file.replace(null, false, FileCreateFlags.REPLACE_DESTINATION));
|
|
|
|
|
+ data_stream.put_string(json_string);
|
|
|
|
|
+
|
|
|
|
|
+ printerr("Successfully updated 'provides' property in MANIFEST.usm\n");
|
|
|
|
|
+ }
|
|
|
|
|
+ catch(Error e) {
|
|
|
|
|
+ printerr(@"Error updating MANIFEST.usm: $(e.message)\n");
|
|
|
|
|
+ printerr("Original file left unchanged. Generated provides:\n");
|
|
|
|
|
+ print(@"$json\n");
|
|
|
|
|
+ return 249;
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ print(@"$json\n");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
|
catch(Error e) {
|
|
catch(Error e) {
|