Skip to content

Commit c59bf5e

Browse files
author
Stewart Miles
committed
Modified ManifestReferences.DeletePackages() to return errors.
Previously VersionHandlerImpl.ManifestReferences.DeletePackages() would only write errors to the log but not return failures to a caller making it more difficult (requiring log redirection) to handle failures. Bug: 150471207 Change-Id: I8af5f5dafa00a6fd8713b31bf6739ee092ddfc4a
1 parent ec9b2d0 commit c59bf5e

File tree

2 files changed

+58
-18
lines changed

2 files changed

+58
-18
lines changed

source/VersionHandlerImpl/src/FileUtils.cs

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -393,25 +393,59 @@ public static string GetPackageDirectory(string path, bool actualPath) {
393393
return packageDir;
394394
}
395395

396+
/// <summary>
397+
/// Result of RemoveAssets().
398+
/// </summary>
399+
public class RemoveAssetsResult {
400+
401+
/// <summary>
402+
/// Assets that were removed.
403+
/// </summary>
404+
public List<string> Removed { get; set; }
405+
406+
/// <summary>
407+
/// Assets that failed to be removed.
408+
/// </summary>
409+
public List<string> RemoveFailed { get; set; }
410+
411+
/// <summary>
412+
/// Assets that were missing.
413+
/// </summary>
414+
public List<string> Missing { get; set; }
415+
416+
/// <summary>
417+
/// Whether the operation was successful.
418+
/// </summary>
419+
public bool Success { get { return RemoveFailed.Count == 0 && Missing.Count == 0; } }
420+
421+
/// <summary>
422+
/// Construct an empty result.
423+
/// </summary>
424+
public RemoveAssetsResult() {
425+
Removed = new List<string>();
426+
RemoveFailed = new List<string>();
427+
Missing = new List<string>();
428+
}
429+
}
430+
396431
/// <summary>
397432
/// Remove the given set of files and their folders.
398433
/// </summary>
399434
/// <param name = "filenames">Files to be removed/</param>
400435
/// <param name = "logger">Logger to log results.</param>
401436
/// <return>True if all files are removed. False if failed to remove any file or
402437
/// if any file is missing.</return>
403-
public static bool RemoveAssets(IEnumerable<string> filenames, Logger logger = null) {
404-
List<string> assetRemoved = new List<string>();
405-
List<string> assetRemoveFailed = new List<string>();
406-
List<string> assetMissing = new List<string>();
438+
public static RemoveAssetsResult RemoveAssets(IEnumerable<string> filenames,
439+
Logger logger = null) {
440+
var result = new RemoveAssetsResult();
407441

408442
HashSet<string> folderToRemove = new HashSet<string>();
409443
foreach (var filename in filenames) {
410444
if (File.Exists(filename)) {
411445
if (AssetDatabase.DeleteAsset(filename)) {
412-
assetRemoved.Add(filename);
446+
result.Removed.Add(filename);
413447
} else {
414-
assetRemoveFailed.Add(filename);
448+
result.RemoveFailed.Add(filename);
415449
}
416450

417451
// Add folder and parent folders to be removed later.
@@ -424,7 +458,7 @@ public static bool RemoveAssets(IEnumerable<string> filenames, Logger logger = n
424458
folder = Path.GetDirectoryName(folder);
425459
}
426460
} else {
427-
assetMissing.Add(filename);
461+
result.Missing.Add(filename);
428462
}
429463
}
430464

@@ -448,6 +482,7 @@ public static bool RemoveAssets(IEnumerable<string> filenames, Logger logger = n
448482
Directory.GetDirectories(folder).Length == 0) {
449483
if (!AssetDatabase.DeleteAsset(folder)) {
450484
folderRemoveFailed.Add(folder);
485+
result.RemoveFailed.Add(folder);
451486
}
452487
}
453488
}
@@ -456,12 +491,12 @@ public static bool RemoveAssets(IEnumerable<string> filenames, Logger logger = n
456491
logger.Log(
457492
String.Format("Removed:\n{0}\nFailed to Remove:\n{1}\nMissing:\n{2}\n" +
458493
"Failed to Remove Folders:\n{3}\n",
459-
String.Join("\n", assetRemoved.ToArray()),
460-
String.Join("\n", assetRemoveFailed.ToArray()),
461-
String.Join("\n", assetMissing.ToArray()),
494+
String.Join("\n", result.Removed.ToArray()),
495+
String.Join("\n", result.RemoveFailed.ToArray()),
496+
String.Join("\n", result.Missing.ToArray()),
462497
String.Join("\n", folderRemoveFailed.ToArray())), level : LogLevel.Verbose);
463498
}
464-
return assetRemoveFailed.Count == 0 && assetMissing.Count == 0;
499+
return result;
465500
}
466501
}
467502
}

source/VersionHandlerImpl/src/VersionHandlerImpl.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1826,11 +1826,14 @@ public static List<ManifestReferences> FindAndReadManifestsInAssetsFolder() {
18261826
/// <summary>
18271827
/// Delete a subset of packages managed by Version Handler.
18281828
/// </summary>
1829-
/// <param name="packages">
1830-
/// A HashSet of canonical name of the packages to be uninstalled</param>
1831-
/// <param name="force">
1832-
/// Force to remove all file even it is referenced by other packages.</param>
1833-
public static void DeletePackages(HashSet<string> packages, bool force = false) {
1829+
/// <param name="packages">A HashSet of canonical name of the packages to be
1830+
/// uninstalled</param>
1831+
/// <param name="force">Force to remove all file even it is referenced by other
1832+
/// packages.</param>
1833+
/// <returns>If successful returns an empty collection, a collection of files that could
1834+
/// not be removed otherwise.</returns>
1835+
public static ICollection<string> DeletePackages(HashSet<string> packages,
1836+
bool force = false) {
18341837
// Create a map from canonical name to ManifestReferences.
18351838
var manifestMap = new Dictionary<string, ManifestReferences>(
18361839
FindAndReadManifestsInAssetsFolderByPackageName());
@@ -1859,16 +1862,18 @@ public static void DeletePackages(HashSet<string> packages, bool force = false)
18591862
VersionHandlerImpl.Log(String.Format("Uninstalling the following packages:\n{0}\n{1}",
18601863
String.Join("\n", (new List<string>(packages)).ToArray()),
18611864
filesToKeep.Count == 0 ? "" : String.Format(
1862-
"Ignore the following files referenced by other packages:\n{0}\n",
1865+
"Ignoring the following files referenced by other packages:\n{0}\n",
18631866
String.Join("\n", (new List<string>(filesToKeep)).ToArray()))));
18641867

1865-
if (FileUtils.RemoveAssets(filesToRemove, VersionHandlerImpl.Logger)) {
1868+
var result = FileUtils.RemoveAssets(filesToRemove, VersionHandlerImpl.Logger);
1869+
if (result.Success) {
18661870
VersionHandlerImpl.analytics.Report("uninstallpackage/delete/success",
18671871
"Successfully Deleted All Files in Packages");
18681872
} else {
18691873
VersionHandlerImpl.analytics.Report("uninstallpackage/delete/fail",
18701874
"Fail to Delete Some Files in Packages");
18711875
}
1876+
return result.RemoveFailed;
18721877
}
18731878

18741879
/// <summary>

0 commit comments

Comments
 (0)