diff --git a/Directory.Packages.props b/Directory.Packages.props
index 2e1b042d8..744acfb94 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -12,10 +12,7 @@
-
-
-
diff --git a/GVFS.sln b/GVFS.sln
index 80a2cbf0e..f4847cd29 100644
--- a/GVFS.sln
+++ b/GVFS.sln
@@ -13,8 +13,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GVFS.FunctionalTests", "GVF
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GVFS.FunctionalTests.LockHolder", "GVFS\GVFS.FunctionalTests.LockHolder\GVFS.FunctionalTests.LockHolder.csproj", "{B26985C3-250A-4805-AA97-AD0604331AC7}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GVFS.GVFlt", "GVFS\GVFS.GVFlt\GVFS.GVFlt.csproj", "{B366D3B6-1E85-4015-8DB0-D5FA4331ECE4}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GVFS.Hooks", "GVFS\GVFS.Hooks\GVFS.Hooks.csproj", "{EDB4A40E-CFC9-486A-BDC5-AB2951FD8EDC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GVFS.Mount", "GVFS\GVFS.Mount\GVFS.Mount.csproj", "{F96089C2-6D09-4349-B65D-9CCA6160C6A5}"
@@ -75,10 +73,6 @@ Global
{B26985C3-250A-4805-AA97-AD0604331AC7}.Debug|x64.Build.0 = Debug|Any CPU
{B26985C3-250A-4805-AA97-AD0604331AC7}.Release|x64.ActiveCfg = Release|Any CPU
{B26985C3-250A-4805-AA97-AD0604331AC7}.Release|x64.Build.0 = Release|Any CPU
- {B366D3B6-1E85-4015-8DB0-D5FA4331ECE4}.Debug|x64.ActiveCfg = Debug|Any CPU
- {B366D3B6-1E85-4015-8DB0-D5FA4331ECE4}.Debug|x64.Build.0 = Debug|Any CPU
- {B366D3B6-1E85-4015-8DB0-D5FA4331ECE4}.Release|x64.ActiveCfg = Release|Any CPU
- {B366D3B6-1E85-4015-8DB0-D5FA4331ECE4}.Release|x64.Build.0 = Release|Any CPU
{EDB4A40E-CFC9-486A-BDC5-AB2951FD8EDC}.Debug|x64.ActiveCfg = Debug|Any CPU
{EDB4A40E-CFC9-486A-BDC5-AB2951FD8EDC}.Debug|x64.Build.0 = Debug|Any CPU
{EDB4A40E-CFC9-486A-BDC5-AB2951FD8EDC}.Release|x64.ActiveCfg = Release|Any CPU
diff --git a/GVFS/FastFetch/FastFetch.csproj b/GVFS/FastFetch/FastFetch.csproj
index a2584da8b..cb75afee8 100644
--- a/GVFS/FastFetch/FastFetch.csproj
+++ b/GVFS/FastFetch/FastFetch.csproj
@@ -20,7 +20,6 @@
Microsoft400
diff --git a/GVFS/GVFS.FunctionalTests/GVFS.FunctionalTests.csproj b/GVFS/GVFS.FunctionalTests/GVFS.FunctionalTests.csproj
index e11eab0dc..daf852167 100644
--- a/GVFS/GVFS.FunctionalTests/GVFS.FunctionalTests.csproj
+++ b/GVFS/GVFS.FunctionalTests/GVFS.FunctionalTests.csproj
@@ -9,7 +9,6 @@
-
diff --git a/GVFS/GVFS.FunctionalTests/Tools/GVFSHelpers.cs b/GVFS/GVFS.FunctionalTests/Tools/GVFSHelpers.cs
index d079e3668..b15d66eed 100644
--- a/GVFS/GVFS.FunctionalTests/Tools/GVFSHelpers.cs
+++ b/GVFS/GVFS.FunctionalTests/Tools/GVFSHelpers.cs
@@ -36,7 +36,7 @@ public static class GVFSHelpers
private const int WindowsCurrentDiskLayoutMajorVersion = 19;
private const int MacCurrentDiskLayoutMajorVersion = 19;
- private const int WindowsCurrentDiskLayoutMinimumMajorVersion = 7;
+ private const int WindowsCurrentDiskLayoutMinimumMajorVersion = 14;
private const int MacCurrentDiskLayoutMinimumMajorVersion = 18;
public static string ConvertPathToGitFormat(string path)
diff --git a/GVFS/GVFS.FunctionalTests/Windows/Tests/SharedCacheUpgradeTests.cs b/GVFS/GVFS.FunctionalTests/Windows/Tests/SharedCacheUpgradeTests.cs
index 3025b443e..e6432ed41 100644
--- a/GVFS/GVFS.FunctionalTests/Windows/Tests/SharedCacheUpgradeTests.cs
+++ b/GVFS/GVFS.FunctionalTests/Windows/Tests/SharedCacheUpgradeTests.cs
@@ -3,11 +3,9 @@
using GVFS.FunctionalTests.Tests.MultiEnlistmentTests;
using GVFS.FunctionalTests.Tools;
using GVFS.FunctionalTests.Windows.Tests;
-using GVFS.FunctionalTests.Windows.Tools;
using GVFS.Tests.Should;
using NUnit.Framework;
using System;
-using System.Collections.Generic;
using System.IO;
namespace GVFS.FunctionalTests.Windows.Windows.Tests
@@ -33,115 +31,6 @@ public void SetCacheLocation()
this.localCachePath = Path.Combine(this.localCacheParentPath, ".customGVFSCache");
}
- [TestCase]
- public void MountUpgradesLocalSizesToSharedCache()
- {
- GVFSFunctionalTestEnlistment enlistment = this.CloneAndMountEnlistment();
- enlistment.UnmountGVFS();
-
- string localCacheRoot = GVFSHelpers.GetPersistedLocalCacheRoot(enlistment.DotGVFSRoot);
- string gitObjectsRoot = GVFSHelpers.GetPersistedGitObjectsRoot(enlistment.DotGVFSRoot);
-
- // Delete the existing repo metadata
- string versionJsonPath = Path.Combine(enlistment.DotGVFSRoot, GVFSHelpers.RepoMetadataName);
- versionJsonPath.ShouldBeAFile(this.fileSystem);
- this.fileSystem.DeleteFile(versionJsonPath);
-
- // Since there isn't a sparse-checkout file that is used anymore one needs to be added
- // in order to test the old upgrades that might have needed it
- string sparseCheckoutPath = Path.Combine(enlistment.RepoRoot, TestConstants.DotGit.Info.SparseCheckoutPath);
- this.fileSystem.WriteAllText(sparseCheckoutPath, "/.gitattributes\r\n");
-
- // "13.0" was the last version before blob sizes were moved out of Esent
- string metadataPath = Path.Combine(enlistment.DotGVFSRoot, GVFSHelpers.RepoMetadataName);
- this.fileSystem.CreateEmptyFile(metadataPath);
- GVFSHelpers.SaveDiskLayoutVersion(enlistment.DotGVFSRoot, "13", "0");
- GVFSHelpers.SaveLocalCacheRoot(enlistment.DotGVFSRoot, localCacheRoot);
- GVFSHelpers.SaveGitObjectsRoot(enlistment.DotGVFSRoot, gitObjectsRoot);
-
- // Create a legacy PersistedDictionary sizes database
- List> entries = new List>()
- {
- new KeyValuePair(new string('0', 40), 1),
- new KeyValuePair(new string('1', 40), 2),
- new KeyValuePair(new string('2', 40), 4),
- new KeyValuePair(new string('3', 40), 8),
- };
-
- ESENTDatabase.CreateEsentBlobSizesDatabase(enlistment.DotGVFSRoot, entries);
-
- enlistment.MountGVFS();
-
- string majorVersion;
- string minorVersion;
- GVFSHelpers.GetPersistedDiskLayoutVersion(enlistment.DotGVFSRoot, out majorVersion, out minorVersion);
-
- majorVersion
- .ShouldBeAnInt("Disk layout version should always be an int")
- .ShouldEqual(WindowsDiskLayoutUpgradeTests.CurrentDiskLayoutMajorVersion, "Disk layout version should be upgraded to the latest");
-
- minorVersion
- .ShouldBeAnInt("Disk layout version should always be an int")
- .ShouldEqual(WindowsDiskLayoutUpgradeTests.CurrentDiskLayoutMinorVersion, "Disk layout version should be upgraded to the latest");
-
- string newBlobSizesRoot = Path.Combine(Path.GetDirectoryName(gitObjectsRoot), WindowsDiskLayoutUpgradeTests.BlobSizesCacheName);
- GVFSHelpers.GetPersistedBlobSizesRoot(enlistment.DotGVFSRoot)
- .ShouldEqual(newBlobSizesRoot);
-
- string blobSizesDbPath = Path.Combine(newBlobSizesRoot, WindowsDiskLayoutUpgradeTests.BlobSizesDBFileName);
- newBlobSizesRoot.ShouldBeADirectory(this.fileSystem);
- blobSizesDbPath.ShouldBeAFile(this.fileSystem);
-
- foreach (KeyValuePair entry in entries)
- {
- GVFSHelpers.SQLiteBlobSizesDatabaseHasEntry(blobSizesDbPath, entry.Key, entry.Value);
- }
-
- // Upgrade a second repo, and make sure all sizes from both upgrades are in the shared database
-
- GVFSFunctionalTestEnlistment enlistment2 = this.CloneAndMountEnlistment();
- enlistment2.UnmountGVFS();
-
- // Delete the existing repo metadata
- versionJsonPath = Path.Combine(enlistment2.DotGVFSRoot, GVFSHelpers.RepoMetadataName);
- versionJsonPath.ShouldBeAFile(this.fileSystem);
- this.fileSystem.DeleteFile(versionJsonPath);
-
- // Since there isn't a sparse-checkout file that is used anymore one needs to be added
- // in order to test the old upgrades that might have needed it
- string sparseCheckoutPath2 = Path.Combine(enlistment2.RepoRoot, TestConstants.DotGit.Info.SparseCheckoutPath);
- this.fileSystem.WriteAllText(sparseCheckoutPath2, "/.gitattributes\r\n");
-
- // "13.0" was the last version before blob sizes were moved out of Esent
- metadataPath = Path.Combine(enlistment2.DotGVFSRoot, GVFSHelpers.RepoMetadataName);
- this.fileSystem.CreateEmptyFile(metadataPath);
- GVFSHelpers.SaveDiskLayoutVersion(enlistment2.DotGVFSRoot, "13", "0");
- GVFSHelpers.SaveLocalCacheRoot(enlistment2.DotGVFSRoot, localCacheRoot);
- GVFSHelpers.SaveGitObjectsRoot(enlistment2.DotGVFSRoot, gitObjectsRoot);
-
- // Create a legacy PersistedDictionary sizes database
- List> additionalEntries = new List>()
- {
- new KeyValuePair(new string('4', 40), 16),
- new KeyValuePair(new string('5', 40), 32),
- new KeyValuePair(new string('6', 40), 64),
- };
-
- ESENTDatabase.CreateEsentBlobSizesDatabase(enlistment2.DotGVFSRoot, additionalEntries);
-
- enlistment2.MountGVFS();
-
- foreach (KeyValuePair entry in entries)
- {
- GVFSHelpers.SQLiteBlobSizesDatabaseHasEntry(blobSizesDbPath, entry.Key, entry.Value);
- }
-
- foreach (KeyValuePair entry in additionalEntries)
- {
- GVFSHelpers.SQLiteBlobSizesDatabaseHasEntry(blobSizesDbPath, entry.Key, entry.Value);
- }
- }
-
private GVFSFunctionalTestEnlistment CloneAndMountEnlistment(string branch = null)
{
return this.CreateNewEnlistment(this.localCachePath, branch);
diff --git a/GVFS/GVFS.FunctionalTests/Windows/Tests/WindowsDiskLayoutUpgradeTests.cs b/GVFS/GVFS.FunctionalTests/Windows/Tests/WindowsDiskLayoutUpgradeTests.cs
index 328652458..a790516b6 100644
--- a/GVFS/GVFS.FunctionalTests/Windows/Tests/WindowsDiskLayoutUpgradeTests.cs
+++ b/GVFS/GVFS.FunctionalTests/Windows/Tests/WindowsDiskLayoutUpgradeTests.cs
@@ -1,7 +1,6 @@
using GVFS.FunctionalTests.Should;
using GVFS.FunctionalTests.Tests.EnlistmentPerTestCase;
using GVFS.FunctionalTests.Tools;
-using GVFS.FunctionalTests.Windows.Tools;
using GVFS.Tests.Should;
using NUnit.Framework;
using System;
@@ -38,106 +37,15 @@ public override void CreateEnlistment()
}
[TestCase]
- public void MountUpgradesFromVersion7()
- {
- // Seven to eight is a just a version change (non-breaking), but preserves ESENT RepoMetadata
- this.RunEsentRepoMetadataUpgradeTest("7");
- }
-
- [TestCase]
- public void MountUpgradesFromEsentToJsonRepoMetadata()
- {
- // Eight is the last version with ESENT RepoMetadata DB
- this.RunEsentRepoMetadataUpgradeTest("8");
- }
-
- [TestCase]
- public void MountUpgradesFromEsentDatabasesToFlatDatabases()
- {
- this.Enlistment.UnmountGVFS();
-
- // Delete the existing background ops data
- string flatBackgroundPath = Path.Combine(this.Enlistment.DotGVFSRoot, GVFSHelpers.BackgroundOpsFile);
- flatBackgroundPath.ShouldBeAFile(this.fileSystem);
- this.fileSystem.DeleteFile(flatBackgroundPath);
-
- // Delete the existing placeholder data
- string placeholdersPath = Path.Combine(this.Enlistment.DotGVFSRoot, TestConstants.Databases.VFSForGit);
- placeholdersPath.ShouldBeAFile(this.fileSystem);
- this.fileSystem.DeleteFile(placeholdersPath);
-
- ESENTDatabase.CreateEsentBackgroundOpsDatabase(this.Enlistment.DotGVFSRoot);
- ESENTDatabase.CreateEsentPlaceholderDatabase(this.Enlistment.DotGVFSRoot);
-
- // Nine is the last version with ESENT BackgroundOps and Placeholders DBs
- GVFSHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGVFSRoot, "9", "0");
- this.Enlistment.MountGVFS();
-
- this.ValidatePersistedVersionMatchesCurrentVersion();
-
- flatBackgroundPath.ShouldBeAFile(this.fileSystem);
- placeholdersPath.ShouldBeAFile(this.fileSystem);
- }
-
- [TestCase]
- public void MountUpgradesFromPriorToPlaceholderCreationsBlockedForGit()
- {
- this.Enlistment.UnmountGVFS();
-
- GVFSHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGVFSRoot, "10", "0");
-
- this.Enlistment.MountGVFS();
-
- this.ValidatePersistedVersionMatchesCurrentVersion();
- }
-
- [TestCase]
- public void MountFailsToUpgradeFromEsentVersion6ToJsonRepoMetadata()
- {
- this.Enlistment.UnmountGVFS();
-
- // Delete the existing repo metadata
- string versionJsonPath = Path.Combine(this.Enlistment.DotGVFSRoot, GVFSHelpers.RepoMetadataName);
- versionJsonPath.ShouldBeAFile(this.fileSystem);
- this.fileSystem.DeleteFile(versionJsonPath);
-
- ESENTDatabase.SaveDiskLayoutVersionAsEsentDatabase(this.Enlistment.DotGVFSRoot, "6");
- string esentDatabasePath = Path.Combine(this.Enlistment.DotGVFSRoot, ESENTDatabase.EsentRepoMetadataFolder);
- esentDatabasePath.ShouldBeADirectory(this.fileSystem);
-
- this.Enlistment.TryMountGVFS().ShouldEqual(false, "Should not be able to upgrade from version 6");
-
- esentDatabasePath.ShouldBeADirectory(this.fileSystem);
- }
-
- [TestCase]
- public void MountSetsGitObjectsRootToLegacyDotGVFSCache()
+ public void MountUpgradesFromMinimumSupportedVersion()
{
this.Enlistment.UnmountGVFS();
- // Delete the existing repo metadata
- string versionJsonPath = Path.Combine(this.Enlistment.DotGVFSRoot, GVFSHelpers.RepoMetadataName);
- versionJsonPath.ShouldBeAFile(this.fileSystem);
- this.fileSystem.DeleteFile(versionJsonPath);
-
- // "11" was the last version before the introduction of a volume wide GVFS cache
- string metadataPath = Path.Combine(this.Enlistment.DotGVFSRoot, GVFSHelpers.RepoMetadataName);
- this.fileSystem.CreateEmptyFile(metadataPath);
- GVFSHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGVFSRoot, "11", "0");
-
- // Create the legacy cache location: \.gvfs\gitObjectCache
- string legacyGitObjectsCachePath = Path.Combine(this.Enlistment.DotGVFSRoot, "gitObjectCache");
- this.fileSystem.CreateDirectory(legacyGitObjectsCachePath);
+ GVFSHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGVFSRoot, "14", "0");
this.Enlistment.MountGVFS();
this.ValidatePersistedVersionMatchesCurrentVersion();
-
- GVFSHelpers.GetPersistedLocalCacheRoot(this.Enlistment.DotGVFSRoot)
- .ShouldEqual(string.Empty, "LocalCacheRoot should be an empty string when upgrading from a version prior to 12");
-
- GVFSHelpers.GetPersistedGitObjectsRoot(this.Enlistment.DotGVFSRoot)
- .ShouldEqual(legacyGitObjectsCachePath);
}
[TestCase]
@@ -159,7 +67,7 @@ public void MountWritesFolderPlaceholdersToPlaceholderDatabase()
placeholderDatabasePath,
string.Join(Environment.NewLine, lines.Where(x => !x.EndsWith(TestConstants.PartialFolderPlaceholderDatabaseValue))) + Environment.NewLine);
- GVFSHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGVFSRoot, "12", "1");
+ GVFSHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGVFSRoot, "15", "0");
this.Enlistment.MountGVFS();
this.Enlistment.UnmountGVFS();
@@ -200,65 +108,11 @@ public void MountUpdatesAllZeroShaFolderPlaceholderEntriesToPartialFolderSpecial
this.ValidatePersistedVersionMatchesCurrentVersion();
}
- [TestCase]
- public void MountUpgradesPreSharedCacheLocalSizes()
- {
- this.Enlistment.UnmountGVFS();
-
- // Delete the existing repo metadata
- string versionJsonPath = Path.Combine(this.Enlistment.DotGVFSRoot, GVFSHelpers.RepoMetadataName);
- versionJsonPath.ShouldBeAFile(this.fileSystem);
- this.fileSystem.DeleteFile(versionJsonPath);
-
- // "11" was the last version before the introduction of a volume wide GVFS cache
- string metadataPath = Path.Combine(this.Enlistment.DotGVFSRoot, GVFSHelpers.RepoMetadataName);
- this.fileSystem.CreateEmptyFile(metadataPath);
- GVFSHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGVFSRoot, "11", "0");
-
- // Create the legacy cache location: \.gvfs\gitObjectCache
- string legacyGitObjectsCachePath = Path.Combine(this.Enlistment.DotGVFSRoot, "gitObjectCache");
- this.fileSystem.CreateDirectory(legacyGitObjectsCachePath);
-
- // Create a legacy PersistedDictionary sizes database
- List> entries = new List>()
- {
- new KeyValuePair(new string('0', 40), 1),
- new KeyValuePair(new string('1', 40), 2),
- new KeyValuePair(new string('2', 40), 4),
- new KeyValuePair(new string('3', 40), 8),
- };
-
- ESENTDatabase.CreateEsentBlobSizesDatabase(this.Enlistment.DotGVFSRoot, entries);
-
- this.Enlistment.MountGVFS();
-
- this.ValidatePersistedVersionMatchesCurrentVersion();
-
- GVFSHelpers.GetPersistedLocalCacheRoot(this.Enlistment.DotGVFSRoot)
- .ShouldEqual(string.Empty, "LocalCacheRoot should be an empty string when upgrading from a version prior to 12");
-
- GVFSHelpers.GetPersistedGitObjectsRoot(this.Enlistment.DotGVFSRoot)
- .ShouldEqual(legacyGitObjectsCachePath);
-
- string newBlobSizesRoot = Path.Combine(this.Enlistment.DotGVFSRoot, DatabasesFolderName, BlobSizesCacheName);
- GVFSHelpers.GetPersistedBlobSizesRoot(this.Enlistment.DotGVFSRoot)
- .ShouldEqual(newBlobSizesRoot);
-
- string blobSizesDbPath = Path.Combine(newBlobSizesRoot, BlobSizesDBFileName);
- newBlobSizesRoot.ShouldBeADirectory(this.fileSystem);
- blobSizesDbPath.ShouldBeAFile(this.fileSystem);
-
- foreach (KeyValuePair entry in entries)
- {
- GVFSHelpers.SQLiteBlobSizesDatabaseHasEntry(blobSizesDbPath, entry.Key, entry.Value);
- }
- }
-
[TestCase]
public void MountCreatesModifiedPathsDatabase()
{
this.Enlistment.UnmountGVFS();
- GVFSHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGVFSRoot, "14", "0");
+ GVFSHelpers.SaveDiskLayoutVersion(this.Enlistment.DotGVFSRoot, "15", "0");
// Delete the existing modified paths database to make sure mount creates it.
string modifiedPathsDatabasePath = Path.Combine(this.Enlistment.DotGVFSRoot, TestConstants.Databases.ModifiedPaths);
@@ -376,37 +230,5 @@ private string[] GetPlaceholderDatabaseLinesAfterUpgradeFrom16(string placeholde
lines.ShouldContain(x => x == this.PartialFolderPlaceholderString("GVFS", "GVFS.Tests", "Properties"));
return lines;
}
-
- private void RunEsentRepoMetadataUpgradeTest(string sourceVersion)
- {
- this.Enlistment.UnmountGVFS();
-
- // Delete the existing repo metadata
- string versionJsonPath = Path.Combine(this.Enlistment.DotGVFSRoot, GVFSHelpers.RepoMetadataName);
- versionJsonPath.ShouldBeAFile(this.fileSystem);
- this.fileSystem.DeleteFile(versionJsonPath);
-
- ESENTDatabase.SaveDiskLayoutVersionAsEsentDatabase(this.Enlistment.DotGVFSRoot, sourceVersion);
- string esentDatabasePath = Path.Combine(this.Enlistment.DotGVFSRoot, ESENTDatabase.EsentRepoMetadataFolder);
- esentDatabasePath.ShouldBeADirectory(this.fileSystem);
-
- // We should be able to mount, and there should no longer be any Esent Repo Metadata
- this.Enlistment.MountGVFS();
- esentDatabasePath.ShouldNotExistOnDisk(this.fileSystem);
- versionJsonPath.ShouldBeAFile(this.fileSystem);
-
- this.ValidatePersistedVersionMatchesCurrentVersion();
-
- GVFSHelpers.GetPersistedLocalCacheRoot(this.Enlistment.DotGVFSRoot)
- .ShouldEqual(string.Empty, "LocalCacheRoot should be an empty string when upgrading from a version prior to 12");
-
- // We're starting with fresh enlisments, and so the legacy cache location: \.gvfs\gitObjectCache should not be on disk
- Path.Combine(this.Enlistment.DotGVFSRoot, ".gvfs", "gitObjectCache").ShouldNotExistOnDisk(this.fileSystem);
-
- // The upgrader should set GitObjectsRoot to src\.git\objects (because the legacy cache location is not on disk)
- GVFSHelpers.GetPersistedGitObjectsRoot(this.Enlistment.DotGVFSRoot)
- .ShouldNotBeNull("GitObjectsRoot should not be null")
- .ShouldEqual(Path.Combine(this.Enlistment.RepoRoot, ".git", "objects"));
- }
}
}
diff --git a/GVFS/GVFS.FunctionalTests/Windows/Tools/ESENTDatabase.cs b/GVFS/GVFS.FunctionalTests/Windows/Tools/ESENTDatabase.cs
deleted file mode 100644
index 31c04e0b5..000000000
--- a/GVFS/GVFS.FunctionalTests/Windows/Tools/ESENTDatabase.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-using Microsoft.Isam.Esent.Collections.Generic;
-
-namespace GVFS.FunctionalTests.Windows.Tools
-{
- public static class ESENTDatabase
- {
- public const string EsentRepoMetadataFolder = "RepoMetadata";
- public const string EsentBackgroundOpsFolder = "BackgroundGitUpdates";
- public const string EsentBlobSizesFolder = "BlobSizes";
- public const string EsentPlaceholderFolder = "PlaceholderList";
-
- private const string DiskLayoutMajorVersionKey = "DiskLayoutVersion";
-
- public static void SaveDiskLayoutVersionAsEsentDatabase(string dotGVFSRoot, string majorVersion)
- {
- string metadataPath = Path.Combine(dotGVFSRoot, EsentRepoMetadataFolder);
- using (PersistentDictionary repoMetadata = new PersistentDictionary(metadataPath))
- {
- repoMetadata[DiskLayoutMajorVersionKey] = majorVersion;
- repoMetadata.Flush();
- }
- }
-
- public static void CreateEsentPlaceholderDatabase(string dotGVFSRoot)
- {
- string metadataPath = Path.Combine(dotGVFSRoot, EsentPlaceholderFolder);
- using (PersistentDictionary placeholders = new PersistentDictionary(metadataPath))
- {
- placeholders["mock:\\path"] = new string('0', 40);
- placeholders.Flush();
- }
- }
-
- public static void CreateEsentBackgroundOpsDatabase(string dotGVFSRoot)
- {
- // Copies an ESENT DB with a single entry:
- // Operation=6 (OnFirstWrite) Path=.gitattributes VirtualPath=.gitattributes Id=1
- string testDataPath = GetTestDataPath(EsentBackgroundOpsFolder);
- string metadataPath = Path.Combine(dotGVFSRoot, EsentBackgroundOpsFolder);
- Directory.CreateDirectory(metadataPath);
- foreach (string filepath in Directory.EnumerateFiles(testDataPath))
- {
- string filename = Path.GetFileName(filepath);
- File.Copy(filepath, Path.Combine(metadataPath, filename));
- }
- }
-
- public static void CreateEsentBlobSizesDatabase(string dotGVFSRoot, List> entries)
- {
- string metadataPath = Path.Combine(dotGVFSRoot, EsentBlobSizesFolder);
- using (PersistentDictionary blobSizes = new PersistentDictionary(metadataPath))
- {
- foreach (KeyValuePair entry in entries)
- {
- blobSizes[entry.Key] = entry.Value;
- }
-
- blobSizes.Flush();
- }
- }
-
- private static string GetTestDataPath(string fileName)
- {
- string workingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
- return Path.Combine(workingDirectory, "Windows", "TestData", fileName);
- }
- }
-}
diff --git a/GVFS/GVFS.GVFlt/GVFS.GVFlt.csproj b/GVFS/GVFS.GVFlt/GVFS.GVFlt.csproj
deleted file mode 100644
index 44acd016c..000000000
--- a/GVFS/GVFS.GVFlt/GVFS.GVFlt.csproj
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- net471
-
-
-
-
-
-
-
diff --git a/GVFS/GVFS.GVFlt/GVFltCallbacks.cs b/GVFS/GVFS.GVFlt/GVFltCallbacks.cs
deleted file mode 100644
index f841f12ec..000000000
--- a/GVFS/GVFS.GVFlt/GVFltCallbacks.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using Newtonsoft.Json;
-using System;
-
-namespace GVFS.GVFlt
-{
- public class GVFltCallbacks
- {
- ///
- /// This struct must remain here for DiskLayout9to10Upgrade_BackgroundAndPlaceholderListToFileBased
- ///
- ///
- /// This struct should only be used by the upgrader, it has been replaced by GVFS.Virtualization.Background.FileSystemTask
- ///
- [Serializable]
- public struct BackgroundGitUpdate
- {
- // This enum must be present or the BinarySerializer will always deserialze Operation as 0
- public enum OperationType
- {
- Invalid = 0,
- }
-
- public OperationType Operation { get; set; }
- public string VirtualPath { get; set; }
- public string OldVirtualPath { get; set; }
-
- // Used by the logging in the upgrader
- public override string ToString()
- {
- return JsonConvert.SerializeObject(this);
- }
- }
- }
-}
diff --git a/GVFS/GVFS.Payload/GVFS.Payload.csproj b/GVFS/GVFS.Payload/GVFS.Payload.csproj
index e7bc79415..49fe4a551 100644
--- a/GVFS/GVFS.Payload/GVFS.Payload.csproj
+++ b/GVFS/GVFS.Payload/GVFS.Payload.csproj
@@ -41,7 +41,6 @@
$(OutputPath)\GitHooksLoader.exe;
$(OutputPath)\GVFS.Common.dll;
$(OutputPath)\GVFS.exe;
- $(OutputPath)\GVFS.GVFlt.dll;
$(OutputPath)\GVFS.Hooks.exe;
$(OutputPath)\GVFS.Mount.exe;
$(OutputPath)\GVFS.Platform.Windows.dll;
diff --git a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout10to11Upgrade_NewOperationType.cs b/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout10to11Upgrade_NewOperationType.cs
deleted file mode 100644
index aa574ea8c..000000000
--- a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout10to11Upgrade_NewOperationType.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-using GVFS.Common.Tracing;
-using GVFS.DiskLayoutUpgrades;
-
-namespace GVFS.Platform.Windows.DiskLayoutUpgrades
-{
- public class DiskLayout10to11Upgrade_NewOperationType : DiskLayoutUpgrade.MajorUpgrade
- {
- protected override int SourceMajorVersion
- {
- get { return 10; }
- }
-
- ///
- /// Version 10 to 11 only added a new value to BackgroundGitUpdate.OperationType,
- /// so we only need to bump the disk layout version version here.
- ///
- public override bool TryUpgrade(ITracer tracer, string enlistmentRoot)
- {
- if (!this.TryIncrementMajorVersion(tracer, enlistmentRoot))
- {
- return false;
- }
-
- return true;
- }
- }
-}
diff --git a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout11to12Upgrade_SharedLocalCache.cs b/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout11to12Upgrade_SharedLocalCache.cs
deleted file mode 100644
index d5f31218f..000000000
--- a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout11to12Upgrade_SharedLocalCache.cs
+++ /dev/null
@@ -1,63 +0,0 @@
-using GVFS.Common;
-using GVFS.Common.Tracing;
-using GVFS.DiskLayoutUpgrades;
-using System.IO;
-
-namespace GVFS.Platform.Windows.DiskLayoutUpgrades
-{
- public class DiskLayout11to12Upgrade_SharedLocalCache : DiskLayoutUpgrade.MajorUpgrade
- {
- protected override int SourceMajorVersion
- {
- get { return 11; }
- }
-
- ///
- /// Version 11 to 12 added the shared local git objects cache.
- ///
- public override bool TryUpgrade(ITracer tracer, string enlistmentRoot)
- {
- string dotGVFSPath = Path.Combine(enlistmentRoot, GVFSPlatform.Instance.Constants.DotGVFSRoot);
- string error;
- if (!RepoMetadata.TryInitialize(tracer, dotGVFSPath, out error))
- {
- tracer.RelatedError(nameof(this.TryUpgradeGitObjectPath) + ": Could not initialize repo metadata: " + error);
- return false;
- }
-
- if (!this.TryUpgradeGitObjectPath(tracer, enlistmentRoot))
- {
- return false;
- }
-
- RepoMetadata.Instance.SetLocalCacheRoot(string.Empty);
- tracer.RelatedInfo("Set LocalCacheRoot to string.Empty");
-
- if (!this.TryIncrementMajorVersion(tracer, enlistmentRoot))
- {
- return false;
- }
-
- return true;
- }
-
- private bool TryUpgradeGitObjectPath(ITracer tracer, string enlistmentRoot)
- {
- string gitObjectsRoot;
- string legacyDotGVFSGitObjectCachePath = Path.Combine(enlistmentRoot, GVFSPlatform.Instance.Constants.DotGVFSRoot, "gitObjectCache");
- if (Directory.Exists(legacyDotGVFSGitObjectCachePath))
- {
- gitObjectsRoot = legacyDotGVFSGitObjectCachePath;
- }
- else
- {
- // Old version prior to \.gvfs\gitObjectCache cache
- gitObjectsRoot = Path.Combine(enlistmentRoot, GVFSConstants.WorkingDirectoryRootName, GVFSConstants.DotGit.Objects.Root);
- }
-
- RepoMetadata.Instance.SetGitObjectsRoot(gitObjectsRoot);
- tracer.RelatedInfo("Set GitObjectsRoot: " + gitObjectsRoot);
- return true;
- }
- }
-}
\ No newline at end of file
diff --git a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout12_0To12_1Upgrade_StatusAheadBehind.cs b/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout12_0To12_1Upgrade_StatusAheadBehind.cs
deleted file mode 100644
index 2f90d8a43..000000000
--- a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout12_0To12_1Upgrade_StatusAheadBehind.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using GVFS.Common.Tracing;
-using GVFS.DiskLayoutUpgrades;
-using System.Collections.Generic;
-
-namespace GVFS.Platform.Windows.DiskLayoutUpgrades
-{
- public class DiskLayout12_0To12_1Upgrade_StatusAheadBehind : DiskLayoutUpgrade.MinorUpgrade
- {
- protected override int SourceMajorVersion
- {
- get { return 12; }
- }
-
- protected override int SourceMinorVersion
- {
- get { return 0; }
- }
-
- public override bool TryUpgrade(ITracer tracer, string enlistmentRoot)
- {
- if (!this.TrySetGitConfig(
- tracer,
- enlistmentRoot,
- new Dictionary
- {
- { "status.aheadbehind", "false" },
- }))
- {
- return false;
- }
-
- return this.TryIncrementMinorVersion(tracer, enlistmentRoot);
- }
- }
-}
diff --git a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout12to13Upgrade_FolderPlaceholder.cs b/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout12to13Upgrade_FolderPlaceholder.cs
deleted file mode 100644
index 496363404..000000000
--- a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout12to13Upgrade_FolderPlaceholder.cs
+++ /dev/null
@@ -1,123 +0,0 @@
-using GVFS.Common;
-using GVFS.Common.Database;
-using GVFS.Common.FileSystem;
-using GVFS.Common.Tracing;
-using GVFS.DiskLayoutUpgrades;
-using Microsoft.Windows.ProjFS;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-
-namespace GVFS.Platform.Windows.DiskLayoutUpgrades
-{
- public class DiskLayout12to13Upgrade_FolderPlaceholder : DiskLayoutUpgrade.MajorUpgrade
- {
- protected override int SourceMajorVersion
- {
- get { return 12; }
- }
-
- ///
- /// Adds the folder placeholders to the placeholders list
- ///
- public override bool TryUpgrade(ITracer tracer, string enlistmentRoot)
- {
- string dotGVFSRoot = Path.Combine(enlistmentRoot, GVFSPlatform.Instance.Constants.DotGVFSRoot);
- try
- {
- string error;
- LegacyPlaceholderListDatabase placeholders;
- if (!LegacyPlaceholderListDatabase.TryCreate(
- tracer,
- Path.Combine(dotGVFSRoot, GVFSConstants.DotGVFS.Databases.PlaceholderList),
- new PhysicalFileSystem(),
- out placeholders,
- out error))
- {
- tracer.RelatedError("Failed to open placeholder database: " + error);
- return false;
- }
-
- using (placeholders)
- {
- string workingDirectoryRoot = Path.Combine(enlistmentRoot, GVFSConstants.WorkingDirectoryRootName);
-
- // Run through the folder placeholders adding to the placeholder list
- IEnumerable folderPlaceholderPaths =
- GetFolderPlaceholdersFromDisk(tracer, new PhysicalFileSystem(), workingDirectoryRoot)
- .Select(x => x.Substring(workingDirectoryRoot.Length + 1))
- .Select(x => new LegacyPlaceholderListDatabase.PlaceholderData(x, GVFSConstants.AllZeroSha));
-
- List placeholderEntries = placeholders.GetAllEntries();
- placeholderEntries.AddRange(folderPlaceholderPaths);
-
- placeholders.WriteAllEntriesAndFlush(placeholderEntries);
- }
- }
- catch (IOException ex)
- {
- tracer.RelatedError("Could not write to placeholder database: " + ex.ToString());
- return false;
- }
- catch (Exception ex)
- {
- tracer.RelatedError("Error updating placeholder database with folders: " + ex.ToString());
- return false;
- }
-
- if (!this.TryIncrementMajorVersion(tracer, enlistmentRoot))
- {
- return false;
- }
-
- return true;
- }
-
- private static IEnumerable GetFolderPlaceholdersFromDisk(ITracer tracer, PhysicalFileSystem fileSystem, string path)
- {
- if (!fileSystem.IsSymLink(path))
- {
- foreach (string directory in fileSystem.EnumerateDirectories(path))
- {
- if (!directory.EndsWith(Path.DirectorySeparatorChar + GVFSConstants.DotGit.Root))
- {
- OnDiskFileState fileState = OnDiskFileState.Full;
- if (Utils.TryGetOnDiskFileState(directory, out fileState))
- {
- if (IsPlaceholder(fileState))
- {
- yield return directory;
- }
-
- // Recurse into placeholders and full folders skipping the tombstones
- if (!IsTombstone(fileState))
- {
- foreach (string placeholderPath in GetFolderPlaceholdersFromDisk(tracer, fileSystem, directory))
- {
- yield return placeholderPath;
- }
- }
- }
- else
- {
- // May cause valid folder placeholders not to be written
- // to the placeholder database so we want to error out.
- throw new InvalidDataException($"Error getting on disk file state for {directory}");
- }
- }
- }
- }
- }
-
- private static bool IsTombstone(OnDiskFileState fileState)
- {
- return (fileState & OnDiskFileState.Tombstone) != 0;
- }
-
- private static bool IsPlaceholder(OnDiskFileState fileState)
- {
- return (fileState & (OnDiskFileState.DirtyPlaceholder | OnDiskFileState.HydratedPlaceholder | OnDiskFileState.Placeholder)) != 0;
- }
- }
-}
diff --git a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout13to14Upgrade_BlobSizes.cs b/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout13to14Upgrade_BlobSizes.cs
deleted file mode 100644
index f784bcc87..000000000
--- a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout13to14Upgrade_BlobSizes.cs
+++ /dev/null
@@ -1,139 +0,0 @@
-using GVFS.Common;
-using GVFS.Common.FileSystem;
-using GVFS.Common.Git;
-using GVFS.Common.Tracing;
-using GVFS.DiskLayoutUpgrades;
-using GVFS.Virtualization.BlobSize;
-using Microsoft.Isam.Esent;
-using Microsoft.Isam.Esent.Collections.Generic;
-using System.Collections.Generic;
-using System.IO;
-
-namespace GVFS.Platform.Windows.DiskLayoutUpgrades
-{
- public class DiskLayout13to14Upgrade_BlobSizes : DiskLayoutUpgrade.MajorUpgrade
- {
- private static readonly string BlobSizesName = "BlobSizes";
-
- protected override int SourceMajorVersion
- {
- get { return 13; }
- }
-
- ///
- /// Version 13 to 14 added the (shared) SQLite blob sizes database
- ///
- public override bool TryUpgrade(ITracer tracer, string enlistmentRoot)
- {
- string dotGVFSPath = Path.Combine(enlistmentRoot, GVFSPlatform.Instance.Constants.DotGVFSRoot);
- string error;
- if (!RepoMetadata.TryInitialize(tracer, dotGVFSPath, out error))
- {
- tracer.RelatedError($"{nameof(DiskLayout13to14Upgrade_BlobSizes)}.{nameof(this.TryUpgrade)}: Could not initialize repo metadata: {error}");
- return false;
- }
-
- string newBlobSizesRoot;
- if (!this.TryFindNewBlobSizesRoot(tracer, enlistmentRoot, out newBlobSizesRoot))
- {
- return false;
- }
-
- this.MigrateBlobSizes(tracer, enlistmentRoot, newBlobSizesRoot);
-
- RepoMetadata.Instance.SetBlobSizesRoot(newBlobSizesRoot);
- tracer.RelatedInfo("Set BlobSizesRoot: " + newBlobSizesRoot);
-
- if (!this.TryIncrementMajorVersion(tracer, enlistmentRoot))
- {
- return false;
- }
-
- return true;
- }
-
- private bool TryFindNewBlobSizesRoot(ITracer tracer, string enlistmentRoot, out string newBlobSizesRoot)
- {
- newBlobSizesRoot = null;
-
- string localCacheRoot;
- string error;
- if (!RepoMetadata.Instance.TryGetLocalCacheRoot(out localCacheRoot, out error))
- {
- tracer.RelatedError($"{nameof(DiskLayout13to14Upgrade_BlobSizes)}.{nameof(this.TryFindNewBlobSizesRoot)}: Could not read local cache root from repo metadata: {error}");
- return false;
- }
-
- if (localCacheRoot == string.Empty)
- {
- // This is an old repo that was cloned prior to the shared cache
- // Blob sizes root should be \.gvfs\databases\blobSizes
- newBlobSizesRoot = Path.Combine(enlistmentRoot, GVFSPlatform.Instance.Constants.DotGVFSRoot, GVFSConstants.DotGVFS.Databases.Name, GVFSEnlistment.BlobSizesCacheName);
- }
- else
- {
- // This repo was cloned with a shared cache, and the blob sizes should be a sibling to the git objects root
- string gitObjectsRoot;
- if (!RepoMetadata.Instance.TryGetGitObjectsRoot(out gitObjectsRoot, out error))
- {
- tracer.RelatedError($"{nameof(DiskLayout13to14Upgrade_BlobSizes)}.{nameof(this.TryFindNewBlobSizesRoot)}: Could not read git object root from repo metadata: {error}");
- return false;
- }
-
- string cacheRepoFolder = Path.GetDirectoryName(gitObjectsRoot);
- newBlobSizesRoot = Path.Combine(cacheRepoFolder, GVFSEnlistment.BlobSizesCacheName);
- }
-
- return true;
- }
-
- private void MigrateBlobSizes(ITracer tracer, string enlistmentRoot, string newBlobSizesRoot)
- {
- string esentBlobSizeFolder = Path.Combine(enlistmentRoot, GVFSPlatform.Instance.Constants.DotGVFSRoot, BlobSizesName);
- PhysicalFileSystem fileSystem = new PhysicalFileSystem();
- if (!fileSystem.DirectoryExists(esentBlobSizeFolder))
- {
- tracer.RelatedInfo("Copied no ESENT blob size entries. {0} does not exist", esentBlobSizeFolder);
- return;
- }
-
- try
- {
- using (PersistentDictionary oldBlobSizes = new PersistentDictionary(esentBlobSizeFolder))
- using (BlobSizes newBlobSizes = new BlobSizes(newBlobSizesRoot, fileSystem, tracer))
- {
- newBlobSizes.Initialize();
-
- int copiedCount = 0;
- int totalCount = oldBlobSizes.Count;
- foreach (KeyValuePair kvp in oldBlobSizes)
- {
- Sha1Id sha1;
- string error;
- if (Sha1Id.TryParse(kvp.Key, out sha1, out error))
- {
- newBlobSizes.AddSize(sha1, kvp.Value);
-
- if (copiedCount++ % 5000 == 0)
- {
- tracer.RelatedInfo("Copied {0}/{1} ESENT blob size entries", copiedCount, totalCount);
- }
- }
- else
- {
- tracer.RelatedWarning($"Corrupt entry ({kvp.Key}) found in BlobSizes, skipping. Error: {error}");
- }
- }
-
- newBlobSizes.Flush();
- newBlobSizes.Shutdown();
- tracer.RelatedInfo("Upgrade complete: Copied {0}/{1} ESENT blob size entries", copiedCount, totalCount);
- }
- }
- catch (EsentException ex)
- {
- tracer.RelatedWarning("BlobSizes appears to be from an older version of GVFS and corrupted, skipping upgrade of blob sizes: " + ex.Message);
- }
- }
- }
-}
diff --git a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout7to8Upgrade_NewOperationType.cs b/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout7to8Upgrade_NewOperationType.cs
deleted file mode 100644
index d4edabd4e..000000000
--- a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout7to8Upgrade_NewOperationType.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using GVFS.Common;
-using GVFS.Common.Tracing;
-using GVFS.DiskLayoutUpgrades;
-using Microsoft.Isam.Esent;
-using Microsoft.Isam.Esent.Collections.Generic;
-using System.IO;
-
-namespace GVFS.Platform.Windows.DiskLayoutUpgrades
-{
- public class DiskLayout7to8Upgrade_NewOperationType : DiskLayoutUpgrade.MajorUpgrade
- {
- protected override int SourceMajorVersion
- {
- get { return 7; }
- }
-
- ///
- /// Version 7 to 8 only added a new value to BackgroundGitUpdate.OperationType,
- /// so we only need to bump the ESENT version here.
- ///
- public override bool TryUpgrade(ITracer tracer, string enlistmentRoot)
- {
- string dotGVFSRoot = Path.Combine(enlistmentRoot, GVFSPlatform.Instance.Constants.DotGVFSRoot);
- string esentRepoMetadata = Path.Combine(dotGVFSRoot, WindowsDiskLayoutUpgradeData.EsentRepoMetadataName);
- try
- {
- using (PersistentDictionary esentMetadata = new PersistentDictionary(esentRepoMetadata))
- {
- esentMetadata[WindowsDiskLayoutUpgradeData.DiskLayoutEsentVersionKey] = "8";
- }
- }
- catch (EsentException ex)
- {
- tracer.RelatedError("RepoMetadata appears to be from an older version of GVFS and corrupted: " + ex.Message);
- return false;
- }
-
- // Do not call TryIncrementDiskLayoutVersion. It updates the flat repo metadata which does not exist yet.
- return true;
- }
- }
-}
\ No newline at end of file
diff --git a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout8to9Upgrade_RepoMetadataToJson.cs b/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout8to9Upgrade_RepoMetadataToJson.cs
deleted file mode 100644
index b86fab6b9..000000000
--- a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout8to9Upgrade_RepoMetadataToJson.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using GVFS.Common;
-using GVFS.Common.Tracing;
-using GVFS.DiskLayoutUpgrades;
-using Microsoft.Isam.Esent;
-using Microsoft.Isam.Esent.Collections.Generic;
-using System.Collections.Generic;
-using System.IO;
-
-namespace GVFS.Platform.Windows.DiskLayoutUpgrades
-{
- public class DiskLayout8to9Upgrade_RepoMetadataToJson : DiskLayoutUpgrade.MajorUpgrade
- {
- protected override int SourceMajorVersion
- {
- get { return 8; }
- }
-
- ///
- /// Rewrites ESENT RepoMetadata DB to flat JSON file
- ///
- public override bool TryUpgrade(ITracer tracer, string enlistmentRoot)
- {
- string dotGVFSRoot = Path.Combine(enlistmentRoot, GVFSPlatform.Instance.Constants.DotGVFSRoot);
- if (!this.UpdateRepoMetadata(tracer, dotGVFSRoot))
- {
- return false;
- }
-
- if (!this.TryIncrementMajorVersion(tracer, enlistmentRoot))
- {
- return false;
- }
-
- return true;
- }
-
- private bool UpdateRepoMetadata(ITracer tracer, string dotGVFSRoot)
- {
- string esentRepoMetadata = Path.Combine(dotGVFSRoot, WindowsDiskLayoutUpgradeData.EsentRepoMetadataName);
- if (Directory.Exists(esentRepoMetadata))
- {
- try
- {
- using (PersistentDictionary oldMetadata = new PersistentDictionary(esentRepoMetadata))
- {
- string error;
- if (!RepoMetadata.TryInitialize(tracer, dotGVFSRoot, out error))
- {
- tracer.RelatedError("Could not initialize RepoMetadata: " + error);
- return false;
- }
-
- foreach (KeyValuePair kvp in oldMetadata)
- {
- tracer.RelatedInfo("Copying ESENT entry: {0} = {1}", kvp.Key, kvp.Value);
- RepoMetadata.Instance.SetEntry(kvp.Key, kvp.Value);
- }
- }
- }
- catch (IOException ex)
- {
- tracer.RelatedError("Could not write to new repo metadata: " + ex.Message);
- return false;
- }
- catch (EsentException ex)
- {
- tracer.RelatedError("RepoMetadata appears to be from an older version of GVFS and corrupted: " + ex.Message);
- return false;
- }
-
- string backupName;
- if (this.TryRenameFolderForDelete(tracer, esentRepoMetadata, out backupName))
- {
- // If this fails, we leave behind cruft, but there's no harm because we renamed.
- this.TryDeleteFolder(tracer, backupName);
- return true;
- }
- else
- {
- // To avoid double upgrading, we should rollback if we can't rename the old data
- this.TryDeleteFile(tracer, RepoMetadata.Instance.DataFilePath);
- return false;
- }
- }
-
- return true;
- }
- }
-}
\ No newline at end of file
diff --git a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout9to10Upgrade_BackgroundAndPlaceholderListToFileBased.cs b/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout9to10Upgrade_BackgroundAndPlaceholderListToFileBased.cs
deleted file mode 100644
index 9b0b84b12..000000000
--- a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/DiskLayout9to10Upgrade_BackgroundAndPlaceholderListToFileBased.cs
+++ /dev/null
@@ -1,181 +0,0 @@
-using GVFS.Common;
-using GVFS.Common.FileSystem;
-using GVFS.Common.Tracing;
-using GVFS.DiskLayoutUpgrades;
-using GVFS.GVFlt;
-using GVFS.Virtualization.Background;
-using Microsoft.Isam.Esent;
-using Microsoft.Isam.Esent.Collections.Generic;
-using System.Collections.Generic;
-using System.IO;
-
-namespace GVFS.Platform.Windows.DiskLayoutUpgrades
-{
- public class DiskLayout9to10Upgrade_BackgroundAndPlaceholderListToFileBased : DiskLayoutUpgrade.MajorUpgrade
- {
- private const string EsentBackgroundOpsFolder = "BackgroundGitUpdates";
- private const string EsentPlaceholderListFolder = "PlaceholderList";
-
- protected override int SourceMajorVersion
- {
- get { return 9; }
- }
-
- ///
- /// Rewrites ESENT BackgroundGitUpdates and PlaceholderList DBs to flat formats
- ///
- public override bool TryUpgrade(ITracer tracer, string enlistmentRoot)
- {
- string dotGVFSRoot = Path.Combine(enlistmentRoot, GVFSPlatform.Instance.Constants.DotGVFSRoot);
- if (!this.UpdateBackgroundOperations(tracer, dotGVFSRoot))
- {
- return false;
- }
-
- if (!this.UpdatePlaceholderList(tracer, dotGVFSRoot))
- {
- return false;
- }
-
- if (!this.TryIncrementMajorVersion(tracer, enlistmentRoot))
- {
- return false;
- }
-
- return true;
- }
-
- private bool UpdatePlaceholderList(ITracer tracer, string dotGVFSRoot)
- {
- string esentPlaceholderFolder = Path.Combine(dotGVFSRoot, EsentPlaceholderListFolder);
- if (Directory.Exists(esentPlaceholderFolder))
- {
- string newPlaceholderFolder = Path.Combine(dotGVFSRoot, GVFSConstants.DotGVFS.Databases.PlaceholderList);
- try
- {
- using (PersistentDictionary oldPlaceholders =
- new PersistentDictionary(esentPlaceholderFolder))
- {
- string error;
- LegacyPlaceholderListDatabase newPlaceholders;
- if (!LegacyPlaceholderListDatabase.TryCreate(
- tracer,
- newPlaceholderFolder,
- new PhysicalFileSystem(),
- out newPlaceholders,
- out error))
- {
- tracer.RelatedError("Failed to create new placeholder database: " + error);
- return false;
- }
-
- using (newPlaceholders)
- {
- List data = new List();
- foreach (KeyValuePair kvp in oldPlaceholders)
- {
- tracer.RelatedInfo("Copying ESENT entry: {0} = {1}", kvp.Key, kvp.Value);
- data.Add(new LegacyPlaceholderListDatabase.PlaceholderData(path: kvp.Key, fileShaOrFolderValue: kvp.Value));
- }
-
- newPlaceholders.WriteAllEntriesAndFlush(data);
- }
- }
- }
- catch (IOException ex)
- {
- tracer.RelatedError("Could not write to new placeholder database: " + ex.Message);
- return false;
- }
- catch (EsentException ex)
- {
- tracer.RelatedError("Placeholder database appears to be from an older version of GVFS and corrupted: " + ex.Message);
- return false;
- }
-
- string backupName;
- if (this.TryRenameFolderForDelete(tracer, esentPlaceholderFolder, out backupName))
- {
- // If this fails, we leave behind cruft, but there's no harm because we renamed.
- this.TryDeleteFolder(tracer, backupName);
- return true;
- }
- else
- {
- // To avoid double upgrading, we should rollback if we can't rename the old data
- this.TryDeleteFile(tracer, RepoMetadata.Instance.DataFilePath);
- return false;
- }
- }
-
- return true;
- }
-
- private bool UpdateBackgroundOperations(ITracer tracer, string dotGVFSRoot)
- {
- string esentBackgroundOpsFolder = Path.Combine(dotGVFSRoot, EsentBackgroundOpsFolder);
- if (Directory.Exists(esentBackgroundOpsFolder))
- {
- string newBackgroundOpsFolder = Path.Combine(dotGVFSRoot, GVFSConstants.DotGVFS.Databases.BackgroundFileSystemTasks);
- try
- {
- using (PersistentDictionary oldBackgroundOps =
- new PersistentDictionary(esentBackgroundOpsFolder))
- {
- string error;
- FileSystemTaskQueue newBackgroundOps;
- if (!FileSystemTaskQueue.TryCreate(
- tracer,
- newBackgroundOpsFolder,
- new PhysicalFileSystem(),
- out newBackgroundOps,
- out error))
- {
- tracer.RelatedError("Failed to create new background operations folder: " + error);
- return false;
- }
-
- using (newBackgroundOps)
- {
- foreach (KeyValuePair kvp in oldBackgroundOps)
- {
- tracer.RelatedInfo("Copying ESENT entry: {0} = {1}", kvp.Key, kvp.Value);
- newBackgroundOps.EnqueueAndFlush(
- new FileSystemTask(
- (FileSystemTask.OperationType)kvp.Value.Operation,
- kvp.Value.VirtualPath,
- kvp.Value.OldVirtualPath));
- }
- }
- }
- }
- catch (IOException ex)
- {
- tracer.RelatedError("Could not write to new background operations: " + ex.Message);
- return false;
- }
- catch (EsentException ex)
- {
- tracer.RelatedError("BackgroundOperations appears to be from an older version of GVFS and corrupted: " + ex.Message);
- return false;
- }
-
- string backupName;
- if (this.TryRenameFolderForDelete(tracer, esentBackgroundOpsFolder, out backupName))
- {
- // If this fails, we leave behind cruft, but there's no harm because we renamed.
- this.TryDeleteFolder(tracer, backupName);
- return true;
- }
- else
- {
- // To avoid double upgrading, we should rollback if we can't rename the old data
- this.TryDeleteFile(tracer, RepoMetadata.Instance.DataFilePath);
- return false;
- }
- }
-
- return true;
- }
- }
-}
diff --git a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/WindowsDiskLayoutUpgradeData.cs b/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/WindowsDiskLayoutUpgradeData.cs
index d79e29594..6fdab6c91 100644
--- a/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/WindowsDiskLayoutUpgradeData.cs
+++ b/GVFS/GVFS.Platform.Windows/DiskLayoutUpgrades/WindowsDiskLayoutUpgradeData.cs
@@ -1,30 +1,16 @@
using GVFS.Common;
using GVFS.DiskLayoutUpgrades;
-using Microsoft.Isam.Esent.Collections.Generic;
-using System;
-using System.IO;
namespace GVFS.Platform.Windows.DiskLayoutUpgrades
{
public class WindowsDiskLayoutUpgradeData : IDiskLayoutUpgradeData
{
- public const string DiskLayoutEsentVersionKey = "DiskLayoutVersion";
- public const string EsentRepoMetadataName = "RepoMetadata";
-
public DiskLayoutUpgrade[] Upgrades
{
get
{
return new DiskLayoutUpgrade[]
{
- new DiskLayout7to8Upgrade_NewOperationType(),
- new DiskLayout8to9Upgrade_RepoMetadataToJson(),
- new DiskLayout9to10Upgrade_BackgroundAndPlaceholderListToFileBased(),
- new DiskLayout10to11Upgrade_NewOperationType(),
- new DiskLayout11to12Upgrade_SharedLocalCache(),
- new DiskLayout12_0To12_1Upgrade_StatusAheadBehind(),
- new DiskLayout12to13Upgrade_FolderPlaceholder(),
- new DiskLayout13to14Upgrade_BlobSizes(),
new DiskLayout14to15Upgrade_ModifiedPaths(),
new DiskLayout15to16Upgrade_GitStatusCache(),
new DiskLayout16to17Upgrade_FolderPlaceholderValues(),
@@ -37,36 +23,12 @@ public DiskLayoutUpgrade[] Upgrades
public DiskLayoutVersion Version => new DiskLayoutVersion(
currentMajorVersion: 19,
currentMinorVersion: 0,
- minimumSupportedMajorVersion: 7);
+ minimumSupportedMajorVersion: 14);
public bool TryParseLegacyDiskLayoutVersion(string dotGVFSPath, out int majorVersion)
{
- string repoMetadataPath = Path.Combine(dotGVFSPath, EsentRepoMetadataName);
majorVersion = 0;
- if (Directory.Exists(repoMetadataPath))
- {
- try
- {
- using (PersistentDictionary oldMetadata = new PersistentDictionary(repoMetadataPath))
- {
- string versionString = oldMetadata[DiskLayoutEsentVersionKey];
- if (!int.TryParse(versionString, out majorVersion))
- {
- return false;
- }
- }
- }
- catch
- {
- return false;
- }
- }
- else
- {
- return false;
- }
-
- return true;
+ return false;
}
}
}
diff --git a/GVFS/GVFS.Platform.Windows/GVFS.Platform.Windows.csproj b/GVFS/GVFS.Platform.Windows/GVFS.Platform.Windows.csproj
index 1bf325061..0ffe30b8f 100644
--- a/GVFS/GVFS.Platform.Windows/GVFS.Platform.Windows.csproj
+++ b/GVFS/GVFS.Platform.Windows/GVFS.Platform.Windows.csproj
@@ -5,14 +5,10 @@
-
-
-
-