Always snap to grid
Legacy:EditPackagesCommandlet
From Unreal Wiki, The Unreal Engine Documentation Site
This commandlet lets you modify EditPackages from OS commandline. Handy for install scripts.
Contents |
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"
}
