예제 #1
0
파일: LfxCmd.cs 프로젝트: kingces95/lfx
        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());
            }
        }
예제 #2
0
파일: LfxCmd.cs 프로젝트: kingces95/lfx
        public void Cache()
        {
            var cache = LfxBlobCache.Create();

            foreach (var blob in cache)
            {
                Console.WriteLine($"{blob.Hash}");
            }
        }
예제 #3
0
파일: LfxCmd.cs 프로젝트: kingces95/lfx
        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);
                }
            });
        }
예제 #4
0
파일: LfxCmd.cs 프로젝트: kingces95/lfx
        public void Clear()
        {
            ParseNoArgsAndNoSwitches();

            var cache = LfxBlobCache.Create();

            while (cache != null)
            {
                var store = cache.Store;
                Console.WriteLine($"Removing {store.Directory}");
                store.Clear();

                cache = cache.Parent;
            }
        }
예제 #5
0
파일: LfxCmd.cs 프로젝트: kingces95/lfx
        public void Env()
        {
            ParseNoArgsAndNoSwitches();

            var config    = LfxConfig.Load();
            var gitConfig = config.GitConfig;

            Log($"Enlistment={gitConfig.EnlistmentDirectory}");
            Log($"GitDirectory={gitConfig.GitDirectory}");
            Log();

            var cache = LfxBlobCache.Create();
            var level = 1;

            Log("BlobCache:");
            while (cache != null)
            {
                var store = cache.Store;
                Log($"  L{level++}={store.Directory} (count={store.Count}, size={store.Size.ToString("N0")})");
                cache = cache.Parent;
            }
            Log();

            Log("Config:");
            Log($"  {LfxConfigFile.CleanFilterId}={gitConfig[LfxConfigFile.CleanFilterId]}");
            Log($"  {LfxConfigFile.SmudgeFilterId}={gitConfig[LfxConfigFile.SmudgeFilterId]}");
            Log($"  {LfxConfigFile.TypeId}={gitConfig[LfxConfigFile.TypeId]}");
            Log($"  {LfxConfigFile.UrlId}={gitConfig[LfxConfigFile.UrlId]}");
            Log($"  {LfxConfigFile.PatternId}={gitConfig[LfxConfigFile.PatternId]}");
            Log($"  {LfxConfigFile.HintId}={gitConfig[LfxConfigFile.HintId]}");
            Log();

            Log("Config Files:");
            var configLevel = config;

            while (configLevel != null)
            {
                var configFile = configLevel.ConfigFile;
                Log($"  {configFile}");
                foreach (var value in configFile)
                {
                    Log($"    {value}");
                }
                configLevel = configLevel.Parent;
            }
            Log();
        }
예제 #6
0
파일: LfxCmd.cs 프로젝트: kingces95/lfx
        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);
            });
        }