public static void CurlLoadTest() { using (var dir = new TempDir()) { // write curl config file var configFilePath = dir + LfxConfigFile.FileName; File.WriteAllText(configFilePath, LfxCurlConfigTest.ConfigFileContent); // create /tools/nuget/ var nugetDir = Path.Combine(dir, "tools", "nuget"); Directory.CreateDirectory(nugetDir); // write dummy content to /tools/nuget/nuget.exe var lfxFilePath = Path.Combine(nugetDir, "nuget.exe"); File.WriteAllText(lfxFilePath, LfxPointerTest.Content); // load file var pointer = LfxPointer.Create(lfxFilePath); // check regex expansions Assert.AreEqual(LfxPointerType.Curl, pointer.Type); Assert.AreEqual( "https://dist.nuget.org/win-x86-commandline/v3.4.4/nuget.exe", pointer.Url.ToString() ); } }
public void Smudge() { var args = Parse( minArgs: 0, maxArgs: 1, switchInfo: new[] { GitCmdSwitchInfo.Blank } ); var pointerStream = Console.OpenStandardInput(); if (args.Length == 1) { pointerStream = File.OpenRead(args[0]); } using (var sr = new StreamReader(pointerStream)) { var pointer = LfxPointer.Parse(sr); var cache = LfxBlobCache.Create(); var blob = cache.Load(pointer); using (var contentStream = blob.OpenRead()) contentStream.CopyTo(Console.OpenStandardOutput()); } }
public static void ArchiveLoadTest() { using (var dir = new TempDir()) { // write archive config file var configFilePath = dir + LfxConfigFile.FileName; File.WriteAllText(configFilePath, LfxArchiveConfigTest.ConfigFileContent); // crate /NUnit.2.6.4 var nunitDir = Path.Combine(dir, "NUnit.2.6.4"); Directory.CreateDirectory(nunitDir); // create /NUnit.2.6.4/lib/ var libDirName = @"lib"; var libDir = Path.Combine(nunitDir, libDirName); Directory.CreateDirectory(libDir); // write dummy content to /NUnit.2.6.4/lib/NUnit.dll var dllName = "NUnit.dll"; var subPath = Path.Combine(libDirName, dllName); var nunitDllPath = Path.Combine(nunitDir, subPath); File.WriteAllText(nunitDllPath, LfxPointerTest.Content); // load file var pointer = LfxPointer.Create(nunitDllPath); // check regex expansions Assert.AreEqual(LfxPointerType.Archive, pointer.Type); Assert.AreEqual( "http://nuget.org/api/v2/package/NUnit/2.6.4", pointer.Url.ToString() ); Assert.AreEqual(subPath.Replace(@"\", "/"), pointer.ArchiveHint); } }
public static void ParseTest() { var pointerText = SimplePointerText; var pointer = LfxPointer.Parse(pointerText); TestSamplePointer(pointer, LfxPointerType.Simple); Console.Write(pointer); }
public static void TestSamplePointer(LfxPointer pointer, LfxPointerType type) { var pointerText = type == LfxPointerType.Simple ? SimplePointerText : type == LfxPointerType.Curl ? CurlPointerText : ArchivePointerText; Assert.AreEqual(type, pointer.Type); Assert.AreEqual(Version, pointer.Version); Assert.AreEqual(Method, pointer.HashMethod); Assert.AreEqual(HashValue, pointer.HashValue); Assert.AreEqual(LfxHash.Parse(HashValue), pointer.Hash); Assert.AreEqual(Size, pointer.Size); if (type == LfxPointerType.Simple) { Assert.AreEqual(null, pointer.Url); Assert.AreEqual(null, pointer.ArchiveHint); } if (type == LfxPointerType.Curl) { Assert.AreEqual(Url, pointer.Url); Assert.AreEqual(null, pointer.ArchiveHint); } if (type == LfxPointerType.Archive) { Assert.AreEqual(Url, pointer.Url); Assert.AreEqual(ArchiveHint, pointer.ArchiveHint); } Assert.AreEqual( pointerText, pointer.ToString() ); // round-trip using (var tempFile = new TempFile()) { File.WriteAllText(tempFile, pointer.ToString()); using (var pointerFile = new StreamReader(tempFile)) { var pointerRoundTrip = LfxPointer.Parse(pointerFile); Assert.IsTrue(pointer.Equals(pointerRoundTrip)); Assert.IsTrue(pointer.Equals((object)pointerRoundTrip)); Assert.AreEqual(pointer.ToString(), pointerRoundTrip.ToString()); Assert.AreEqual(pointer, pointerRoundTrip); Assert.AreEqual(pointer.GetHashCode(), pointer.GetHashCode()); } } var otherPointer = LfxPointer.Parse(OtherPointerText); Assert.AreNotEqual(pointer, otherPointer); Assert.AreNotEqual(pointer.GetHashCode(), otherPointer.GetHashCode()); }
public void Reset() { var args = Parse( minArgs: 0, maxArgs: 1, switchInfo: GitCmdSwitchInfo.Create( LfxCmdSwitches.List, LfxCmdSwitches.L, LfxCmdSwitches.Cached, LfxCmdSwitches.C, LfxCmdSwitches.Others, LfxCmdSwitches.O, LfxCmdSwitches.Quite, LfxCmdSwitches.Q, LfxCmdSwitches.Force, LfxCmdSwitches.F ) ); var lfxFiles = GetFiles(args, content: true); var listOnly = args.IsSet(LfxCmdSwitches.L, LfxCmdSwitches.List); if (listOnly) { foreach (var file in lfxFiles) { Log($"{file}"); } return; } var force = args.IsSet(LfxCmdSwitches.F, LfxCmdSwitches.Force); var cache = LfxBlobCache.Create(); Batch(args, lfxFiles, file => { var path = file.Path; if (force) { var mask = ~(FileAttributes.Hidden | FileAttributes.ReadOnly | FileAttributes.System); File.SetAttributes( path: path, fileAttributes: File.GetAttributes(path) & mask ); } if (!LfxPointer.CanLoad(path)) { var blob = cache.Save(path); var pointer = LfxPointer.Create(path, blob.Hash); pointer.Save(path); } }); }
public static void LoadTest() { using (var contentFile = new TempFile()) { File.WriteAllText(contentFile, LfxHashTest.Content, Encoding.UTF8); var pointer = LfxPointer.Create(contentFile); TestSamplePointer(pointer, LfxPointerType.Simple); using (var pointerFile = new TempFile()) { File.WriteAllText(pointerFile, pointer.ToString()); pointer = LfxPointer.Load(pointerFile); TestSamplePointer(pointer, LfxPointerType.Simple); } } }
public static LfxPointer CreatePointer( string hashValue, int size, LfxPointerType?type = null, Uri url = null, string hint = null) { var pointerText = CreatePointerText( Version, LfxHashMethod.Sha256, hashValue, size, type, url, hint ); return(LfxPointer.Parse(pointerText)); }
public static void ParseTest() { var pointerText = SimplePointerText; var pointer = LfxPointer.Parse(pointerText); var archivePointerParsed = LfxPointer.Parse(ArchivePointerText); TestSamplePointer(archivePointerParsed, LfxPointerType.Archive); var archivePointer = pointer.AddArchive(Url, ArchiveHint); TestSamplePointer(archivePointer, LfxPointerType.Archive); Assert.AreEqual(archivePointerParsed, archivePointer); Console.Write(archivePointer); }
public static void ParseTest() { var pointerText = SimplePointerText; var pointer = LfxPointer.Parse(pointerText); var curlPointerParsed = LfxPointer.Parse(CurlPointerText); TestSamplePointer(curlPointerParsed, LfxPointerType.Curl); var curlPointer = pointer.AddUrl(Url); TestSamplePointer(curlPointer, LfxPointerType.Curl); Assert.AreEqual(curlPointerParsed, curlPointer); Console.Write(curlPointer); }
public void Checkout() { var args = Parse( minArgs: 0, maxArgs: 1, switchInfo: GitCmdSwitchInfo.Create( LfxCmdSwitches.List, LfxCmdSwitches.L, LfxCmdSwitches.Cached, LfxCmdSwitches.C, LfxCmdSwitches.Others, LfxCmdSwitches.O, LfxCmdSwitches.Quite, LfxCmdSwitches.Q ) ); var lfxFiles = GetFiles(args, pointer: true); var listOnly = args.IsSet(LfxCmdSwitches.L, LfxCmdSwitches.List); if (listOnly) { foreach (var file in lfxFiles) { Log($"{file}"); } return; } var cache = LfxBlobCache.Create(); Batch(args, lfxFiles, async file => { LfxPointer pointer; if (!LfxPointer.TryLoad(file.Path, out pointer)) { return; } var blob = await cache.LoadAsync(pointer); blob.Save(file.Path); }); }
public void Clean() { var args = Parse( maxArgs: 1, minArgs: 1 ); var path = Path.GetFullPath(args[0]); if (!File.Exists(path)) { throw new Exception($"Expected file '{path}' to exist."); } LfxPointer pointer; if (!LfxPointer.TryLoad(args[0], out pointer)) { pointer = LfxPointer.Create(path); } Console.Write(pointer); }
public static void DownloadTest(LfxPointer pointer, LfxPointer altPointer) { using (var storeDir = new TempDir()) { // create cache with storeDir var cache = new LfxBlobCache(storeDir); using (var file = new TempFile()) { // create file File.WriteAllText(file, LfxHashTest.Content); // add file to cache var blob = cache.Load(pointer); var count = cache.Store.Count; Assert.IsTrue(count > 0); var hash = blob.Hash; Assert.IsTrue(cache.Contains(blob)); // get file from cache LfxBlob rtBlob; Assert.IsTrue(cache.TryGet(hash, out rtBlob)); Assert.AreEqual(blob, rtBlob); using (var altDir = new TempDir()) { // create alternate cache, promote file var altCache = new LfxBlobCache(altDir, cache); Assert.AreEqual(cache, altCache.Parent); // promote LfxBlob altBlob; Assert.IsTrue(altCache.TryGet(hash, out altBlob)); Assert.AreNotEqual(altBlob, blob); Assert.AreEqual(blob.Hash, altBlob.Hash); } using (var altDir = new TempDir()) { // create alternate cache, promote file var altCache = new LfxBlobCache(altDir, cache); // promote Assert.IsTrue(altCache.Promote(hash)); } using (var altDir = new TempDir()) { // create alternate cache, promote file var altCache = new LfxBlobCache(altDir, cache); // promote all files; altCache.ToArray(); // promote LfxBlob altBlob; Assert.IsTrue(altCache.TryGet(hash, out altBlob)); Assert.IsTrue(altCache.Contains(altBlob)); Assert.IsFalse(altCache.Contains(blob)); } using (var altDir = new TempDir()) { // create alternate cache, promote file var altCache = new LfxBlobCache(altDir, cache); // ask child cache to download same file as parent var altBlob = altCache.Load(pointer); // child should contain one blob promoted from parent Assert.AreNotEqual(blob, altBlob); Assert.AreEqual(blob.Hash, altBlob.Hash); Assert.AreEqual(count, cache.Store.Count); Assert.AreEqual(1, altCache.Store.Count); // load altPointer; child cache is subset of parent altBlob = altCache.Load(altPointer); Assert.IsTrue(altCache.Store.Count > 1); var altHashes = altCache.Store.Select(o => o.Hash); var parentHashes = cache.Store.Select(o => o.Hash); Assert.IsTrue(!altHashes.Except(parentHashes).Any()); } } } }
public void Init() { var nugetUrl = "https://dist.nuget.org/win-x86-commandline/v3.4.4/NuGet.exe"; var nugetHash = "c12d583dd1b5447ac905a334262e02718f641fca3877d0b6117fe44674072a27"; var nugetCount = 3957976L; var nugetPkgUrl = "http://nuget.org/api/v2/package/${id}/${ver}"; var nugetPkgPattern = "^((?<id>.*?)[.])(?=\\d)(?<ver>[^/]*)/(?<path>.*)$"; var nugetPkgHint = "${path}"; var args = Parse( maxArgs: 0, switchInfo: GitCmdSwitchInfo.Create( LfxCmdSwitches.Sample ) ); Git("init"); Lfx("config --set"); if (!args.IsSet(LfxCmdSwitches.Sample)) { return; } File.WriteAllText(".gitattributes", $"* text=auto"); using (var dls = new TempCurDir("dls")) { File.WriteAllLines(".gitattributes", new[] { $"* filter=lfx diff=lfx merge=lfx -text", $".gitattributes filter= diff= merge= text=auto", $".gitignore filter= diff= merge= text=auto", $"packages.config filter= diff= merge= text=auto", $"*.lfxconfig filter= diff= merge= text eol=lf" }); using (var packages = new TempCurDir("tools")) { Git($"config -f nuget.exe.lfxconfig --add lfx.type curl"); Git($"config -f nuget.exe.lfxconfig --add lfx.url {nugetUrl}"); File.WriteAllText("NuGet.exe", LfxPointer.Create( hash: LfxHash.Parse(nugetHash), count: nugetCount ).AddUrl(nugetUrl.ToUrl()).ToString()); } using (var packages = new TempCurDir("packages")) { File.WriteAllText(".gitignore", $"*.nupkg"); Git($"config -f .lfxconfig --add lfx.type archive"); Git($"config -f .lfxconfig --add lfx.url {nugetPkgUrl}"); Git($"config -f .lfxconfig --add lfx.pattern {nugetPkgPattern}"); Git($"config -f .lfxconfig --add lfx.hint {nugetPkgHint}"); new XElement("packages", new XElement("package", new XAttribute("id", "NUnit"), new XAttribute("version", "2.6.4") ) ).Save("packages.config"); } } }