예제 #1
0
        public static void Run()
        {
            var pkg             = new RantPackage();
            var paths           = GetPaths();
            var compress        = Property("compression", "true") == "true";
            var stringTableMode = int.Parse(Property("string-table", "1"));

            if (stringTableMode < 0 || stringTableMode > 2)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Invalid string table mode.");
                Console.ResetColor();
                return;
            }

            var modeEnum = (BsonStringTableMode)stringTableMode;

            Console.WriteLine("Packing...");

            var contentDir = Path.GetFullPath(paths.Length == 0 ? Environment.CurrentDirectory : paths[0]);

            Pack(pkg, contentDir);

            string outputPath;

            if (!Flag("old"))
            {
                var infoPath = Path.Combine(contentDir, "rantpkg.json");
                if (!File.Exists(infoPath))
                {
                    throw new FileNotFoundException("rantpkg.json missing from root directory.");
                }

                var info = JsonConvert.DeserializeObject <PackInfo>(File.ReadAllText(infoPath));
                pkg.Title       = info.Title;
                pkg.Authors     = info.Authors;
                pkg.Version     = RantPackageVersion.Parse(!String.IsNullOrWhiteSpace(Property("version")) ? Property("version") : info.Version);
                pkg.Description = info.Description;
                pkg.ID          = info.ID;
                pkg.Tags        = info.Tags;
                foreach (var dep in info.Dependencies)
                {
                    pkg.AddDependency(dep);
                }

                if (!String.IsNullOrWhiteSpace(info.OutputPath))
                {
                    outputPath = Path.Combine(contentDir, info.OutputPath, $"{pkg.ID}-{pkg.Version}.rantpkg");
                    Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
                }
                else
                {
                    outputPath = Path.Combine(Directory.GetParent(contentDir).FullName, $"{pkg.ID}-{pkg.Version}.rantpkg");
                }

                Console.WriteLine($"String table mode: {modeEnum}");
                Console.WriteLine($"Compression: {(compress ? "yes" : "no")}");

                Console.WriteLine(compress ? "Compressing and saving..." : "Saving...");
                pkg.Save(outputPath, compress, modeEnum);
            }
            else
            {
                outputPath = Property("out", Path.Combine(
                                          Directory.GetParent(Environment.CurrentDirectory).FullName,
                                          Path.GetFileName(Environment.CurrentDirectory) + ".rantpkg"));
                Console.WriteLine("Saving...");
                pkg.SaveOld(outputPath);
            }

            Console.WriteLine("\nPackage saved to " + outputPath);

            Console.ResetColor();
        }
예제 #2
0
파일: PackCommand.cs 프로젝트: sizzles/Rant
        protected override void OnRun()
        {
            var  pkg      = new RantPackage();
            var  paths    = CmdLine.GetPaths();
            bool compress = !CmdLine.Flag("no-compress");

            Console.WriteLine("Packing...");

            string contentDir = Path.GetFullPath(paths.Length == 0 ? Environment.CurrentDirectory : paths[0]);

            Pack(pkg, contentDir);

            string outputPath;
            string infoPath = Path.Combine(contentDir, "rantpkg.json");

            if (!File.Exists(infoPath))
            {
                throw new FileNotFoundException("rantpkg.json missing from root directory.");
            }

            var info = JsonConvert.DeserializeObject <PackInfo>(File.ReadAllText(infoPath));

            pkg.Title       = info.Title;
            pkg.Authors     = info.Authors;
            pkg.Version     = RantPackageVersion.Parse(!string.IsNullOrWhiteSpace(CmdLine.Property("version")) ? CmdLine.Property("version") : info.Version);
            pkg.Description = info.Description;
            pkg.ID          = info.ID;
            pkg.Tags        = info.Tags;

            foreach (var dep in info.Dependencies)
            {
                pkg.AddDependency(dep);
            }

            // -out property overrides rantpkg.json's output path
            if (!string.IsNullOrWhiteSpace(CmdLine.Property("out")))
            {
                outputPath = Path.Combine(CmdLine.Property("out"), $"{pkg.ID}-{pkg.Version}.rantpkg");
                Directory.CreateDirectory(CmdLine.Property("out"));
            }
            // Otherwise, use rantpkg.json's "out" property
            else if (!string.IsNullOrWhiteSpace(info.OutputPath))
            {
                outputPath = Path.Combine(contentDir, info.OutputPath, $"{pkg.ID}-{pkg.Version}.rantpkg");
                Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
            }
            // If it doesn't have one, put it in the package content directory
            else
            {
                outputPath = Path.Combine(Directory.GetParent(contentDir).FullName, $"{pkg.ID}-{pkg.Version}.rantpkg");
            }

            Console.WriteLine($"Compression: {(compress ? "yes" : "no")}");

            Console.WriteLine(compress ? "Compressing and saving..." : "Saving...");
            pkg.Save(outputPath, compress);

            Console.WriteLine("\nPackage saved to " + outputPath.Replace('\\', '/'));

            Console.ResetColor();
        }