mirror of
https://github.com/velopack/velopack.git
synced 2025-10-25 15:19:22 +00:00
Fix up Squirrel
This commit is contained in:
@@ -53,12 +53,9 @@ namespace Squirrel
|
||||
/// <returns>List with the elements that share the same maximum key value.</returns>
|
||||
public static IList<TSource> MaxBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IComparer<TKey> comparer)
|
||||
{
|
||||
if (source == null)
|
||||
throw new ArgumentNullException("source");
|
||||
if (keySelector == null)
|
||||
throw new ArgumentNullException("keySelector");
|
||||
if (comparer == null)
|
||||
throw new ArgumentNullException("comparer");
|
||||
if (source == null) throw new ArgumentNullException("source");
|
||||
if (keySelector == null) throw new ArgumentNullException("keySelector");
|
||||
if (comparer == null) throw new ArgumentNullException("comparer");
|
||||
|
||||
return ExtremaBy(source, keySelector, (key, minValue) => comparer.Compare(key, minValue));
|
||||
}
|
||||
@@ -67,27 +64,21 @@ namespace Squirrel
|
||||
{
|
||||
var result = new List<TSource>();
|
||||
|
||||
using (var e = source.GetEnumerator())
|
||||
{
|
||||
if (!e.MoveNext())
|
||||
throw new InvalidOperationException("Source sequence doesn't contain any elements.");
|
||||
using (var e = source.GetEnumerator()) {
|
||||
if (!e.MoveNext()) throw new InvalidOperationException("Source sequence doesn't contain any elements.");
|
||||
|
||||
var current = e.Current;
|
||||
var resKey = keySelector(current);
|
||||
result.Add(current);
|
||||
|
||||
while (e.MoveNext())
|
||||
{
|
||||
while (e.MoveNext()) {
|
||||
var cur = e.Current;
|
||||
var key = keySelector(cur);
|
||||
|
||||
var cmp = compare(key, resKey);
|
||||
if (cmp == 0)
|
||||
{
|
||||
if (cmp == 0) {
|
||||
result.Add(cur);
|
||||
}
|
||||
else if (cmp > 0)
|
||||
{
|
||||
} else if (cmp > 0) {
|
||||
result = new List<TSource> { cur };
|
||||
resKey = key;
|
||||
}
|
||||
@@ -106,10 +97,8 @@ namespace Squirrel
|
||||
/// <returns>Sequence exhibiting the specified side-effects upon enumeration.</returns>
|
||||
public static IEnumerable<TSource> Do<TSource>(this IEnumerable<TSource> source, Action<TSource> onNext)
|
||||
{
|
||||
if (source == null)
|
||||
throw new ArgumentNullException("source");
|
||||
if (onNext == null)
|
||||
throw new ArgumentNullException("onNext");
|
||||
if (source == null) throw new ArgumentNullException("source");
|
||||
if (onNext == null) throw new ArgumentNullException("onNext");
|
||||
|
||||
return DoHelper(source, onNext, _ => { }, () => { });
|
||||
}
|
||||
@@ -124,12 +113,9 @@ namespace Squirrel
|
||||
/// <returns>Sequence exhibiting the specified side-effects upon enumeration.</returns>
|
||||
public static IEnumerable<TSource> Do<TSource>(this IEnumerable<TSource> source, Action<TSource> onNext, Action onCompleted)
|
||||
{
|
||||
if (source == null)
|
||||
throw new ArgumentNullException("source");
|
||||
if (onNext == null)
|
||||
throw new ArgumentNullException("onNext");
|
||||
if (onCompleted == null)
|
||||
throw new ArgumentNullException("onCompleted");
|
||||
if (source == null) throw new ArgumentNullException("source");
|
||||
if (onNext == null) throw new ArgumentNullException("onNext");
|
||||
if (onCompleted == null) throw new ArgumentNullException("onCompleted");
|
||||
|
||||
return DoHelper(source, onNext, _ => { }, onCompleted);
|
||||
}
|
||||
@@ -144,12 +130,9 @@ namespace Squirrel
|
||||
/// <returns>Sequence exhibiting the specified side-effects upon enumeration.</returns>
|
||||
public static IEnumerable<TSource> Do<TSource>(this IEnumerable<TSource> source, Action<TSource> onNext, Action<Exception> onError)
|
||||
{
|
||||
if (source == null)
|
||||
throw new ArgumentNullException("source");
|
||||
if (onNext == null)
|
||||
throw new ArgumentNullException("onNext");
|
||||
if (onError == null)
|
||||
throw new ArgumentNullException("onError");
|
||||
if (source == null) throw new ArgumentNullException("source");
|
||||
if (onNext == null) throw new ArgumentNullException("onNext");
|
||||
if (onError == null) throw new ArgumentNullException("onError");
|
||||
|
||||
return DoHelper(source, onNext, onError, () => { });
|
||||
}
|
||||
@@ -165,34 +148,25 @@ namespace Squirrel
|
||||
/// <returns>Sequence exhibiting the specified side-effects upon enumeration.</returns>
|
||||
public static IEnumerable<TSource> Do<TSource>(this IEnumerable<TSource> source, Action<TSource> onNext, Action<Exception> onError, Action onCompleted)
|
||||
{
|
||||
if (source == null)
|
||||
throw new ArgumentNullException("source");
|
||||
if (onNext == null)
|
||||
throw new ArgumentNullException("onNext");
|
||||
if (onError == null)
|
||||
throw new ArgumentNullException("onError");
|
||||
if (onCompleted == null)
|
||||
throw new ArgumentNullException("onCompleted");
|
||||
if (source == null) throw new ArgumentNullException("source");
|
||||
if (onNext == null) throw new ArgumentNullException("onNext");
|
||||
if (onError == null) throw new ArgumentNullException("onError");
|
||||
if (onCompleted == null) throw new ArgumentNullException("onCompleted");
|
||||
|
||||
return DoHelper(source, onNext, onError, onCompleted);
|
||||
}
|
||||
|
||||
private static IEnumerable<TSource> DoHelper<TSource>(this IEnumerable<TSource> source, Action<TSource> onNext, Action<Exception> onError, Action onCompleted)
|
||||
{
|
||||
using (var e = source.GetEnumerator())
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
using (var e = source.GetEnumerator()) {
|
||||
while (true) {
|
||||
var current = default(TSource);
|
||||
try
|
||||
{
|
||||
try {
|
||||
if (!e.MoveNext())
|
||||
break;
|
||||
|
||||
current = e.Current;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
} catch (Exception ex) {
|
||||
onError(ex);
|
||||
throw;
|
||||
}
|
||||
@@ -214,19 +188,16 @@ namespace Squirrel
|
||||
/// <returns>Sequence starting with the specified prefix value, followed by the source sequence.</returns>
|
||||
public static IEnumerable<TSource> StartWith<TSource>(this IEnumerable<TSource> source, params TSource[] values)
|
||||
{
|
||||
if (source == null)
|
||||
throw new ArgumentNullException("source");
|
||||
if (source == null) throw new ArgumentNullException("source");
|
||||
|
||||
return source.StartWith_(values);
|
||||
}
|
||||
|
||||
static IEnumerable<TSource> StartWith_<TSource>(this IEnumerable<TSource> source, params TSource[] values)
|
||||
{
|
||||
foreach (var x in values)
|
||||
yield return x;
|
||||
foreach (var x in values) yield return x;
|
||||
|
||||
foreach (var item in source)
|
||||
yield return item;
|
||||
foreach (var item in source) yield return item;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -239,10 +210,8 @@ namespace Squirrel
|
||||
/// <returns>Sequence that contains the elements from the source sequence with distinct key values.</returns>
|
||||
public static IEnumerable<TSource> Distinct<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
|
||||
{
|
||||
if (source == null)
|
||||
throw new ArgumentNullException("source");
|
||||
if (keySelector == null)
|
||||
throw new ArgumentNullException("keySelector");
|
||||
if (source == null) throw new ArgumentNullException("source");
|
||||
if (keySelector == null) throw new ArgumentNullException("keySelector");
|
||||
|
||||
return source.Distinct_(keySelector, EqualityComparer<TKey>.Default);
|
||||
}
|
||||
@@ -258,12 +227,9 @@ namespace Squirrel
|
||||
/// <returns>Sequence that contains the elements from the source sequence with distinct key values.</returns>
|
||||
public static IEnumerable<TSource> Distinct<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
|
||||
{
|
||||
if (source == null)
|
||||
throw new ArgumentNullException("source");
|
||||
if (keySelector == null)
|
||||
throw new ArgumentNullException("keySelector");
|
||||
if (comparer == null)
|
||||
throw new ArgumentNullException("comparer");
|
||||
if (source == null) throw new ArgumentNullException("source");
|
||||
if (keySelector == null) throw new ArgumentNullException("keySelector");
|
||||
if (comparer == null) throw new ArgumentNullException("comparer");
|
||||
|
||||
return source.Distinct_(keySelector, comparer);
|
||||
}
|
||||
@@ -272,11 +238,10 @@ namespace Squirrel
|
||||
{
|
||||
var set = new HashSet<TKey>(comparer);
|
||||
|
||||
foreach (var item in source)
|
||||
{
|
||||
foreach (var item in source) {
|
||||
var key = keySelector(item);
|
||||
if (set.Add(key))
|
||||
yield return item;
|
||||
|
||||
if (set.Add(key)) yield return item;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,8 +8,7 @@ namespace Squirrel
|
||||
{
|
||||
public static string ExtractTitle(this IPackage package)
|
||||
{
|
||||
if (package == null)
|
||||
return String.Empty;
|
||||
if (package == null) return String.Empty;
|
||||
|
||||
var title = package.Title;
|
||||
return !String.IsNullOrWhiteSpace(title) ? title : package.Id;
|
||||
@@ -17,9 +16,8 @@ namespace Squirrel
|
||||
|
||||
public static FrameworkVersion DetectFrameworkVersion(this IPackage package)
|
||||
{
|
||||
return package.GetFiles().Any(x => x.Path.Contains("lib") && x.Path.Contains("45"))
|
||||
? FrameworkVersion.Net45
|
||||
: FrameworkVersion.Net40;
|
||||
return package.GetFiles().Any(x => x.Path.Contains("lib") && x.Path.Contains("45")) ?
|
||||
FrameworkVersion.Net45 : FrameworkVersion.Net40;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,19 +54,17 @@ namespace Squirrel
|
||||
|
||||
[IgnoreDataMember]
|
||||
public string PackageName {
|
||||
get {
|
||||
return Filename.Substring(0, Filename.IndexOfAny(new[] { '-', '.' }));
|
||||
}
|
||||
get { return Filename.Substring(0, Filename.IndexOfAny(new[] { '-', '.' })); }
|
||||
}
|
||||
|
||||
public string GetReleaseNotes(string packageDirectory)
|
||||
{
|
||||
var zp = new ZipPackage(Path.Combine(packageDirectory, Filename));
|
||||
|
||||
var t = zp.Id;
|
||||
|
||||
if (String.IsNullOrWhiteSpace(zp.ReleaseNotes))
|
||||
if (String.IsNullOrWhiteSpace(zp.ReleaseNotes)) {
|
||||
throw new Exception(String.Format("Invalid 'ReleaseNotes' value in nuspec file at '{0}'", Path.Combine(packageDirectory, Filename)));
|
||||
}
|
||||
|
||||
return zp.ReleaseNotes;
|
||||
}
|
||||
@@ -186,15 +184,14 @@ namespace Squirrel
|
||||
|
||||
public static ReleasePackage GetPreviousRelease(IEnumerable<ReleaseEntry> releaseEntries, IReleasePackage package, string targetDir)
|
||||
{
|
||||
if (releaseEntries == null || !releaseEntries.Any())
|
||||
return null;
|
||||
if (releaseEntries == null || !releaseEntries.Any()) return null;
|
||||
|
||||
return releaseEntries
|
||||
.Where(x => x.IsDelta == false)
|
||||
.Where(x => x.Version < package.ToVersion())
|
||||
.OrderByDescending(x => x.Version)
|
||||
.Select(x => new ReleasePackage(Path.Combine(targetDir, x.Filename), true))
|
||||
.FirstOrDefault();
|
||||
.Where(x => x.IsDelta == false)
|
||||
.Where(x => x.Version < package.ToVersion())
|
||||
.OrderByDescending(x => x.Version)
|
||||
.Select(x => new ReleasePackage(Path.Combine(targetDir, x.Filename), true))
|
||||
.FirstOrDefault();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,8 +17,8 @@ namespace Squirrel
|
||||
public static Version ToVersion(this string fileName)
|
||||
{
|
||||
var parts = (new FileInfo(fileName)).Name
|
||||
.Replace(".nupkg", "").Replace("-delta", "")
|
||||
.Split('.', '-').Reverse();
|
||||
.Replace(".nupkg", "").Replace("-delta", "")
|
||||
.Split('.', '-').Reverse();
|
||||
|
||||
var numberRegex = new Regex(@"^\d+$");
|
||||
|
||||
@@ -28,13 +28,11 @@ namespace Squirrel
|
||||
.Reverse()
|
||||
.ToArray();
|
||||
|
||||
if (versionFields.Length < 2 || versionFields.Length > 4)
|
||||
{
|
||||
if (versionFields.Length < 2 || versionFields.Length > 4) {
|
||||
return null;
|
||||
}
|
||||
|
||||
switch (versionFields.Length)
|
||||
{
|
||||
switch (versionFields.Length) {
|
||||
case 2:
|
||||
return new Version(versionFields[0], versionFields[1]);
|
||||
case 3:
|
||||
|
||||
@@ -34,14 +34,12 @@ namespace Squirrel
|
||||
|
||||
static int? GetAssemblySquirrelAwareVersion(string executable)
|
||||
{
|
||||
try
|
||||
{
|
||||
try {
|
||||
var assembly = AssemblyDefinition.ReadAssembly(executable);
|
||||
if (!assembly.HasCustomAttributes) return null;
|
||||
|
||||
var attrs = assembly.CustomAttributes;
|
||||
var attribute = attrs.FirstOrDefault(x =>
|
||||
{
|
||||
var attribute = attrs.FirstOrDefault(x => {
|
||||
if (x.AttributeType.FullName != typeof(AssemblyMetadataAttribute).FullName) return false;
|
||||
if (x.ConstructorArguments.Count != 2) return false;
|
||||
return x.ConstructorArguments[0].Value.ToString() == "SquirrelAwareVersion";
|
||||
@@ -50,8 +48,7 @@ namespace Squirrel
|
||||
if (attribute == null) return null;
|
||||
|
||||
int result;
|
||||
if (!Int32.TryParse(attribute.ConstructorArguments[1].Value.ToString(), NumberStyles.Integer, CultureInfo.CurrentCulture, out result))
|
||||
{
|
||||
if (!Int32.TryParse(attribute.ConstructorArguments[1].Value.ToString(), NumberStyles.Integer, CultureInfo.CurrentCulture, out result)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -72,8 +69,7 @@ namespace Squirrel
|
||||
if (!NativeMethods.GetFileVersionInfo(executable, IntPtr.Zero, size, buf)) return null;
|
||||
|
||||
IntPtr result; int resultSize;
|
||||
if (!NativeMethods.VerQueryValue(buf, "\\StringFileInfo\\040904B0\\SquirrelAwareVersion", out result, out resultSize))
|
||||
{
|
||||
if (!NativeMethods.VerQueryValue(buf, "\\StringFileInfo\\040904B0\\SquirrelAwareVersion", out result, out resultSize)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -32,9 +32,10 @@ namespace Squirrel
|
||||
// NB: When bootstrapping, CurrentlyInstalledVersion is null!
|
||||
CurrentlyInstalledVersion = currentlyInstalledVersion;
|
||||
ReleasesToApply = (releasesToApply ?? Enumerable.Empty<ReleaseEntry>()).ToList();
|
||||
FutureReleaseEntry = ReleasesToApply.Any()
|
||||
? ReleasesToApply.MaxBy(x => x.Version).FirstOrDefault()
|
||||
: null;
|
||||
FutureReleaseEntry = ReleasesToApply.Any() ?
|
||||
ReleasesToApply.MaxBy(x => x.Version).FirstOrDefault() :
|
||||
null;
|
||||
|
||||
AppFrameworkVersion = appFrameworkVersion;
|
||||
|
||||
this.PackageDirectory = packageDirectory;
|
||||
@@ -65,13 +66,15 @@ namespace Squirrel
|
||||
return new UpdateInfo(currentVersion, Enumerable.Empty<ReleaseEntry>(), packageDirectory, appFrameworkVersion);
|
||||
}
|
||||
|
||||
var newerThanUs = availableReleases.Where(x => x.Version > currentVersion.Version)
|
||||
.OrderBy(v => v.Version);
|
||||
var newerThanUs = availableReleases
|
||||
.Where(x => x.Version > currentVersion.Version)
|
||||
.OrderBy(v => v.Version);
|
||||
|
||||
var deltasSize = newerThanUs.Where(x => x.IsDelta).Sum(x => x.Filesize);
|
||||
|
||||
return (deltasSize < latestFull.Filesize && deltasSize > 0)
|
||||
? new UpdateInfo(currentVersion, newerThanUs.Where(x => x.IsDelta).ToArray(), packageDirectory, appFrameworkVersion)
|
||||
: new UpdateInfo(currentVersion, new[] { latestFull }, packageDirectory, appFrameworkVersion);
|
||||
return (deltasSize < latestFull.Filesize && deltasSize > 0) ?
|
||||
new UpdateInfo(currentVersion, newerThanUs.Where(x => x.IsDelta).ToArray(), packageDirectory, appFrameworkVersion) :
|
||||
new UpdateInfo(currentVersion, new[] { latestFull }, packageDirectory, appFrameworkVersion);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,8 +51,7 @@ namespace Squirrel
|
||||
{
|
||||
var currentRelease = getReleases().MaxBy(x => x.Name.ToVersion()).FirstOrDefault();
|
||||
|
||||
if (currentRelease.Exists)
|
||||
{
|
||||
if (currentRelease.Exists) {
|
||||
var version = currentRelease.Name.ToVersion();
|
||||
|
||||
await SquirrelAwareExecutableDetector.GetAllSquirrelAwareApps(currentRelease.FullName)
|
||||
|
||||
Reference in New Issue
Block a user