示例#1
0
        private void PrintReadyMessage()
        {
            if (Watchers.Count > 0)
            {
                var sources = String.Join(',', pm.ProjectPackage.Sources.ToArray());
                Console.WriteLine("");
                Console.WriteLine(((new Random()).Next(100) < 50 ? "Nice!" : "Great!") + " Watching for changes:");

                ConsoleColorChanger.UseSecondary();
                Console.Write("  " + pm.ProjectPackageName);
                ConsoleColorChanger.UsePrimary();
                Console.WriteLine(" -> refresh packages");

                if (sources.Length > 0)
                {
                    ConsoleColorChanger.UseSecondary();
                    Console.Write("  " + sources);
                    ConsoleColorChanger.UsePrimary();
                    Console.WriteLine(" -> rebuild modules");
                }

                ConsoleColorChanger.UseSecondary();
                Console.Write("  " + pm.ProjectPackage.Target);
                ConsoleColorChanger.UsePrimary();
                Console.WriteLine(" -> rebuild modules");
            }

            Console.WriteLine("");
            ConsoleColorChanger.UseAccent();
            Console.WriteLine("Now you are free to work with your map directory. Press any key to stop.");
            ConsoleColorChanger.UsePrimary();
            Console.WriteLine("");
        }
示例#2
0
        private void ExecuteAfterBuild()
        {
            if (pm.ProjectPackage.AfterBuild.Length > 0)
            {
                Console.WriteLine("");
                Console.Write("  Executing ");
                ConsoleColorChanger.UseSecondary();
                Console.WriteLine(pm.ProjectPackage.AfterBuild);
                ConsoleColorChanger.UsePrimary();

                Process cmd = new Process();
                cmd.StartInfo.FileName               = "cmd.exe";
                cmd.StartInfo.Arguments              = "/C " + pm.ProjectPackage.AfterBuild;
                cmd.StartInfo.RedirectStandardInput  = true;
                cmd.StartInfo.RedirectStandardOutput = true;
                cmd.StartInfo.CreateNoWindow         = true;
                cmd.StartInfo.UseShellExecute        = false;
                cmd.Start();

                cmd.StandardInput.Flush();
                cmd.StandardInput.Close();
                cmd.WaitForExit();
                ConsoleColorChanger.UseSecondary();
                Console.WriteLine("");
                Console.WriteLine(cmd.StandardOutput.ReadToEnd());
            }
        }
示例#3
0
        private string GetCodeFor(PackageDependency dep)
        {
            Console.Write("  Building ");
            ConsoleColorChanger.UseSecondary();
            Console.WriteLine(dep.Resource);
            ConsoleColorChanger.UsePrimary();

            var    dirs   = new List <string>();
            string result = GetClientScriptTagStart(dep.Resource);

            if (dep.Type == DependencyType.Package)
            {
                foreach (var src in dep.Sources)
                {
                    if (VerboseLog)
                    {
                        Console.WriteLine("-- Generating code for source: " + src);
                    }
                    dirs.Add(pm.GetDependencyDir(dep));
                }

                var filenames = new List <string>();
                foreach (var dir in dirs)
                {
                    filenames.AddRange(Directory.GetFiles(dir, pm.ProjectPackage.SourceExtensions, SearchOption.AllDirectories));
                }

                foreach (var filename in filenames)
                {
                    if (VerboseLog)
                    {
                        Console.WriteLine("-- Loading code from: " + filename);
                    }
                    result += "\n\n" + File.ReadAllText(filename);
                }
            }
            else
            {
                result += File.ReadAllText(pm.GetDependencyFile(dep));
            }

            return(result + GetClientScriptTagEnd(dep.Resource));
        }
示例#4
0
        private string GetCodeFor(string[] dirs)
        {
            if (dirs.Length < 1)
            {
                return("");
            }

            string result = "";

            foreach (string dir in dirs)
            {
                string   dirPath = Path.Combine(pm.ProjectDirectory, dir);
                string[] files   = Directory.GetFiles(dirPath, pm.ProjectPackage.SourceExtensions, SearchOption.AllDirectories);
                foreach (string file in files)
                {
                    Console.Write("  Building source ");
                    ConsoleColorChanger.UseSecondary();
                    Console.WriteLine(file);
                    ConsoleColorChanger.UsePrimary();

                    for (int i = 1; i <= 30; ++i)
                    {
                        try {
                            result += "\n\n-- " + file + "\n" + File.ReadAllText(file);
                            break;
                        } catch (IOException) when(i <= 30)
                        {
                            Thread.Sleep(200);
                        }
                    }
                }

                result += GetCodeFor(Directory.GetDirectories(dirPath));
            }

            return(result);
        }
示例#5
0
 private void PrintWatcherEvent(string prefix, string action, string filename = "", string anotherFilename = "")
 {
     if (prefix != "")
     {
         Console.Write("  " + prefix + " ");
     }
     ConsoleColorChanger.UseAccent();
     Console.Write(action + " ");
     ConsoleColorChanger.UsePrimary();
     if (filename != "")
     {
         ConsoleColorChanger.UseSecondary();
         Console.Write(filename + " ");
         ConsoleColorChanger.UsePrimary();
     }
     if (anotherFilename != "")
     {
         Console.Write(" -> ");
         ConsoleColorChanger.UseSecondary();
         Console.Write(anotherFilename + " ");
         ConsoleColorChanger.UsePrimary();
     }
     Console.WriteLine("");
 }
示例#6
0
        public Application(string projectDir, string[] args, string version)
        {
            Version = version;
            ConsoleColorChanger.SetPrimary(Console.ForegroundColor);
            var noExit = hasArg(args, "--noexit");

            if (args.Length < 1 || noExit)
            {
                Console.WriteLine("Warcraft 3 Lua Package Manager " + Version + " (WLPM) by ScorpioT1000");
                Console.WriteLine("Get more info at: https://github.com/Indaxia/WLPM");
                Console.WriteLine("Arguments:");
                Console.WriteLine("  install <package> [<version>] [file]");
                Console.WriteLine("  - adds a new package or file to your package file and installs dependencies. Omit version to require head revision. To add a file type 'file' as a third parameter");
                Console.WriteLine("  update");
                Console.WriteLine("  - removes any package data and re-downloads it from the internet");
                Console.WriteLine("  build");
                Console.WriteLine("  - builds all downloaded modules and sources into target lua file");
                Console.WriteLine("  update build");
                Console.WriteLine("  - runs 'update' then 'build'");
                Console.WriteLine("  watch");
                Console.WriteLine("  - watches for changes of the sources and target and performs update or build");
                Console.WriteLine("Options:");
                Console.WriteLine("  --detailed");
                Console.WriteLine("  - add this option to get more detailed info about the internal processes");
                Console.WriteLine("");

                if (noExit)
                {
                    ConsoleColorChanger.UseAccent();
                    Console.Error.WriteLine("Press any key to exit.");
                    ConsoleColorChanger.UsePrimary();
                    Console.ReadKey();
                }
                return;
            }

            if (hasArg(args, "--detailed"))
            {
                VerboseLog = true;
            }



            pm = new PackageManager(projectDir, VerboseLog);
            mm = new ModuleManager(pm, VerboseLog, Version);

            for (; RetryAttempt < 3; ++RetryAttempt)
            {
                try {
                    if (hasArg(args, "build"))
                    {
                        pm.RefreshPackages();
                        mm.RebuildModules();
                        return;
                    }
                    else if (hasArg(args, "install"))
                    {
                        if (args.Length < 2)
                        {
                            Console.WriteLine("install format: install url [version]");
                        }
                        else
                        {
                            pm.InstallDependency(args[1], args.Length > 2 ? args[2].Trim() : "*", args.Length > 3 && args[3] == "file");
                        }
                        return;
                    }
                    else if (hasArg(args, "watch"))
                    {
                        pm.RefreshPackages();
                        mm.RebuildModules();
                        WatchForChanges();
                    }
                    else if (hasArg(args, "update"))
                    {
                        pm.RefreshPackages(true);
                        return;
                    }
                    else
                    {
                        Console.WriteLine("Wrong command, execute the program without arguments to get help");
                        return;
                    }
                } catch (Exception e) {
                    ConsoleColorChanger.UseWarning();
                    Console.Error.WriteLine("General Error: " + e.Message);
                    Console.Error.WriteLine("Source: " + e.Source);
                    Console.Error.WriteLine("");
                    Console.Error.WriteLine("Press any key to try again. Press CTRL+C to stop.");
                    ConsoleColorChanger.UsePrimary();
                    Console.ReadKey();
                    pm.Clear();
                    mm.Clear();
                }
                Console.Error.WriteLine("Retry attempt: " + RetryAttempt);
            }
        }
示例#7
0
        private void _RebuildModules()
        {
            isBusy = true;

            ConsoleColorChanger.UseAccent();
            Console.WriteLine("Rebuilding modules");
            ConsoleColorChanger.UsePrimary();

            string targetFilename = Path.Combine(pm.ProjectDirectory, pm.ProjectPackage.Target);
            string targetOriginal = "";

            for (int i = 1; i <= 30; ++i)
            {
                try {
                    targetOriginal = File.ReadAllText(targetFilename);
                    break;
                } catch (IOException) when(i <= 30)
                {
                    Thread.Sleep(200);
                }
            }


            targetOriginal = RemoveBetween(targetOriginal, ClientScriptStart, ClientScriptEnd);

            string targetHeader = "";
            string targetTop    = "";
            string targetBottom = "\n\n";

            targetHeader += "\n\n-- Warcraft 3 Lua Package Manager " + AppVersion;
            targetHeader += "\n-- Build time: " + DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss zzz");
            if (pm.ProjectPackage.InsertModuleLoader)
            {
                Console.Write("  Code of ");
                ConsoleColorChanger.UseSecondary();
                Console.Write("WLPM Module Manager");
                ConsoleColorChanger.UsePrimary();
                Console.WriteLine(@" added to the header. To disable, set ""insertModuleLoader"" to false in your " + pm.ProjectPackageName);
                targetHeader += "\n" + GetClientScript();
            }
            else
            {
                Console.Write("Code of ");
                ConsoleColorChanger.UseSecondary();
                Console.Write("WLPM Module Manager");
                ConsoleColorChanger.UsePrimary();
                Console.WriteLine(" is skipped according to your " + pm.ProjectPackageName);
            }
            targetHeader += "\n\n";

            foreach (string index in pm.DependenciesOrderIndex)
            {
                if (!pm.Dependencies.ContainsKey(index))
                {
                    throw new ModuleException("Dependencies collection has no index '" + index + "' but it's stored in indexes. Try to run 'wlpm update'");
                }
                PackageDependency dep  = pm.Dependencies[index];
                string            code = GetCodeFor(dep);
                if (dep.TopOrder)
                {
                    targetTop += "\n\n" + code;
                }
                else
                {
                    targetBottom += "\n\n" + code;
                }
            }

            targetBottom += GetCodeFor(pm.ProjectPackage.Sources.ToArray());

            string target = ClientScriptStart + targetHeader + targetTop + targetBottom + "\n" + ClientScriptEnd + targetOriginal;

            for (int i = 1; i <= 30; ++i)
            {
                try {
                    File.WriteAllText(targetFilename, target);
                    break;
                } catch (IOException) when(i <= 30)
                {
                    Thread.Sleep(200);
                }
            }

            UnsubscribeASAPEvent("ModuleManager.RebuildModules");

            targetLastChange = File.GetLastWriteTimeUtc(targetFilename);

            ExecuteAfterBuild();

            isBusy = false;
        }