EditPackagesCommandlet
This commandlet lets you modify EditPackages from OS commandline. Handy for install scripts.
Usage
ucc package.EditPackagesCommandlet +AddPackage +AddAnother -RemovePackage
Paramaters
Parameter | Description |
–dry-run | Simulate the process. Changes will not be saved. |
+Package | Add a package with the name Package. If it already exists it will be removed first. |
-Package | Remove the package with the name Package. |
Advanced | |
+?Package | Don't add the package when it already exists. '?' can also be used in the commands below. |
+Package@index | Add the package at the given index. |
+Package<Pkg | Add the package before Pkg. If Pkg isn't present it will be appended to the list. |
+Package>Pkg | Add the package after Pkg. If Pkg isn't present it will be appended to the list. |
Note, you must use double quotes around the commands that use the before or after modifier when executing it from a commandline.
Examples
ucc package.EditPackagesCommandlet "+myPackage>Engine" "+MyOtherPackage<myPackage" -MyOldPackage
Source code
/******************************************************************************* EditPackagesCommandlet This commandlet lets you modify EditPackages from OS commandline. Handy for install scripts. Usage: ucc package.EditPackagesCommandlet +AddPackage +AddAnother -RemovePackage +?Package +Package@index +Package<BeforeThisPackage +Package>AfterThisPackage Otherwise it will be added after the list. If the before or after packages don't exist they will be added to the end of the list. Adding a package that already exists will first remove it from the old location. Credits: Switch -- initial code El Muerte -- major improvements *******************************************************************************/ class EditPackagesCommandlet extends Commandlet; /** The contents of this will be appended to the Parms list, this can be used is a subclass of the commandlet. */ var config string CmdArgs; /** the classname of the object to load, that contains the ArrayName */ var string ObjectClass; /** the name of the array to read\write the data to */ var string ArrayName; /** temporary storage of the array list */ var protected array<string> PackagesArray; /** add the package to the list */ function int AddPackage(string pkg, optional int idx) { if (idx == -1) idx = PackagesArray.length; else idx = Clamp(idx, 0, PackagesArray.length); PackagesArray.insert(idx, 1); PackagesArray[idx] = pkg; return idx; } /** remove the package from the list, returns the number of offurances deleted */ function int RemovePackage(string pkg) { local int i, deleted; deleted = 0; for (i = PackagesArray.Length-1; i >= 0; i--) { if (PackagesArray[i] ~= pkg) { PackagesArray.Remove(i, 1); deleted++; } } return deleted; } /** returns the index of a package */ function int IndexOf(string pkg) { local int i; for (i = PackagesArray.Length-1; i >= 0; i--) { if (PackagesArray[i] ~= pkg) { return i; } } return -1; } final function string StripQuotes(string in) { if (Left(in, 1) == "\"") { return mid(in, 1, len(in)-2); } return in; } event int Main( string Parms ) { local class C; local object O; local int i,j,idx; local array<string> Commands; local string cmd, altpkg; local bool bSimulate; bSimulate = false; if (CmdArgs != "") Parms = CmdArgs@Parms; if (Parms == "") { Log( "Nothing to do. See 'ucc help "$HelpCmd$"' for more information.", 'Error' ); return 1; } split(Parms, " ", Commands); // Load class C = class(DynamicLoadObject( ObjectClass, class'Class', true )); if( C == None ) { Log( "Failed to load class: ["$ ObjectClass $"]", 'Error' ); return 1; } // Create object O = new C; if( O == None ) { Log( "Failed to create object of class: ["$ C $"]", 'Error' ); return 1; } SetPropertyText("PackagesArray",O.GetPropertyText(ArrayName)); // process commands for (i = 0; i < Commands.length; i++) { cmd = StripQuotes(Commands[i]); if (cmd ~= "--dry-run") { bSimulate = true; } else if (left(cmd, 1) == "+") { idx = -1; cmd = mid(cmd, 1); j = InStr(cmd, "@"); // find @index if (j > 0) { idx = int(mid(cmd, j+1)); if (idx == 0) // idx should never be 0, core or engine is always required { log("Invalid index: "$mid(cmd, j+1), 'Error'); continue; } cmd = left(cmd, j); } else { j = InStr(cmd, "<"); // before if (j > 0) { altpkg = mid(cmd, j+1); cmd = left(cmd, j); idx = IndexOf(altpkg); if (idx == -1) { log("Package '"$altpkg$"' doesn't exists; it will be appended to the list.", 'Warning'); idx = AddPackage(altpkg, -1); } } else { j = InStr(cmd, ">"); // after if (j > 0) { altpkg = mid(cmd, j+1); cmd = left(cmd, j); idx = IndexOf(altpkg); if (idx == -1) { log("Package '"$altpkg$"' doesn't exists; it will be appended to the list.", 'Warning'); idx = AddPackage(altpkg, -1); } idx++; } } } if (left(cmd, 1) == "?") // don't add if already present { cmd = mid(cmd, 1); if (IndexOf(cmd) > -1) { log("Package '"$cmd$"' is already present.", 'Add'); continue; } } RemovePackage(cmd); // first remove old idx = AddPackage(cmd, idx); if (idx < 0) { log("Failed to add package '"$cmd$"'", 'Error'); } else { Log("Package '"$cmd$"' added at index "$idx, 'Add'); } } else if (left(cmd, 1) == "-") { cmd = mid(cmd, 1); j = RemovePackage(cmd); if (j > 0) Log("Package '"$cmd$"' was removed "$j$" time(s).", 'Remove'); else log("Package '"$cmd$"' was not found, therefor not removed.", 'Warning'); } else if (cmd != "") { Log( "Unsupported argument: "$cmd, 'Error' ); } } if (!bSimulate) { O.SetPropertyText(ArrayName,GetPropertyText("PackagesArray")); O.SaveConfig(); } else { log("Simulation; changes not saved."); log("New array content:"); log(chr(9)$GetPropertyText("PackagesArray")); } return 0; } DefaultProperties { HelpCmd="EditPackagesCommandlet" HelpOneLiner="Modify the EditPackages list." HelpUsage="EditPackagesCommandlet [--dry-run] package-action ..." HelpWebLink="http://wiki.beyondunreal.com/wiki/EditPackagesCommandlet" HelpParm[0]="--dry-run" HelpDesc[0]="Simulate the process. Changes will not be saved." HelpParm[1]="+Package" HelpDesc[1]="Add a package with the name Package. If it already exists it will be removed first." HelpParm[2]="-Package" HelpDesc[2]="Remove the package with the name Package." HelpParm[3]=" " HelpDesc[3]="Advanced commands:" HelpParm[4]="+?Package" HelpDesc[4]="Don't add the package when it already exists. '?' can also be used in the commands below." HelpParm[5]="+Package@index" HelpDesc[5]="Add the package at the given index." HelpParm[6]="+Package<Pkg" HelpDesc[6]="Add the package before Pkg. If Pkg isn't present it will be appended to the list." HelpParm[7]="+Package>Pkg" HelpDesc[7]="Add the package after Pkg. If Pkg isn't present it will be appended to the list." ShowBanner=false ShowErrorCount=true ObjectClass="Editor.EditorEngine" ArrayName="EditPackages" }