From 453bca95914d5f0522f85de7a949777317278070 Mon Sep 17 00:00:00 2001 From: Steve Streeting Date: Tue, 19 Apr 2022 16:42:11 +0100 Subject: [PATCH] Rename ue4-blah to ue-blah since UE5 is supported Also fix some docs --- doc/Cleanup.md | 2 +- doc/DataSync.md | 14 +- doc/GetLatest.md | 4 +- doc/GitSetup.md | 10 +- doc/Package.md | 6 +- doc/PackageConfig.md | 2 +- doc/RebuildLightmaps.md | 2 +- doc/Release.md | 4 +- legacy/legacy-svn.md | 174 ------------ legacy/ue4-svn-create.ps1 | 111 -------- legacy/ue4-svn-setup.ps1 | 261 ------------------ ...ecompile.ps1 => ue-blueprint-recompile.ps1 | 2 +- ue4-build.ps1 => ue-build.ps1 | 2 +- ue4-cleanup.ps1 => ue-cleanup.ps1 | 2 +- ue4-datasync.ps1 => ue-datasync.ps1 | 4 +- ue4-get-latest.ps1 => ue-get-latest.ps1 | 23 +- ue4-git-setup.ps1 => ue-git-setup.ps1 | 8 +- ue4-package.ps1 => ue-package.ps1 | 2 +- ...-lightmaps.ps1 => ue-rebuild-lightmaps.ps1 | 2 +- ue4-release.ps1 => ue-release.ps1 | 2 +- 20 files changed, 40 insertions(+), 597 deletions(-) delete mode 100644 legacy/legacy-svn.md delete mode 100644 legacy/ue4-svn-create.ps1 delete mode 100644 legacy/ue4-svn-setup.ps1 rename ue4-blueprint-recompile.ps1 => ue-blueprint-recompile.ps1 (96%) rename ue4-build.ps1 => ue-build.ps1 (98%) rename ue4-cleanup.ps1 => ue-cleanup.ps1 (98%) rename ue4-datasync.ps1 => ue-datasync.ps1 (98%) rename ue4-get-latest.ps1 => ue-get-latest.ps1 (86%) rename ue4-git-setup.ps1 => ue-git-setup.ps1 (94%) rename ue4-package.ps1 => ue-package.ps1 (98%) rename ue4-rebuild-lightmaps.ps1 => ue-rebuild-lightmaps.ps1 (97%) rename ue4-release.ps1 => ue-release.ps1 (97%) diff --git a/doc/Cleanup.md b/doc/Cleanup.md index 83ef0b4..920d30f 100644 --- a/doc/Cleanup.md +++ b/doc/Cleanup.md @@ -8,7 +8,7 @@ I don't use this script very much any more because I'm using Live Coding now. The script also cleans up Live Coding patches but there's fewer of those. ``` - ue4-cleanup.ps1 [[-src:]sourcefolder] [Options] + ue-cleanup.ps1 [[-src:]sourcefolder] [Options] -src : Source folder (current folder if omitted) : (should be root of project) diff --git a/doc/DataSync.md b/doc/DataSync.md index 86c2577..5218010 100644 --- a/doc/DataSync.md +++ b/doc/DataSync.md @@ -37,7 +37,7 @@ specific to your LFS server. It's not ideal. My solution is to write a tool to make it easier to share BuiltData files as a side-channel to the Git LFS repository. You simply provide a file share (ideally a network drive, or a synced folder like Google Drive / Dropbox if you -don't mind a little duplication) and use my script `ue4-datasync.ps1` to +don't mind a little duplication) and use my script `ue-datasync.ps1` to sync lighting data between team members. Using Git LFS is a prerequisite, because it uses the OIDs from the .umap files @@ -46,13 +46,13 @@ the matching version of the BuiltData is used. ## Details -Note: this script will automatically close the UE4 editor if you have the +Note: this script will automatically close the Unreal editor if you have the project open, in order to prevent accidental issues such as unsaved changes or locked files. ``` Usage: - ue4-datasync.ps1 [-mode:] [[-path:]syncpath] [Options] + ue-datasync.ps1 [-mode:] [[-path:]syncpath] [Options] -mode : Whether to push or pull the built data from your filesystem -root : Root folder to sync files to/from. Project name will be appended to this path. @@ -61,7 +61,7 @@ Usage: : (should be root of project) -prune : Clean up versions of the data older than the latest -force : Copy ALL BuiltData files regardless of size/timestamp checks - -nocloseeditor : Don't close UE4 editor (this will prevent download of updated files) + -nocloseeditor : Don't close Unreal editor (this will prevent download of updated files) -dryrun : Don't perform any actual actions, just report on what you would do -verbose : Print more information -help : Print this help @@ -85,7 +85,7 @@ what happens in each mode. ### Push mode -> Example: `ue4-datasync.ps1 push` +> Example: `ue-datasync.ps1 push` > > Assuming you run this in your project root and have defined the environment variable UESYNCROOT @@ -107,7 +107,7 @@ umap on this shared drive, without it being in the git repo. ### Pull mode -> Example: `ue4-datasync.ps1 pull` +> Example: `ue-datasync.ps1 pull` > > Assuming you run this in your project root and have defined the environment variable UESYNCROOT @@ -145,7 +145,7 @@ you only do it for the `push` variant. ## Automating this -You can use `ue4-datasync.ps1` manually, calling it in `push` mode just after +You can use `ue-datasync.ps1` manually, calling it in `push` mode just after you push any map changes (assuming you've built the lighting), and in `pull` mode on demand, as and when you know you want to pick up new lighting data that others have built. diff --git a/doc/GetLatest.md b/doc/GetLatest.md index b348a07..4fa5ad6 100644 --- a/doc/GetLatest.md +++ b/doc/GetLatest.md @@ -4,7 +4,7 @@ We've found it useful to provide a simple script which can be run on artists' machines to get the latest from Git, and make sure all the C++ components are built. -It now also automatically calls `ue4-datasync.ps1 pull` if `UESYNCROOT` is defined +It now also automatically calls `ue-datasync.ps1 pull` if `UESYNCROOT` is defined in the environment. While the UE editor can sometimes do this successfully on startup as well, @@ -16,7 +16,7 @@ The script also automatically closes the UE editor if it's open on the same project to make sure the build is successful. ``` - ue4-get-latest.ps1 [[-src:]sourcefolder] [Options] + ue-get-latest.ps1 [[-src:]sourcefolder] [Options] -src : Source folder (current folder if omitted) : (should be root of project) diff --git a/doc/GitSetup.md b/doc/GitSetup.md index 27e6fc9..dfc212a 100644 --- a/doc/GitSetup.md +++ b/doc/GitSetup.md @@ -20,7 +20,7 @@ We use a this content workflow in our UE game repositories: isn't very good outside of Unreal right now 1. When exporting, output (`FBX`, `PNG`, `WAV` etc) goes in `$REPO/Content` (and subfolders) * These files are *ignored* in Git because they are derived data - * UE4 imports them to a `.uasset` which contains all their contents anyway + * Unreal imports them to a `.uasset` which contains all their contents anyway 1. Imported content becomes `.uasset` in `$REPO/Content` * These files are added to Git * They are also tracked as Git LFS files @@ -30,13 +30,13 @@ Together the script below configures all of this automatically. ## The script -You run the script from a Powershell prompt, in the root of your UE4 project. +You run the script from a Powershell prompt, in the root of your Unreal project. ``` -ue4-git-setup.ps1 [[-src:]sourcefolder] [Options] +ue-git-setup.ps1 [[-src:]sourcefolder] [Options] -src : Source folder (current folder if omitted) - : (should be root of your UE4 project) + : (should be root of your Unreal project) -dryrun : Don't perform any actual actions, just report on what you would do -help : Print this help ``` @@ -51,7 +51,7 @@ See the notes below for some practical details of running it. * `git lfs migrate import --everything --include="*.uasset,*.umap,"` * This repo will need to be re-cloned by everyone but it's MUCH cleaner than changing to LFS mid-history 1. Make a note of any custom .gitignore entries you have, the script will replace it -1. Run `ue4-git-setup.ps1` in the root project folder +1. Run `ue-git-setup.ps1` in the root project folder 1. Add back any specialised .gitignores we didn't cover (might not need any) 1. Push ALL BRANCHES of this new repo to the host of your choice diff --git a/doc/Package.md b/doc/Package.md index 6588b26..b31bc22 100644 --- a/doc/Package.md +++ b/doc/Package.md @@ -1,6 +1,6 @@ # Packaging Script -The `ue4-package.ps1` script builds, cooks and packages your game into a folder, +The `ue-package.ps1` script builds, cooks and packages your game into a folder, much like using "File > Package Project" in the UE editor. However, it offers a number of other features. @@ -9,7 +9,7 @@ in the root of your Unreal project. Please see the [Package Config File docs](Pa for a full description of this file. ``` - ue4-package.ps1 [-src:sourcefolder] [-major|-minor|-patch|-hotfix] [-keepversion] [-force] [-variant=VariantName] [-test] [-dryrun] + ue-package.ps1 [-src:sourcefolder] [-major|-minor|-patch|-hotfix] [-keepversion] [-force] [-variant=VariantName] [-test] [-dryrun] -src : Source folder (current folder if omitted), must contain packageconfig.json -major : Increment major version i.e. [x++].0.0.0 @@ -78,7 +78,7 @@ only a specific list, or all *excluding* a chosen few. ### 7. Package Variants -Rather than building / packaging just a single way, `ue4-package.ps1` supports +Rather than building / packaging just a single way, `ue-package.ps1` supports packaging multiple variants of your project. The variations can be: * **Platform**: lets you build for Windows, Linux, Mac etc diff --git a/doc/PackageConfig.md b/doc/PackageConfig.md index df2fb17..1901916 100644 --- a/doc/PackageConfig.md +++ b/doc/PackageConfig.md @@ -147,7 +147,7 @@ zipped packages will be created in. *Optional Setting - string* By default, scripts will locate your `.uproject` file automatically in the root of -your UE4 project folder. If for any reason you have more than one, you can +your Unreal project folder. If for any reason you have more than one, you can specify which to use with this setting. ## Package Variants diff --git a/doc/RebuildLightmaps.md b/doc/RebuildLightmaps.md index 9992e75..232f367 100644 --- a/doc/RebuildLightmaps.md +++ b/doc/RebuildLightmaps.md @@ -13,7 +13,7 @@ automatically determine which maps to rebuild if you want, or you can explicitly list them as arguments: ``` - ue4-rebuild-lightmaps.ps1 [-src:sourcefolder] [-quality:(preview|medium|high|production)] [-maps Map1,Map2,Map3] [-dryrun] + ue-rebuild-lightmaps.ps1 [-src:sourcefolder] [-quality:(preview|medium|high|production)] [-maps Map1,Map2,Map3] [-dryrun] -src : Source folder (current folder if omitted) -quality : Lightmap quality, preview/medium/high/production diff --git a/doc/Release.md b/doc/Release.md index 20a4db6..0f4d07c 100644 --- a/doc/Release.md +++ b/doc/Release.md @@ -1,6 +1,6 @@ # Release Script -The release script `ue4-release.ps1` takes previously packaged builds (see +The release script `ue-release.ps1` takes previously packaged builds (see [Packaging Script](./Package.md)) and uploads them to publishing services; currently Itch.io and Steam. @@ -11,7 +11,7 @@ release on Itch. This script uses configuration stored in [`packageconfig.json`](./PackageConfig.md). ``` - ue4-release.ps1 [-version:ver|-latest] -variants:v1,v2 -services:steam,itch [-src:sourcefolder] [-dryrun] + ue-release.ps1 [-version:ver|-latest] -variants:v1,v2 -services:steam,itch [-src:sourcefolder] [-dryrun] -version:ver : Version to release; must have been packaged already -latest : Instead of an explicit version, release one identified in project settings diff --git a/legacy/legacy-svn.md b/legacy/legacy-svn.md deleted file mode 100644 index 8f1cbff..0000000 --- a/legacy/legacy-svn.md +++ /dev/null @@ -1,174 +0,0 @@ -# LEGACY: Subversion Information (ignore below if using Git) - -## Steps to create a new SVN repo for a UE4 project - -1. Create new repo on your Subversion server, note the URL e.g. https://foo/bar -1. Run `ue4-svn-create.ps1 [URL]` in the parent folder you want your project to live -1. This will result in a subfolder called "bar" by default due to URL suffix - > See [creation script usage](#subversion-repo-creation-script) to specify a different destination path -1. After it's finished the script will have created the trunk/branches/tags folders for you, - and then checked out the trunk for you into "bar" -1. You then need to copy the contents of your UE4 project into this folder - > (UE4 doesn't let you create projects in non-empty folders so if you haven't - created a project yet, create it somewhere else then move the contents) - -## Updating an existing UE4 project - -If you already have a UE4 project in Subversion, you can instead just run the -[in-place setup script](#subversion-repo-setup-script) instead to configure it -for the workflow discussed above. You'll just need to commit the changes -after the script has completed. - -## What these scripts do - -### Creation Script - -1. **Creates trunk / branches / tags folders** - - If they're missing, the script creates them and commits to the root. - -1. **Checks out trunk** - - This will become your working folder. - -1. **Runs the setup script** - - Performs all the steps from the [setup script](#-setup-script) below. - It then commits all these changes so the working copy is ready to use. - -### Setup Script - -1. **Ignore unnecessary folders** - - It ignores folders in the root we don't need in Subversion: - - * .vs - * Binaries - * Build - * DerivedDataCache - * Intermediate - * Saved - - It sets the `svn:ignore` property in the root folder to do this. It will merge - with the contents of any existing property by default. `svn:ignore` is - not set recursively and does not get inherited (despite what TortoiseSVN - gives the impression of). - -1. **Sets binary files to needs-lock** - - By setting the `svn:auto-props` value for common binary types tracked in the - repo such as `.uasset` and `.umap`, it enforces locking on those files, - triggering UE4 to give you check out prompts when you edit them. - - This property is set on the root folder and is inherited throughout the tree. - -1. **Creates folder structure** - - Subversion, and particularly TortoiseSVN has a "quirk" whereby inherited - properties are not respected for files inside a folder that isn't added to - SVN yet. This means that if you rely on `svn:global-ignores` being inherited - from a parent, a file inside a new folder that *should* be ignored is still - shown in the Add/Commit TSVN dialog, until its parent folder is added, at - which point it is hidden. - - I maintain this is *extremely* dumb behaviour because you can easily add - files that should be ignored by accident, unless you manually add the folder - first. However a big TSVN thread from a few years back has defended this - bizarre approach as "by design". So to mitigate this, I pre-create the - majority of our preferred folder structure ahead of time. - - Our preferred **workflow** is: - - 1. All content creation tool files in `$REPO/MediaSrc` (subfolders by type) - * These are typically in formats that UE4 might not read directly, so outside `Content` - * These files are *tracked* in SVN - 1. When exporting, place output (`FBX`, `PNG`, `WAV` etc) in `$REPO/Content` (and subfolders) - * These files are *ignored* in SVN because they are derived data - * UE4 imports them to a `.uasset` which contains all their contents anyway - 1. All `.uasset` post-imported content in `$REPO/Content` is *tracked* in SVN (binary) - - So the tool pre-creates `MediaSrc`, `Content` and subfolders (if they don't already - exist), and adds them to Subversion ahead of time to head off as many quirks - as possible. - -1. **Ignore derived export data in Content folder** - - As discussed in the workflow section above, exported files like `PNG` and `FBX` - are not committed because they're duplicated data (source is in Maya/Blender/Photoshop files in `MediaSrc`, game-ready data is in `.uasset` files in `Content`). So we want - to ignore them underneath `Content`. - - The `svn:ignore` property isn't helpful because it isn't inherited by subfolders, - and if you set it recursively it only applies to folders that already exist. - Although we've tried to help by creating most of the structure up-front, we - don't want to preclude creating new folders, and don't want everyone who - does so to have to remember to set the `svn:ignore` up. - - So instead we use `svn:global-ignores`, a newer property that is inherited - by children (although as noted above it behaves a little oddly before you add - folders to SVN, but at least you don't have to set the property again). Any - `PNG`, `FBX` files you export into `Content` for import will be ignored, and - you can just commit the `.uasset` files, and the original sources in `MediaSrc`. - The export files can be considered temporary. - - - > We set `svn:global-ignores` for all the common intermediate formats *only* - > on the `Content` folder. This is so that if, for some reason, you don't have - > a typical content creator file for an asset and for some reason you want to - > store the `PNG` or `FBX` for it manually (instead of just the `.uasset`, which is all - > the game needs), you can put those files in `MediaSrc` if you want, and copy - > them to `Content` for importing as a substitute for the normal export workflow. - > - > In practice I don't think you need to do this, because you can export `.uasset` - > files anyway. Probably better to just put orphaned files like this directly in - > `Content` and only commit the post-import `.uasset`. But the option is there. - - - -## Script Reference - -### Repo Creation Script - -This constructs the entirety of the starting repository from a Subversion URL -(which should contain an empty repository, or at most empty trunk/branches/tags -subfolders). - -Usage: -``` - ue4-svn-create.ps1 [-urn:]svnurl [[-path:]checkoutpath] [Options] - - -url : Subversion URL; the ROOT path (should be empty) - -path : Checkout path; if omitted append last part of URL to current dir - -help : Print this help -``` - -It calls the [setup script below](#subversion-repo-setup-script), -plus creating the trunk/branches/tags structure, and checking out trunk for you. -It also commits all the changes so your repo is ready to go. - -Unreal doesn't let you create a new project inside a directory with contents, -so create your new project elsewhere then copy it into this new trunk checkout. -Unfortunately there's no way to avoid this because we need folders to exist -to set SVN properties on them. - -### Repo Setup Script - -This is a second-level script to intialise the structure of an existing Subversion -trunk checkout for UE4. Run in the root of that trunk checkout - it will work -for existing UE4 folders or blank repositories. - -None of the changes are committed so you can review them. - -Usage: -``` - ue4-svn-setup.ps1 [[-src:]sourcefolder] [Options] - -src : Source folder (current folder if omitted) - : (should be root of trunk in new repo) - -skipstructurecheck - : Skip the check that makes sure you're in trunk - -overwriteprops - : Replace all properties instead of merging - : Will overwrite svn:ignore, svn:global-ignores, svn:auto-props - -dryrun : Don't perform any actual actions, just report on what you would do - -help : Print this help -``` - diff --git a/legacy/ue4-svn-create.ps1 b/legacy/ue4-svn-create.ps1 deleted file mode 100644 index 6f964a9..0000000 --- a/legacy/ue4-svn-create.ps1 +++ /dev/null @@ -1,111 +0,0 @@ -[CmdletBinding()] # Fail on unknown args -param ( - [string]$url, - [string]$path, - [switch]$help = $false -) - -function Print-Usage { - Write-Output "Steve's UE4 Subversion Repo Creation Tool" - Write-Output " Create the structure for a new SVN repo & setup for UE4" - Write-Output " It will create trunk/branches/tags, then checkout trunk & setup UE4" - Write-Output " Run this if you have a completely blank server side repo & no checkout" - Write-Output "Usage:" - Write-Output " ue4-svn-create.ps1 [-urn:]svnurl [[-path:]checkoutpath] [Options]" - Write-Output " " - Write-Output " -url : Subversion URL; the ROOT path (should be empty)" - Write-Output " -path : Checkout path; if omitted append last part of URL to current dir" - Write-Output " -help : Print this help" -} - -function Delete-Recursive { - param ( - [string]$pathtodelete - ) - # Remove-Item -Recurse doesn't work properly so do this manually - # -Force to Get-ChildItem includes hidden files, -Force to Remove-Item allows readonly delete - Get-ChildItem $pathtodelete -Recurse -Force | Remove-Item -Force -Recurse - Remove-Item -Force $pathtodelete # remove parent too - -} - - -if ($help) { - Print-Usage - Exit 0 -} - -if ($url.Length -eq 0) { - Write-Output "ERROR: Missing Subversion URL argument" - Exit 1 -} - -$ErrorActionPreference = "Stop" - -# Parse URL -$svnurl = [uri]$url - -if ($path.Length -eq 0) { - $path = $svnurl.Segments[$svnurl.Segments.Length-1] - Write-Verbose "INFO: Checkout path not specified, using '$path'" -} - -# Check $path doesn't exist -if (Test-Path $path) { - Write-Output "ERROR: Directory at '$path' already exists" - Exit 2 -} - -# Checkout SVN root -Write-Output "Checking out $url to $path" -svn checkout $url $path > $null - -Push-Location $path - -# check empty -if ($(Get-ChildItem .).Length -gt 0) { - # it's OK if the contents are trunk/branches/tags - # .svn is not listed by default since hidden but allow anyway - $allowed = @("trunk", "branches", "tags", ".svn") - foreach ($sub in $(Get-ChildItem .)) { - if (-not $sub -in $allowed) { - Write-Output "ERROR: Subversion root is not empty (bad entry: '$sub')" - Pop-Location - Delete-Recursive $path - Exit 2 - } - } -} - -Write-Output "Creating trunk/branches/tags folders" - -$commit = $false -foreach ($dir in @("trunk", "branches", "tags")) { - if (-not $(Test-Path $dir)) { - New-Item $dir -ItemType Directory > $null - svn add $dir > $null - $commit = $true - } -} -if ($commit) { - svn commit -m "Created basic trunk/branches/tags structure" -} - -Pop-Location - -# Now delete and checkout trunk -Delete-Recursive $path -svn checkout $url/trunk $path > $null - -Push-Location $path - -# Call setup script from our location -& $PSScriptRoot/ue4-svn-setup.ps1 - -# That doesn't commit, so do that now -svn commit -m "UE4 setup for Subversion" > $null - -Pop-Location - - - diff --git a/legacy/ue4-svn-setup.ps1 b/legacy/ue4-svn-setup.ps1 deleted file mode 100644 index 64a253e..0000000 --- a/legacy/ue4-svn-setup.ps1 +++ /dev/null @@ -1,261 +0,0 @@ -[CmdletBinding()] # Fail on unknown args -param ( - [string]$src, - # Ignore project structure problems - [switch]$skipstructurecheck = $false, - [switch]$overwriteprops = $false, - [switch]$dryrun = $false, - [switch]$help = $false -) - -function Print-Usage { - Write-Output "Steve's UE4 Subversion Repo Setup Tool" - Write-Output " Run this if you already have a SVN trunk checkout" - Write-Output "Usage:" - Write-Output " ue4-svn-setup.ps1 [[-src:]sourcefolder] [Options]" - Write-Output " " - Write-Output " -src : Source folder (current folder if omitted)" - Write-Output " : (should be root of trunk in new repo)" - Write-Output " -skipstructurecheck" - Write-Output " : Skip the check that makes sure you're in trunk" - Write-Output " -overwriteprops" - Write-Output " : Replace all properties instead of merging" - Write-Output " : Will overwrite svn:ignore, svn:global-ignores, svn:auto-props" - Write-Output " -dryrun : Don't perform any actual actions, just report on what you would do" - Write-Output " -help : Print this help" -} - -$root_svnignore = @" -.vs -Binaries -Build -DerivedDataCache -Intermediate -Saved -"@ - -$root_globalignores = @" -*.blend1 -"@ - -$content_globalignores = @" -*.bmp -*.png -*.jpg -*.tif -*.tiff -*.tga -*.fbx -*.exr -*.mp3 -*.wav -"@ - -$root_autoprops = @" -*.uasset = svn:needs-lock=* -*.umap = svn:needs-lock=* -"@ - -$content_folders = @" -Content/ -Content/Animation -Content/Blueprints -Content/Blueprints/UI -Content/Fonts -Content/Maps -Content/Materials -Content/Meshes -Content/Particles -Content/Textures -Content/Textures/UI -"@ - -$mediasrc_folders = @" -MediaSrc -MediaSrc/Audio -MediaSrc/Audio/FX -MediaSrc/Audio/Music -MediaSrc/Meshes -MediaSrc/Textures -MediaSrc/Textures/UI -"@ - -function Set-Svn-Props { - - param ( - [string]$propname, - [string]$values, - [string]$path - ) - - if (-not $overwriteprops) { - # We need to merge our props with whatever is already present - # Can't believe SVN doesn't have a command for this (facepalm) - # We need to continue on error if property doesn't exist - $ErrorActionPreference = "SilentlyContinue" - $oldvalues = (svn propget $propname $path 2>$null) - $ErrorActionPreference = "Stop" - $oldarray = $oldvalues -split "\r?\n" - $newarray = $values -split "\r?\n" - # remove duplicates & Empties and sort both arrays so we can insert - $oldarray = $oldarray | Where-Object {$_} | Select-Object -Unique | Sort-Object - $newarray = $newarray | Where-Object {$_} | Select-Object -Unique | Sort-Object - # create modifiable list for merged - $finallist = [System.Collections.ArrayList]@() - $oldidx = 0 - foreach ($newitem in $newarray) { - # If this is a X = Y row, then we only match the X part - $match = $newitem - $iskeyvalue = $($newitem -contains "=") - if ($iskeyvalue) { - $match = $newitem.split("=")[0].trim() - } - - $insertednewitem = $false - while (-not $insertednewitem) { - if ($oldidx -lt $oldarray.Length) { - $olditem = $oldarray[$oldidx] - $oldmatch = $olditem - if ($iskeyvalue) { - $oldmatch = $olditem.split("=")[0].trim() - } - - if ($match -eq $oldmatch) { - # use new value - $finallist.Add($newitem) > $null # ArrayList.Add returns index & prints it - ++$oldidx - $insertednewitem = $true - } elseif ($match -gt $oldmatch) { - $finallist.Add($olditem) > $null - ++$oldidx - } else { - $finallist.Add($newitem) > $null - $insertednewitem = $true - } - } else { - # run out of old items, just append new - $finallist.Add($newitem) > $null - $insertednewitem = $true - } - } - } - while ($oldidx -lt $oldarray.Length) { - ## Add any trailing old items - $finallist.Add($oldarray[$oldidx++]) - } - - # Convert to final values - $values = $($finallist -join "`n") - - Write-Verbose "Merged values for $propname on '$path': `n$values" - } - - if ($dryrun) { - Write-Output "PROPS: Would have set $propname on '$path' to: `n$values" - } else { - svn propset $propname "$values" $path - } - - -} - -function Create-Svn-Folder { - param ( - [string]$fld - ) - - if (-not $(Test-Path $fld)) { - Write-Output "FIXED: $fld folder did not exist, creating" - if (-not $dryrun) { - New-Item -Path $fld -ItemType Directory > $null - } - } - - $statline = svn status -v --depth=empty $fld - if ($statline) { - $status = $statline[0] - } else { - $status = '?' - } - if ($status -eq 'I' -or $status -eq '?') { - Write-Output "FIXED: $fld directory is not tracked in SVN, adding" - if (-not $dryrun) { - # Add but don't add any contents yet because we may need to ignore them - svn add --depth=empty $fld > $null - } - } - - -} - -if ($help) { - Print-Usage - Exit 0 -} - -if ($src.Length -eq 0) { - $src = "." - Write-Verbose "-src not specified, assuming current directory" -} - -$ErrorActionPreference = "Stop" - -if ($src -ne ".") { - Push-Location $src - if ($LASTEXITCODE -ne 0) { - Write-Output "ERROR: Unable to change directory to '$src', exiting" - Exit 1 - } -} - -$svnurl = svn info --show-item 'url' -if ($LASTEXITCODE -ne 0) { - Write-Output "ERROR: 'svn info' failed, not a Subversion repository?'" - Exit 1 -} - -if (-not $skipstructurecheck) { - # check that we're in the trunk folder, if not, stop & warn about project structure (disable with option) - $svnleaf = Split-Path -Path $svnurl -Leaf - if ($svnleaf -ne "trunk") { - Write-Output "ERROR: SVN URL $svnurl is not at the root of trunk" - Exit 1 - } - Write-Verbose "SVN URL is $svnurl, all OK" -} - - -try { - # Create Content & subfolders of Content so that they already exist & properties work - foreach ($cf in $content_folders -split "\r?\n") { - Create-Svn-Folder $cf - } - foreach ($msf in $mediasrc_folders -split "\r?\n") { - Create-Svn-Folder $msf - } - - - # Ignore root folders we don't need - Set-Svn-Props "svn:ignore" $root_svnignore "." - - # Add global ignores to root - Set-Svn-Props "svn:global-ignores" $root_globalignores "." - - # Globally ignore non .uasset files inside Content - # Because we'll put all source files in MediaSource and export into Content for UE import - # We don't need both the exported version and the uasset - # We'll use the svn 1.8+ global-ignores inherited property so it applies to all subfolders created later - # Regular ignore even with --recursive only sets on folders that exist already - Set-Svn-Props "svn:global-ignores" $content_globalignores "Content" - - # Now set up svn:needs-lock in auto-props - Set-Svn-Props "svn:auto-props" $root_autoprops "." - -} catch { - Write-Output $_.Exception.Message - Exit 9 -} - - - -if ($src -ne ".") { Pop-Location } diff --git a/ue4-blueprint-recompile.ps1 b/ue-blueprint-recompile.ps1 similarity index 96% rename from ue4-blueprint-recompile.ps1 rename to ue-blueprint-recompile.ps1 index d2bb1e2..6edf39f 100644 --- a/ue4-blueprint-recompile.ps1 +++ b/ue-blueprint-recompile.ps1 @@ -22,7 +22,7 @@ param ( function Write-Usage { Write-Output "Steve's Unreal Blueprint recompile tool" Write-Output "Usage:" - Write-Output " ue4-blueprint-recompile.ps1 [-src:sourcefolder] [-bpdir:blueprintdir] [-dryrun]" + Write-Output " ue-blueprint-recompile.ps1 [-src:sourcefolder] [-bpdir:blueprintdir] [-dryrun]" Write-Output " " Write-Output " -src : Source folder (current folder if omitted)" Write-Output " -bpdir : Path to Blueprints relative to your Content dir, defaults to 'Blueprints'" diff --git a/ue4-build.ps1 b/ue-build.ps1 similarity index 98% rename from ue4-build.ps1 rename to ue-build.ps1 index a5fa144..adac5b0 100644 --- a/ue4-build.ps1 +++ b/ue-build.ps1 @@ -11,7 +11,7 @@ function Print-Usage { Write-Output "Steve's Unreal Build Tool" Write-Output " This is a WIP, only builds for dev right now" Write-Output "Usage:" - Write-Output " ue4-build.ps1 [[-mode:]] [[-src:]sourcefolder] [Options]" + Write-Output " ue-build.ps1 [[-mode:]] [[-src:]sourcefolder] [Options]" Write-Output " " Write-Output " -mode : Build mode" Write-Output " : dev = build Development Editor, dlls only (default)" diff --git a/ue4-cleanup.ps1 b/ue-cleanup.ps1 similarity index 98% rename from ue4-cleanup.ps1 rename to ue-cleanup.ps1 index be57aa9..4c4245f 100644 --- a/ue4-cleanup.ps1 +++ b/ue-cleanup.ps1 @@ -10,7 +10,7 @@ function Print-Usage { Write-Output "Steve's Unreal Project Cleanup Tool" Write-Output " Clean up hot-reload DLLs & prune LFS to free space. Will close Unreal editor!" Write-Output "Usage:" - Write-Output " ue4-cleanup.ps1 [[-src:]sourcefolder] [Options]" + Write-Output " ue-cleanup.ps1 [[-src:]sourcefolder] [Options]" Write-Output " " Write-Output " -src : Source folder (current folder if omitted)" Write-Output " : (should be root of project)" diff --git a/ue4-datasync.ps1 b/ue-datasync.ps1 similarity index 98% rename from ue4-datasync.ps1 rename to ue-datasync.ps1 index 9903450..6637f70 100644 --- a/ue4-datasync.ps1 +++ b/ue-datasync.ps1 @@ -14,7 +14,7 @@ function Print-Usage { Write-Output "Steve's UE Map BuiltData Sync Tool" Write-Output " Avoid storing Map_BuiltData.uasset files in source control, sync them directly instead" Write-Output "Usage:" - Write-Output " ue4-datasync.ps1 [-mode:] [[-path:]syncpath] [Options]" + Write-Output " ue-datasync.ps1 [-mode:] [[-path:]syncpath] [Options]" Write-Output " " Write-Output " -mode : Whether to push or pull the built data from your filesystem" Write-Output " -root : Root folder to sync files to/from. Project name will be appended to this path." @@ -23,7 +23,7 @@ function Print-Usage { Write-Output " : (should be root of project)" Write-Output " -prune : Clean up versions of the data older than the latest" Write-Output " -force : Copy ALL BuiltData files regardless of size/timestamp checks" - Write-Output " -nocloseeditor : Don't close UE4 editor before pulling (may prevent success)" + Write-Output " -nocloseeditor : Don't close Unreal editor before pulling (may prevent success)" Write-Output " -dryrun : Don't perform any actual actions, just report on what you would do" Write-Output " -help : Print this help" Write-Output " " diff --git a/ue4-get-latest.ps1 b/ue-get-latest.ps1 similarity index 86% rename from ue4-get-latest.ps1 rename to ue-get-latest.ps1 index 479920b..ae5c14d 100644 --- a/ue4-get-latest.ps1 +++ b/ue-get-latest.ps1 @@ -10,7 +10,7 @@ function Print-Usage { Write-Output "Steve's Unreal Get Latest Tool" Write-Output " Get latest from repo and build for dev. Will close Unreal editor!" Write-Output "Usage:" - Write-Output " ue4-get-latest.ps1 [[-src:]sourcefolder] [Options]" + Write-Output " ue-get-latest.ps1 [[-src:]sourcefolder] [Options]" Write-Output " " Write-Output " -src : Source folder (current folder if omitted)" Write-Output " : (should be root of project)" @@ -78,7 +78,7 @@ try { $cleanupargs += "-dryrun" } # Use Invoke-Expression so we can use a string as options - Invoke-Expression "&'$PSScriptRoot/ue4-cleanup.ps1' $cleanupargs" + Invoke-Expression "&'$PSScriptRoot/ue-cleanup.ps1' $cleanupargs" # Stopped using rebase because it's a PITA when it goes wrong Write-Output "Pulling latest from Git..." @@ -97,20 +97,9 @@ try { } } } else { - # Assume svn + # Support Perforce? - # Hard coded for Subversion right now - if ($dryrun) { - Write-Output "Checking for updates we WOULD do:" - svn status --show-updates - } else { - Write-Output "Updating to latest..." - svn up - } - - if ($LASTEXITCODE -ne 0) { - throw "Subversion update failed, see above" - } + throw "Get Latest only supports Git right now" } # Now build @@ -122,7 +111,7 @@ try { $cmdargs += "-dryrun" } # Use Invoke-Expression so we can use a string as options - Invoke-Expression "&'$PSScriptRoot/ue4-build.ps1' dev $cmdargs" + Invoke-Expression "&'$PSScriptRoot/ue-build.ps1' dev $cmdargs" if ($LASTEXITCODE -ne 0) { throw "Build process failed, see above" @@ -138,7 +127,7 @@ try { $cmdargs += "-dryrun" } # Use Invoke-Expression so we can use a string as options - Invoke-Expression "&'$PSScriptRoot/ue4-datasync.ps1' pull $cmdargs" + Invoke-Expression "&'$PSScriptRoot/ue-datasync.ps1' pull $cmdargs" } diff --git a/ue4-git-setup.ps1 b/ue-git-setup.ps1 similarity index 94% rename from ue4-git-setup.ps1 rename to ue-git-setup.ps1 index 4362c51..a2ffe08 100644 --- a/ue4-git-setup.ps1 +++ b/ue-git-setup.ps1 @@ -9,11 +9,11 @@ param ( ) function Print-Usage { - Write-Output "Steve's UE4 Git Repo Setup Tool" - Write-Output " Run this on your just-created UE4 project folder." + Write-Output "Steve's Unreal Git Repo Setup Tool" + Write-Output " Run this on your just-created Unreal project folder." Write-Output " .gitattributes and .gitignore will be overwritten" Write-Output "Usage:" - Write-Output " ue4-git-setup.ps1 [[-src:]sourcefolder] [Options]" + Write-Output " ue-git-setup.ps1 [[-src:]sourcefolder] [Options]" Write-Output " " Write-Output " -src : Source folder (current folder if omitted)" Write-Output " : (should be root of trunk in new repo)" @@ -148,7 +148,7 @@ if ($help) { if (-not (Get-Module -ListAvailable -Name PsIni)) { Write-Output "Missing module: PsIni" - Write-Output "This script uses PsIni to update the UE4 DefaultEngine.ini" + Write-Output "This script uses PsIni to update DefaultEngine.ini" Write-Output "Install it using 'Install-Module PsIni [-Scope CurrentUser]'" Exit 2 } diff --git a/ue4-package.ps1 b/ue-package.ps1 similarity index 98% rename from ue4-package.ps1 rename to ue-package.ps1 index c6d4dfd..8952c2b 100644 --- a/ue4-package.ps1 +++ b/ue-package.ps1 @@ -35,7 +35,7 @@ param ( function Write-Usage { Write-Output "Steve's Unreal packaging tool" Write-Output "Usage:" - Write-Output " ue4-package.ps1 [-src:sourcefolder] [-major|-minor|-patch|-hotfix] [-keepversion] [-force] [-variant=VariantName] [-test] [-dryrun]" + Write-Output " ue-package.ps1 [-src:sourcefolder] [-major|-minor|-patch|-hotfix] [-keepversion] [-force] [-variant=VariantName] [-test] [-dryrun]" Write-Output " " Write-Output " -src : Source folder (current folder if omitted), must contain packageconfig.json" Write-Output " -major : Increment major version i.e. [x++].0.0.0" diff --git a/ue4-rebuild-lightmaps.ps1 b/ue-rebuild-lightmaps.ps1 similarity index 97% rename from ue4-rebuild-lightmaps.ps1 rename to ue-rebuild-lightmaps.ps1 index 7accf29..a448563 100644 --- a/ue4-rebuild-lightmaps.ps1 +++ b/ue-rebuild-lightmaps.ps1 @@ -24,7 +24,7 @@ param ( function Write-Usage { Write-Output "Steve's Unreal lightmap rebuilding tool" Write-Output "Usage:" - Write-Output " ue4-rebuild-lightmaps.ps1 [-src:sourcefolder] [-quality:(preview|medium|high|production)] [-maps Map1,Map2,Map3] [-dryrun]" + Write-Output " ue-rebuild-lightmaps.ps1 [-src:sourcefolder] [-quality:(preview|medium|high|production)] [-maps Map1,Map2,Map3] [-dryrun]" Write-Output " " Write-Output " -src : Source folder (current folder if omitted)" Write-Output " -quality : Lightmap quality, preview/medium/high/production" diff --git a/ue4-release.ps1 b/ue-release.ps1 similarity index 97% rename from ue4-release.ps1 rename to ue-release.ps1 index 90dc747..82ae7ac 100644 --- a/ue4-release.ps1 +++ b/ue-release.ps1 @@ -26,7 +26,7 @@ param ( function Write-Usage { Write-Output "Steve's Unreal release tool" Write-Output "Usage:" - Write-Output " ue4-release.ps1 [-version:ver|-latest] -variant:var -services:steam,itch [-src:sourcefolder] [-dryrun]" + Write-Output " ue-release.ps1 [-version:ver|-latest] -variant:var -services:steam,itch [-src:sourcefolder] [-dryrun]" Write-Output " " Write-Output " -version:ver : Version to release; must have been packaged already" Write-Output " -latest : Instead of an explicit version, release one identified in project settings"