Beispiel #1
0
        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()
                    );
            }
        }
Beispiel #2
0
        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());
            }
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        public static void ParseTest()
        {
            var pointerText = SimplePointerText;
            var pointer     = LfxPointer.Parse(pointerText);

            TestSamplePointer(pointer, LfxPointerType.Simple);

            Console.Write(pointer);
        }
Beispiel #5
0
        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());
        }
Beispiel #6
0
        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);
                }
            });
        }
Beispiel #7
0
        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);
                }
            }
        }
Beispiel #8
0
        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));
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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);
            });
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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());
                    }
                }
            }
        }
Beispiel #14
0
        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");
                }
            }
        }