protected override void Compile (BuildLogger logger, BuildConfig config, string cloneDirectory, GitHub_Commit commit)
		{
			MainClass.Plugins.ForEachPlugin ((plugin) =>
			{
				plugin.BeforeCompile (this, logger, config, cloneDirectory, commit);
			});

			//Print info
			Run (logger, MonoPath, $"--version", cloneDirectory);
			Run (logger, XbuildPath, $"/version", cloneDirectory);

			//Post build commands - Default: restore packages
			if (config == null || config.PreBuild == null || config.PreBuild.Length == 0)
			{
				Console.WriteLine ("No config pre-build commands");
				Run (logger, "nuget", $"restore \"{config.SolutionFile}\"", cloneDirectory);
			}
			else
			{
				foreach (var command in config.PreBuild)
				{
					var line = command.Replace ("{mono-path}", MonoPath);
					var firstSpace = line.IndexOf (' ');
					var cmd = line.Substring (0, firstSpace);
					var args = line.Remove (0, firstSpace + 1);

					Run (logger, cmd, args, cloneDirectory);
				}
			}

			//Compile
			if (String.IsNullOrEmpty (config.BuildArgs))
			{
				Run (logger, XbuildPath, $"\"{config.SolutionFile}\"", cloneDirectory);
			}
			else
			{
				Run (logger, XbuildPath, config.BuildArgs, cloneDirectory);
			}

			MainClass.Plugins.ForEachPlugin ((plugin) =>
			{
				plugin.AfterCompile (this, logger, config, cloneDirectory, commit);
			});
		}
 protected abstract void Compile(BuildLogger logger, BuildConfig config, string cloneDirectory, GitHub_Commit commit);
        protected virtual void Clone(BuildLogger logger, string cloneDirectory, GitHub_Commit commit)
        {
            //Touch the directory
            if (!System.IO.Directory.Exists (WorkingDirectory))
                System.IO.Directory.CreateDirectory (WorkingDirectory);

            #if !TESTING
            //If for some reason the clone directory exists, then it must be removed for git will crash and burn.
            if (System.IO.Directory.Exists (cloneDirectory))
                System.IO.Directory.Delete (cloneDirectory, true);

            //Clone from github into the target directory
            Run (logger, "git", $"clone --depth=50 --branch=master {_repository.CloneUrl} {cloneDirectory}");
            #endif

            //Checkout the target commit
            Run (logger, "git", $"checkout -qf {commit.CommitId}", cloneDirectory);

            //Initialise sub modules
            Run (logger, "git", $"submodule init", cloneDirectory       );
        }
 public void SheduleCompile(GitHub_Commit commit)
 {
     _pending.Enqueue (commit);
     Start ();
 }
 public virtual void OnPass(IProjectCompiler compiler, string cloneDirectory, GitHub_Commit commit, BuildConfig config)
 {
 }
 /// <summary>
 /// Called before any compilation steps are performed.
 /// </summary>
 /// <param name="compiler">Compiler being used.</param>
 /// <param name="logger">The build log.</param>
 /// <param name="config">Config.</param>
 /// <param name="cloneDirectory">Clone directory.</param>
 /// <param name="commit">Commit details.</param>
 public virtual void BeforeCompile(IProjectCompiler compiler, BuildLogger logger, BuildConfig config, string cloneDirectory, GitHub_Commit commit)
 {
 }