mirror of
https://github.com/velopack/velopack.git
synced 2025-10-25 15:19:22 +00:00
Get ApplyReleases building
This commit is contained in:
@@ -1,8 +1,12 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.Contracts;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using NuGet;
|
||||||
using Splat;
|
using Splat;
|
||||||
|
|
||||||
namespace Squirrel
|
namespace Squirrel
|
||||||
@@ -11,6 +15,16 @@ namespace Squirrel
|
|||||||
{
|
{
|
||||||
class ApplyReleases : IEnableLogger
|
class ApplyReleases : IEnableLogger
|
||||||
{
|
{
|
||||||
|
// TODO: Kill this entire concept
|
||||||
|
readonly FrameworkVersion appFrameworkVersion = FrameworkVersion.Net45;
|
||||||
|
|
||||||
|
readonly string rootAppDirectory;
|
||||||
|
|
||||||
|
public ApplyReleases(string rootAppDirectory)
|
||||||
|
{
|
||||||
|
this.rootAppDirectory = rootAppDirectory;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task ApplyReleases(UpdateInfo updateInfo, Action<int> progress = null)
|
public async Task ApplyReleases(UpdateInfo updateInfo, Action<int> progress = null)
|
||||||
{
|
{
|
||||||
progress = progress ?? (_ => { });
|
progress = progress ?? (_ => { });
|
||||||
@@ -28,6 +42,25 @@ namespace Squirrel
|
|||||||
progress(100);
|
progress(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task FullUninstall(Version version = null)
|
||||||
|
{
|
||||||
|
version = version ?? new Version(255, 255, 255, 255);
|
||||||
|
this.Log().Info("Uninstalling version '{0}'", version);
|
||||||
|
|
||||||
|
|
||||||
|
// find all the old releases (and this one)
|
||||||
|
var directoriesToDelete = getOldReleases(version)
|
||||||
|
.Concat(new [] { getDirectoryForRelease(version) })
|
||||||
|
.Where(d => d.Exists)
|
||||||
|
.Select(d => d.FullName);
|
||||||
|
|
||||||
|
await directoriesToDelete.ForEachAsync(x => Utility.DeleteDirectoryWithFallbackToNextReboot(x));
|
||||||
|
|
||||||
|
if (!getReleases().Any()) {
|
||||||
|
await Utility.DeleteDirectoryWithFallbackToNextReboot(rootAppDirectory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async Task installPackageToAppDir(UpdateInfo updateInfo, ReleaseEntry release)
|
async Task installPackageToAppDir(UpdateInfo updateInfo, ReleaseEntry release)
|
||||||
{
|
{
|
||||||
var pkg = new ZipPackage(Path.Combine(updateInfo.PackageDirectory, release.Filename));
|
var pkg = new ZipPackage(Path.Combine(updateInfo.PackageDirectory, release.Filename));
|
||||||
@@ -278,7 +311,34 @@ namespace Squirrel
|
|||||||
|
|
||||||
async Task updateLocalReleasesFile()
|
async Task updateLocalReleasesFile()
|
||||||
{
|
{
|
||||||
await Task.Run(() => ReleaseEntry.BuildReleasesFile(PackageDirectory));
|
await Task.Run(() => ReleaseEntry.BuildReleasesFile(Utility.PackageDirectoryForAppDir(rootAppDirectory)));
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerable<DirectoryInfo> getReleases()
|
||||||
|
{
|
||||||
|
var rootDirectory = new DirectoryInfo(rootAppDirectory);
|
||||||
|
|
||||||
|
if (!rootDirectory.Exists) return Enumerable.Empty<DirectoryInfo>();
|
||||||
|
|
||||||
|
return rootDirectory.GetDirectories()
|
||||||
|
.Where(x => x.Name.StartsWith("app-", StringComparison.InvariantCultureIgnoreCase));
|
||||||
|
}
|
||||||
|
|
||||||
|
IEnumerable<DirectoryInfo> getOldReleases(Version version)
|
||||||
|
{
|
||||||
|
return getReleases()
|
||||||
|
.Where(x => x.Name.ToVersion() < version)
|
||||||
|
.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
static string getLocalAppDataDirectory()
|
||||||
|
{
|
||||||
|
return Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
|
||||||
|
}
|
||||||
|
|
||||||
|
DirectoryInfo getDirectoryForRelease(Version releaseVersion)
|
||||||
|
{
|
||||||
|
return new DirectoryInfo(Path.Combine(rootAppDirectory, "app-" + releaseVersion));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,63 +41,36 @@ namespace Squirrel
|
|||||||
this.urlDownloader = urlDownloader ?? new FileDownloader();
|
this.urlDownloader = urlDownloader ?? new FileDownloader();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<UpdateInfo> CheckForUpdate(bool ignoreDeltaUpdates, Action<int> progress = null)
|
public async Task<UpdateInfo> CheckForUpdate(bool ignoreDeltaUpdates, Action<int> progress = null)
|
||||||
{
|
{
|
||||||
var checkForUpdate = new CheckForUpdates(rootAppDirectory);
|
var checkForUpdate = new CheckForUpdates(rootAppDirectory);
|
||||||
return checkForUpdate.CheckForUpdate(Utility.LocalReleaseFileForAppDir(rootAppDirectory), updateUrlOrPath, ignoreDeltaUpdates, progress, urlDownloader);
|
|
||||||
|
await acquireUpdateLock();
|
||||||
|
return await checkForUpdate.CheckForUpdate(Utility.LocalReleaseFileForAppDir(rootAppDirectory), updateUrlOrPath, ignoreDeltaUpdates, progress, urlDownloader);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task DownloadReleases(IEnumerable<ReleaseEntry> releasesToDownload, Action<int> progress = null)
|
public async Task DownloadReleases(IEnumerable<ReleaseEntry> releasesToDownload, Action<int> progress = null)
|
||||||
{
|
{
|
||||||
var downloadReleases = new DownloadReleases(rootAppDirectory);
|
var downloadReleases = new DownloadReleases(rootAppDirectory);
|
||||||
return downloadReleases.DownloadReleases(updateUrlOrPath, releasesToDownload, progress, urlDownloader);
|
await acquireUpdateLock();
|
||||||
|
|
||||||
|
await downloadReleases.DownloadReleases(updateUrlOrPath, releasesToDownload, progress, urlDownloader);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task ApplyReleases(UpdateInfo updateInfo, Action<int> progress = null)
|
public async Task ApplyReleases(UpdateInfo updateInfo, Action<int> progress = null)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
var applyReleases = new ApplyReleases(rootAppDirectory);
|
||||||
|
await acquireUpdateLock();
|
||||||
|
|
||||||
|
await applyReleases.ApplyReleases(updateInfo, progress);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task FullUninstall()
|
public async Task FullUninstall()
|
||||||
{
|
{
|
||||||
|
var applyReleases = new ApplyReleases(rootAppDirectory);
|
||||||
await acquireUpdateLock();
|
await acquireUpdateLock();
|
||||||
await fullUninstall();
|
|
||||||
}
|
|
||||||
|
|
||||||
IEnumerable<DirectoryInfo> getReleases()
|
await applyReleases.FullUninstall();
|
||||||
{
|
|
||||||
var rootDirectory = new DirectoryInfo(rootAppDirectory);
|
|
||||||
|
|
||||||
if (!rootDirectory.Exists) return Enumerable.Empty<DirectoryInfo>();
|
|
||||||
|
|
||||||
return rootDirectory.GetDirectories()
|
|
||||||
.Where(x => x.Name.StartsWith("app-", StringComparison.InvariantCultureIgnoreCase));
|
|
||||||
}
|
|
||||||
|
|
||||||
IEnumerable<DirectoryInfo> getOldReleases(Version version)
|
|
||||||
{
|
|
||||||
return getReleases()
|
|
||||||
.Where(x => x.Name.ToVersion() < version)
|
|
||||||
.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
async Task fullUninstall(Version version = null)
|
|
||||||
{
|
|
||||||
version = version ?? new Version(255, 255, 255, 255);
|
|
||||||
this.Log().Info("Uninstalling version '{0}'", version);
|
|
||||||
|
|
||||||
|
|
||||||
// find all the old releases (and this one)
|
|
||||||
var directoriesToDelete = getOldReleases(version)
|
|
||||||
.Concat(new [] { getDirectoryForRelease(version) })
|
|
||||||
.Where(d => d.Exists)
|
|
||||||
.Select(d => d.FullName);
|
|
||||||
|
|
||||||
await directoriesToDelete.ForEachAsync(x => Utility.DeleteDirectoryWithFallbackToNextReboot(x));
|
|
||||||
|
|
||||||
if (!getReleases().Any()) {
|
|
||||||
await Utility.DeleteDirectoryWithFallbackToNextReboot(rootAppDirectory);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
@@ -148,10 +121,5 @@ namespace Squirrel
|
|||||||
{
|
{
|
||||||
return Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
|
return Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
|
||||||
}
|
}
|
||||||
|
|
||||||
DirectoryInfo getDirectoryForRelease(Version releaseVersion)
|
|
||||||
{
|
|
||||||
return new DirectoryInfo(Path.Combine(rootAppDirectory, "app-" + releaseVersion));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user