示例#1
0
        static int Main(string[] Args)
        {
            // Build the argument list. Remove any double-hyphens from the start of arguments for conformity with other Epic tools.
            List <string> ArgsList = new List <string>();

            foreach (string Arg in Args)
            {
                ArgsList.Add(Arg.StartsWith("--")? Arg.Substring(1) : Arg);
            }

            // Parse the parameters
            int    NumThreads = int.Parse(ParseParameter(ArgsList, "-threads=", "4"));
            int    MaxRetries = int.Parse(ParseParameter(ArgsList, "-max-retries=", "4"));
            bool   bDryRun    = ParseSwitch(ArgsList, "-dry-run");
            bool   bHelp      = ParseSwitch(ArgsList, "-help");
            string RootPath   = ParseParameter(ArgsList, "-root=", Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "../../..")));

            // Parse the overwrite mode
            OverwriteMode Overwrite = OverwriteMode.Unchanged;

            if (ParseSwitch(ArgsList, "-prompt"))
            {
                Overwrite = OverwriteMode.Prompt;
            }
            else if (ParseSwitch(ArgsList, "-force"))
            {
                Overwrite = OverwriteMode.Force;
            }

            // Setup network proxy from argument list or environment variable
            string ProxyUrl = ParseParameter(ArgsList, "-proxy=", null);

            if (String.IsNullOrEmpty(ProxyUrl))
            {
                ProxyUrl = Environment.GetEnvironmentVariable("HTTP_PROXY");
            }

            // Parse all the default exclude filters
            HashSet <string> ExcludeFolders = new HashSet <string>(StringComparer.CurrentCultureIgnoreCase);

            if (!ParseSwitch(ArgsList, "-all"))
            {
                if (Environment.OSVersion.Platform != PlatformID.Win32NT)
                {
                    ExcludeFolders.Add("Win32");
                    ExcludeFolders.Add("Win64");
                }
                if (Environment.OSVersion.Platform != PlatformID.MacOSX && !(Environment.OSVersion.Platform == PlatformID.Unix && Directory.Exists("/Applications") && Directory.Exists("/System")))
                {
                    ExcludeFolders.Add("Mac");
                }
                if (Environment.GetEnvironmentVariable("EMSCRIPTEN") == null)
                {
                    ExcludeFolders.Add("HTML5");
                }
                if (Environment.GetEnvironmentVariable("NDKROOT") == null)
                {
                    ExcludeFolders.Add("Android");
                }
            }

            // Parse all the explicit include filters
            foreach (string IncludeFolder in ParseParameters(ArgsList, "-include="))
            {
                ExcludeFolders.Remove(IncludeFolder.Replace('\\', '/').Trim('/'));
            }

            // Parse all the explicit exclude filters
            foreach (string ExcludeFolder in ParseParameters(ArgsList, "-exclude="))
            {
                ExcludeFolders.Add(ExcludeFolder.Replace('\\', '/').Trim('/'));
            }

            // If there are any more parameters, print an error
            foreach (string RemainingArg in ArgsList)
            {
                Log.WriteLine("Invalid command line parameter: {0}", RemainingArg);
                Log.WriteLine();
                bHelp = true;
            }

            // Print the help message
            if (bHelp)
            {
                Log.WriteLine("Usage:");
                Log.WriteLine("   GitDependencies [options]");
                Log.WriteLine();
                Log.WriteLine("Options:");
                Log.WriteLine("   --all            Sync all folders");
                Log.WriteLine("   --include=<X>    Include binaries in folders called <X>");
                Log.WriteLine("   --exclude=<X>    Exclude binaries in folders called <X>");
                Log.WriteLine("   --prompt         Prompts for whether to overwrite modified workspace files");
                Log.WriteLine("   --force          Overwrite modified dependency files in the workspace");
                Log.WriteLine("   --root=<PATH>    Specifies the path to the directory to sync with");
                Log.WriteLine("   --threads=X      Use X threads when downloading new files");
                Log.WriteLine("   --dry-run        Print a list of outdated files, but don't do anything");
                Log.WriteLine("   --max-retries    Set the maximum number of retries for downloading files");
                Log.WriteLine("   --proxy=<URL>    Set http proxy URL");
                if (ExcludeFolders.Count > 0)
                {
                    Log.WriteLine();
                    Log.WriteLine("Current excluded folders: {0}", String.Join(", ", ExcludeFolders));
                }
                return(0);
            }

            // Register a delegate to clear the status text if we use ctrl-c to quit
            Console.CancelKeyPress += delegate { Log.FlushStatus(); };

            // Update the tree. Make sure we clear out the status line if we quit for any reason (eg. ctrl-c)
            if (!UpdateWorkingTree(bDryRun, RootPath, ExcludeFolders, NumThreads, MaxRetries, ProxyUrl, Overwrite))
            {
                return(1);
            }
            return(0);
        }