Skip to content

Commit fd56633

Browse files
committed
Allow custom Unity scopes
1 parent c9f5a1a commit fd56633

2 files changed

Lines changed: 51 additions & 41 deletions

File tree

src/UnityNuGet/RegistryCache.cs

Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -236,14 +236,15 @@ private async Task BuildInternal()
236236
}
237237

238238
var packageId = packageName.ToLowerInvariant();
239-
var npmPackageId = $"{_unityScope}.{packageId}";
239+
var unityScope = (packageEntry.UnityScope ?? _unityScope).ToLowerInvariant();
240+
var npmPackageId = $"{unityScope}.{packageId}";
240241
NpmPackageCacheEntry? cacheEntry = null;
241242
NpmPackage? npmPackage = null;
242243
NpmPackageInfo? npmPackageInfo = null;
243244

244245
if (!forceUpdate && !_npmPackageRegistry.Packages.TryGetValue(npmPackageId, out npmPackage))
245246
{
246-
if (TryReadPackageCacheEntry(packageId, out cacheEntry))
247+
if (TryReadPackageCacheEntry(unityScope, packageId, out cacheEntry))
247248
{
248249
npmPackage = cacheEntry.Package!;
249250
npmPackageInfo = cacheEntry.Info!;
@@ -270,8 +271,8 @@ private async Task BuildInternal()
270271
if (npmPackage != null && npmPackage.Versions.TryGetValue(npmCurrentVersion, out var existingVersion))
271272
{
272273
// If the package tgz exists, we don't need to regenerate it again
273-
var packageTgz = new FileInfo(GetUnityPackagePath(packageIdentity, existingVersion));
274-
var packageSha1 = new FileInfo(GetUnityPackageSha1Path(packageIdentity, existingVersion));
274+
var packageTgz = new FileInfo(GetUnityPackagePath(unityScope, packageIdentity, existingVersion));
275+
var packageSha1 = new FileInfo(GetUnityPackageSha1Path(unityScope, packageIdentity, existingVersion));
275276

276277
if (packageTgz.Exists && packageTgz.Length > 0 && packageSha1.Exists && packageSha1.Length > 0)
277278
{
@@ -347,7 +348,7 @@ private async Task BuildInternal()
347348
Author = npmPackageInfo.Author,
348349
DisplayName = packageMeta.Title + _packageNameNuGetPostFix
349350
};
350-
npmVersion.Distribution.Tarball = new Uri(_rootHttpUri, $"{npmPackage.Id}/-/{GetUnityPackageFileName(packageIdentity, npmVersion)}");
351+
npmVersion.Distribution.Tarball = new Uri(_rootHttpUri, $"{npmPackage.Id}/-/{GetUnityPackageFileName(unityScope, packageIdentity, npmVersion)}");
351352
npmVersion.Unity = _minimumUnityVersion;
352353
npmPackage.Versions[npmVersion.Version] = npmVersion;
353354

@@ -422,7 +423,8 @@ private async Task BuildInternal()
422423

423424
// Otherwise add the package as a dependency
424425
var depsId = resolvedDeps.Id.ToLowerInvariant();
425-
var key = $"{_unityScope}.{depsId}";
426+
var depsUnityScope = (packageEntryDep!.UnityScope ?? _unityScope).ToLowerInvariant();
427+
var key = $"{depsUnityScope}.{depsId}";
426428
if (!npmVersion.Dependencies.ContainsKey(key))
427429
{
428430
npmVersion.Dependencies.Add(key, GetNpmVersion(resolvedDeps.VersionRange.MinVersion));
@@ -433,8 +435,8 @@ private async Task BuildInternal()
433435
// If we don't have any dependencies error, generate the package
434436
if (!hasDependencyErrors)
435437
{
436-
bool packageConverted = await ConvertNuGetToUnityPackageIfDoesNotExist(packageIdentity, npmPackageInfo, npmVersion, packageMeta, forceUpdate, packageEntry);
437-
npmPackage.Time[npmCurrentVersion] = packageMeta.Published?.UtcDateTime ?? GetUnityPackageFileInfo(packageIdentity, npmVersion).CreationTimeUtc;
438+
bool packageConverted = await ConvertNuGetToUnityPackageIfDoesNotExist(unityScope, packageIdentity, npmPackageInfo, npmVersion, packageMeta, forceUpdate, packageEntry);
439+
npmPackage.Time[npmCurrentVersion] = packageMeta.Published?.UtcDateTime ?? GetUnityPackageFileInfo(unityScope, packageIdentity, npmVersion).CreationTimeUtc;
438440

439441
// Copy repository info if necessary
440442
if (update)
@@ -443,7 +445,7 @@ private async Task BuildInternal()
443445
}
444446

445447
// Update the cache entry
446-
await WritePackageCacheEntry(packageId, cacheEntry);
448+
await WritePackageCacheEntry(unityScope, packageId, cacheEntry);
447449

448450
if (packageConverted && IsRunningOnAzure)
449451
{
@@ -484,6 +486,7 @@ private static string GetNpmVersion(NuGetVersion currentVersion)
484486
/// </summary>
485487
private async Task<bool> ConvertNuGetToUnityPackageIfDoesNotExist
486488
(
489+
string unityScope,
487490
PackageIdentity identity,
488491
NpmPackageInfo npmPackageInfo,
489492
NpmPackageVersion npmPackageVersion,
@@ -495,18 +498,18 @@ RegistryEntry packageEntry
495498
// If we need to force the update, we delete the previous package+sha1 files
496499
if (forceUpdate)
497500
{
498-
DeleteUnityPackage(identity, npmPackageVersion);
501+
DeleteUnityPackage(unityScope, identity, npmPackageVersion);
499502
}
500503

501-
if (!IsUnityPackageValid(identity, npmPackageVersion) || !IsUnityPackageSha1Valid(identity, npmPackageVersion))
504+
if (!IsUnityPackageValid(unityScope, identity, npmPackageVersion) || !IsUnityPackageSha1Valid(unityScope, identity, npmPackageVersion))
502505
{
503-
await ConvertNuGetPackageToUnity(identity, npmPackageInfo, npmPackageVersion, packageMeta, packageEntry);
506+
await ConvertNuGetPackageToUnity(unityScope, identity, npmPackageInfo, npmPackageVersion, packageMeta, packageEntry);
504507

505508
return true;
506509
}
507510
else
508511
{
509-
npmPackageVersion.Distribution.Shasum = await ReadUnityPackageSha1(identity, npmPackageVersion);
512+
npmPackageVersion.Distribution.Shasum = await ReadUnityPackageSha1(unityScope, identity, npmPackageVersion);
510513

511514
return false;
512515
}
@@ -517,14 +520,15 @@ RegistryEntry packageEntry
517520
/// </summary>
518521
private async Task ConvertNuGetPackageToUnity
519522
(
523+
string unityScope,
520524
PackageIdentity identity,
521525
NpmPackageInfo npmPackageInfo,
522526
NpmPackageVersion npmPackageVersion,
523527
IPackageSearchMetadata packageMeta,
524528
RegistryEntry packageEntry
525529
)
526530
{
527-
var unityPackageFileName = GetUnityPackageFileName(identity, npmPackageVersion);
531+
var unityPackageFileName = GetUnityPackageFileName(unityScope, identity, npmPackageVersion);
528532
var unityPackageFilePath = Path.Combine(_rootPersistentFolder, unityPackageFileName);
529533

530534
LogInformation($"Converting NuGet package {identity} to Unity `{unityPackageFileName}`");
@@ -834,7 +838,7 @@ RegistryEntry packageEntry
834838
using (var stream = File.OpenRead(unityPackageFilePath))
835839
{
836840
var sha1 = Sha1sum(stream);
837-
await WriteUnityPackageSha1(identity, npmPackageVersion, sha1);
841+
await WriteUnityPackageSha1(unityScope, identity, npmPackageVersion, sha1);
838842
npmPackageVersion.Distribution.Shasum = sha1;
839843
}
840844
}
@@ -858,72 +862,75 @@ private static Guid GetStableGuid(PackageIdentity identity, string name)
858862
return StringToGuid($"{identity.Id}/{name}*");
859863
}
860864

861-
private FileInfo GetUnityPackageFileInfo(PackageIdentity identity, NpmPackageVersion packageVersion)
865+
private FileInfo GetUnityPackageFileInfo(string unityScope, PackageIdentity identity, NpmPackageVersion packageVersion)
862866
{
863-
return new FileInfo(GetUnityPackagePath(identity, packageVersion));
867+
return new FileInfo(GetUnityPackagePath(unityScope, identity, packageVersion));
864868
}
865869

866-
private string GetUnityPackageFileName(PackageIdentity identity, NpmPackageVersion packageVersion)
870+
private string GetUnityPackageFileName(string unityScope, PackageIdentity identity, NpmPackageVersion packageVersion)
867871
{
868-
return $"{_unityScope}.{identity.Id.ToLowerInvariant()}-{packageVersion.Version}.tgz";
872+
return $"{unityScope}.{identity.Id.ToLowerInvariant()}-{packageVersion.Version}.tgz";
869873
}
870874

871-
private string GetUnityPackageDescFileName(string packageName)
875+
private string GetUnityPackageDescFileName(string unityScope, string packageName)
872876
{
873-
return $"{_unityScope}.{packageName}.json";
877+
return $"{unityScope}.{packageName}.json";
874878
}
875879

876-
private string GetUnityPackageSha1FileName(PackageIdentity identity, NpmPackageVersion packageVersion)
880+
private string GetUnityPackageSha1FileName(string unityScope, PackageIdentity identity, NpmPackageVersion packageVersion)
877881
{
878-
return $"{_unityScope}.{identity.Id.ToLowerInvariant()}-{packageVersion.Version}.sha1";
882+
return $"{unityScope}.{identity.Id.ToLowerInvariant()}-{packageVersion.Version}.sha1";
879883
}
880884

881-
private void DeleteUnityPackage(PackageIdentity identity, NpmPackageVersion packageVersion)
885+
private void DeleteUnityPackage(string unityScope, PackageIdentity identity, NpmPackageVersion packageVersion)
882886
{
883-
var packageFile = new FileInfo(GetUnityPackagePath(identity, packageVersion));
887+
var packageFile = new FileInfo(GetUnityPackagePath(unityScope, identity, packageVersion));
884888
if (packageFile.Exists)
885889
{
886890
packageFile.Delete();
887891
}
888-
var sha1File = new FileInfo(GetUnityPackageSha1Path(identity, packageVersion));
892+
var sha1File = new FileInfo(GetUnityPackageSha1Path(unityScope, identity, packageVersion));
889893
if (sha1File.Exists)
890894
{
891895
sha1File.Delete();
892896
}
893897
}
894898

895-
private bool IsUnityPackageValid(PackageIdentity identity, NpmPackageVersion packageVersion)
899+
private bool IsUnityPackageValid(string unityScope, PackageIdentity identity, NpmPackageVersion packageVersion)
896900
{
897-
var packageFile = new FileInfo(GetUnityPackagePath(identity, packageVersion));
901+
var packageFile = new FileInfo(GetUnityPackagePath(unityScope, identity, packageVersion));
898902
return packageFile.Exists && packageFile.Length > 0;
899903
}
900904

901-
private bool IsUnityPackageSha1Valid(PackageIdentity identity, NpmPackageVersion packageVersion)
905+
private bool IsUnityPackageSha1Valid(string unityScope, PackageIdentity identity, NpmPackageVersion packageVersion)
902906
{
903-
var sha1File = new FileInfo(GetUnityPackageSha1Path(identity, packageVersion));
907+
var sha1File = new FileInfo(GetUnityPackageSha1Path(unityScope, identity, packageVersion));
904908
return sha1File.Exists && sha1File.Length > 0;
905909
}
906910

907-
private async Task<string> ReadUnityPackageSha1(PackageIdentity identity, NpmPackageVersion packageVersion)
911+
private async Task<string> ReadUnityPackageSha1(string unityScope, PackageIdentity identity, NpmPackageVersion packageVersion)
908912
{
909-
return await File.ReadAllTextAsync(GetUnityPackageSha1Path(identity, packageVersion));
913+
return await File.ReadAllTextAsync(GetUnityPackageSha1Path(unityScope, identity, packageVersion));
910914
}
911915

912-
private async Task WriteUnityPackageSha1(PackageIdentity identity, NpmPackageVersion packageVersion, string sha1)
916+
private async Task WriteUnityPackageSha1(string unityScope, PackageIdentity identity, NpmPackageVersion packageVersion, string sha1)
913917
{
914-
await File.WriteAllTextAsync(GetUnityPackageSha1Path(identity, packageVersion), sha1);
918+
await File.WriteAllTextAsync(GetUnityPackageSha1Path(unityScope, identity, packageVersion), sha1);
915919
}
916920

917-
private string GetUnityPackagePath(PackageIdentity identity, NpmPackageVersion packageVersion) => Path.Combine(_rootPersistentFolder, GetUnityPackageFileName(identity, packageVersion));
921+
private string GetUnityPackagePath(string unityScope, PackageIdentity identity, NpmPackageVersion packageVersion)
922+
=> Path.Combine(_rootPersistentFolder, GetUnityPackageFileName(unityScope, identity, packageVersion));
918923

919-
private string GetUnityPackageSha1Path(PackageIdentity identity, NpmPackageVersion packageVersion) => Path.Combine(_rootPersistentFolder, GetUnityPackageSha1FileName(identity, packageVersion));
924+
private string GetUnityPackageSha1Path(string unityScope, PackageIdentity identity, NpmPackageVersion packageVersion)
925+
=> Path.Combine(_rootPersistentFolder, GetUnityPackageSha1FileName(unityScope, identity, packageVersion));
920926

921-
private string GetUnityPackageDescPath(string packageName) => Path.Combine(_rootPersistentFolder, GetUnityPackageDescFileName(packageName));
927+
private string GetUnityPackageDescPath(string unityScope, string packageName)
928+
=> Path.Combine(_rootPersistentFolder, GetUnityPackageDescFileName(unityScope, packageName));
922929

923-
private bool TryReadPackageCacheEntry(string packageName, [NotNullWhen(true)] out NpmPackageCacheEntry? cacheEntry)
930+
private bool TryReadPackageCacheEntry(string unityScope, string packageName, [NotNullWhen(true)] out NpmPackageCacheEntry? cacheEntry)
924931
{
925932
cacheEntry = null;
926-
var path = GetUnityPackageDescPath(packageName);
933+
var path = GetUnityPackageDescPath(unityScope, packageName);
927934

928935
if (!File.Exists(path)) return false;
929936

@@ -945,9 +952,9 @@ private bool TryReadPackageCacheEntry(string packageName, [NotNullWhen(true)] ou
945952
return false;
946953
}
947954

948-
private async Task WritePackageCacheEntry(string packageName, NpmPackageCacheEntry cacheEntry)
955+
private async Task WritePackageCacheEntry(string unityScope, string packageName, NpmPackageCacheEntry cacheEntry)
949956
{
950-
var path = GetUnityPackageDescPath(packageName);
957+
var path = GetUnityPackageDescPath(unityScope, packageName);
951958
var newJson = cacheEntry.ToJson();
952959
// Only update if entry is different
953960
if (!string.Equals(newJson, cacheEntry.Json, StringComparison.InvariantCulture))

src/UnityNuGet/RegistryEntry.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ public class RegistryEntry
1515
[JsonProperty("listed")]
1616
public bool Listed { get; set; }
1717

18+
[JsonProperty("scope")]
19+
public string? UnityScope { get; set; }
20+
1821
[JsonProperty("version")]
1922
public VersionRange? Version { get; set; }
2023

0 commit comments

Comments
 (0)