예제 #1
0
        bool TryInterpretDubListOutput(DubProject prj, string outp)
        {
            if (string.IsNullOrEmpty(outp))
            {
                return(false);
            }

            bool ret = false;

            foreach (Match match in dubInstalledPackagesOutputRegex.Matches(outp))
            {
                ret = true;
                if (match.Success)
                {
                    foreach (var kv in prj.DubReferences.GetDependencyEntries())
                    {
                        var dep = kv.Value;
                        if (kv.Key == match.Groups["name"].Value && string.IsNullOrWhiteSpace(dep.Path) &&
                            (string.IsNullOrEmpty(dep.Version) || CheckRequiredDepVersion(dep.Version, match.Groups["version"].Value)))
                        {
                            dep.Path = match.Groups["path"].Value.Trim();
                        }
                    }
                }
            }
            return(ret);
        }
예제 #2
0
        void FillDubReferencesPaths(DubProject prj)
        {
            string err, outp;
            var    baseDir = prj.BaseDirectory.ToString();

            if (DubListOutputs.TryGetValue(baseDir, out outp))
            {
                TryInterpretDubListOutput(prj, outp);
            }
            else
            {
                try
                {
                    ProjectBuilder.ExecuteCommand(DubSettings.Instance.DubCommand, "list", baseDir, null, out err, out outp);
                    // Backward compatiblity
                    if (!string.IsNullOrWhiteSpace(err) || !TryInterpretDubListOutput(prj, outp))
                    {
                        ProjectBuilder.ExecuteCommand(DubSettings.Instance.DubCommand, "list-installed", baseDir, null, out err, out outp);
                        TryInterpretDubListOutput(prj, outp);
                    }

                    if (!string.IsNullOrWhiteSpace(outp))
                    {
                        DubListOutputs[baseDir] = outp;
                    }
                }
                catch (Exception ex)
                {
                    LoggingService.LogError("Error while resolving dub dependencies via executing 'dub list-installed'", ex);
                }
            }

            prj.DubReferences.FireUpdate();
        }
예제 #3
0
파일: DubSdl.cs 프로젝트: aBothe/Mono-D
        protected override DubProject ReadSubPackage(DubProject superProject, object definition)
        {
            if (definition is SDLObject)
                return Load (superProject, superProject.ParentSolution, definition, superProject.FileName);

            throw new ArgumentException ("definition");
        }
예제 #4
0
파일: DubJson.cs 프로젝트: lenoil98/Mono-D
        void TryPopulateProperty(DubProject prj, string propName, JSONThing j, List <Object> subPackages)
        {
            switch (propName)
            {
            case "displayname":
                prj.Name = ExpectJsonStringValue(j, propName);
                break;

            case "name":
                prj.packageName = ExpectJsonStringValue(j, propName);
                break;

            case "description":
                prj.Description = ExpectJsonStringValue(j, propName);
                break;

            case "copyright":
                prj.Copyright = ExpectJsonStringValue(j, propName);
                break;

            case "homepage":
                prj.Homepage = ExpectJsonStringValue(j, propName);
                break;

            case "authors":
                prj.Authors.Clear();
                foreach (var authorValue in ExpectJsonArray(j, propName).Items)
                {
                    prj.Authors.Add(ExpectJsonStringValue(authorValue, propName));
                }
                break;

            case "dependencies":
                DeserializeDubPrjDependencies(ExpectJsonObject(j, propName), prj.CommonBuildSettings);
                break;

            case "configurations":
                foreach (var o in ExpectJsonArray(j, propName).Items)
                {
                    IntroduceConfiguration(prj, DeserializeFromPackageJson(ExpectJsonObject(o, propName)));
                }
                break;

            case "subpackages":
                subPackages.AddRange(ExpectJsonArray(j, propName).Items);
                break;

            case "buildtypes":
                foreach (var kv in ExpectJsonObject(j, propName).Properties)
                {
                    prj.buildTypes.Add(kv.Key);
                }
                break;

            default:
                TryDeserializeBuildSetting(prj.CommonBuildSettings, propName, j);
                break;
            }
        }
예제 #5
0
파일: DubJson.cs 프로젝트: aBothe/Mono-D
        protected override DubProject ReadSubPackage(DubProject superProject, Object definition)
        {
            if(definition is JSONValueLeaf)
                return DubFileManager.Instance.LoadProject(GetDubFilePath(superProject, (definition as JSONValueLeaf).Value), superProject.ParentSolution, null, DubFileManager.LoadFlags.None, superProject);
            if (definition is JSONObject)
                return Load (superProject, superProject.ParentSolution, definition as JSONObject, superProject.FileName);

            throw new InvalidDataException ("definition");
        }
예제 #6
0
		public DubProject Load(DubProject superPackage, Solution parentSolution, Object streamReader, string originalFile)
		{
			bool returnSubProject = superPackage != null;

			var defaultPackage = returnSubProject ? new DubSubPackage() : new DubProject();

			defaultPackage.FileName = originalFile;
			defaultPackage.BaseDirectory = defaultPackage.FileName.ParentDirectory;

			if (returnSubProject)
			{
				var sub = defaultPackage as DubSubPackage;
				sub.OriginalBasePath = superPackage is DubSubPackage ? (superPackage as DubSubPackage).OriginalBasePath :
					superPackage.BaseDirectory;
				sub.VirtualBasePath = sub.OriginalBasePath;
			}

			defaultPackage.BeginLoad();

			defaultPackage.AddProjectAndSolutionConfiguration(new DubProjectConfiguration { Name = GettextCatalog.GetString("Default"), Id = DubProjectConfiguration.DefaultConfigId });

			if (returnSubProject)
			{
				superPackage.packagesToAdd.Add(defaultPackage);
			}

			Read(defaultPackage, streamReader);

			// Fill dub references
			if (defaultPackage.DubReferences.Any(dep => string.IsNullOrWhiteSpace(dep.Path)))
				FillDubReferencesPaths(defaultPackage);
			else
				defaultPackage.DubReferences.FireUpdate();

			if (returnSubProject)
			{
				defaultPackage.packageName = superPackage.packageName + ":" + (defaultPackage.packageName ?? string.Empty);

				var sub = defaultPackage as DubSubPackage;
				var sourcePaths = sub.GetSourcePaths().ToArray();
				if (sourcePaths.Length > 0 && !string.IsNullOrWhiteSpace(sourcePaths[0]))
					sub.VirtualBasePath = new FilePath(sourcePaths[0]);

				// TODO: What to do with new configurations that were declared in this sub package? Add them to all other packages as well?
			}

			defaultPackage.Items.Add(new ProjectFile(originalFile, BuildAction.None));

			// https://github.com/aBothe/Mono-D/issues/555
			var dubSelectionJsonPath = defaultPackage.BaseDirectory.Combine(DubSelectionsJsonFile);
			if (File.Exists(dubSelectionJsonPath))
				defaultPackage.Items.Add(new ProjectFile(dubSelectionJsonPath, BuildAction.None));

			defaultPackage.EndLoad();

			return defaultPackage;
		}
예제 #7
0
        protected override DubProject ReadSubPackage(DubProject superProject, object definition)
        {
            if (definition is SDLObject)
            {
                return(Load(superProject, superProject.ParentSolution, definition, superProject.FileName));
            }

            throw new ArgumentException("definition");
        }
예제 #8
0
파일: DubJson.cs 프로젝트: aBothe/Mono-D
        protected override void Read(DubProject target, Object input, List<Object> subPackages)
        {
            var json = input as JSONObject;

            if (input is TextReader)
                json = new JSONThingDeserializer().Deserialize (input as TextReader);
            else if(json == null)
                throw new ArgumentException("input");

            foreach (var kv in json.Properties)
                TryPopulateProperty (target, kv.Key, kv.Value, subPackages);
        }
예제 #9
0
		void Parse(JsonReader r, DubProject prj)
		{
			while (r.Read())
			{
				if (r.TokenType == JsonToken.PropertyName)
				{
					var propName = r.Value as string;
					TryPopulateProperty(prj, propName, r);
				}
				else if (r.TokenType == JsonToken.EndObject)
					break;
			}
		}
예제 #10
0
파일: DubJson.cs 프로젝트: lenoil98/Mono-D
        protected override DubProject ReadSubPackage(DubProject superProject, Object definition)
        {
            if (definition is JSONValueLeaf)
            {
                return(DubFileManager.Instance.LoadProject(GetDubFilePath(superProject, (definition as JSONValueLeaf).Value), superProject.ParentSolution, null, DubFileManager.LoadFlags.None, superProject));
            }
            if (definition is JSONObject)
            {
                return(Load(superProject, superProject.ParentSolution, definition as JSONObject, superProject.FileName));
            }

            throw new InvalidDataException("definition");
        }
예제 #11
0
		protected override void Read(DubProject target, Object input)
		{
			if (input is JsonReader)
				Parse(input as JsonReader, target);
			else if (input is TextReader)
			{
				using (var r = new JsonTextReader(input as TextReader))
				{
					Parse(r, target);
				}
			}
			else
				throw new ArgumentException("input");
		}
예제 #12
0
파일: DubSdl.cs 프로젝트: aBothe/Mono-D
        protected override void Read(DubProject target, Object input, List<Object> subPackagesToBeReadLater)
        {
            if (input is StreamReader)
            {
                var tree = SDL.SdlParser.Parse(input as StreamReader);
                //TODO: Display parse errors?

                foreach (var decl in tree.Children)
                    InterpretGlobalProperty(decl, target);
            }
            else if (input is SDLObject)
                foreach (var decl in (input as SDLObject).Children)
                    InterpretGlobalProperty(decl, target);
            else
                throw new ArgumentException("input");
        }
예제 #13
0
파일: DubJson.cs 프로젝트: lenoil98/Mono-D
        protected override void Read(DubProject target, Object input, List <Object> subPackages)
        {
            var json = input as JSONObject;

            if (input is TextReader)
            {
                json = new JSONThingDeserializer().Deserialize(input as TextReader);
            }
            else if (json == null)
            {
                throw new ArgumentException("input");
            }

            foreach (var kv in json.Properties)
            {
                TryPopulateProperty(target, kv.Key, kv.Value, subPackages);
            }
        }
예제 #14
0
        public void LoadSubProjects(DubProject defaultPackage, IProgressMonitor monitor)
        {
            var sln = defaultPackage.ParentSolution;

            foreach (var dep in defaultPackage.DubReferences)
            {
                var file = DubFileReader.GetDubFilePath(defaultPackage, dep.Path);
                if (String.IsNullOrWhiteSpace(dep.Path) || !CanLoad(file))
                {
                    continue;
                }

                var subProject = supportedDubFileFormats.First((i) => i.CanLoad(file)).Load(file, null, sln);

                if (defaultPackage != subProject)
                {
                    LoadSubProjects(subProject, monitor);
                }
            }
        }
예제 #15
0
        protected override void Read(DubProject target, Object input, List <Object> subPackagesToBeReadLater)
        {
            if (input is StreamReader)
            {
                var tree = SDL.SdlParser.Parse(input as StreamReader);
                //TODO: Display parse errors?

                foreach (var decl in tree.Children)
                {
                    InterpretGlobalProperty(decl, target);
                }
            }
            else if (input is SDLObject)
            {
                foreach (var decl in (input as SDLObject).Children)
                {
                    InterpretGlobalProperty(decl, target);
                }
            }
            else
            {
                throw new ArgumentException("input");
            }
        }
예제 #16
0
 protected abstract void Read(DubProject target, Object streamReader, List<Object> subPackages);
예제 #17
0
 protected abstract DubProject ReadSubPackage(DubProject superProject, Object definition);
예제 #18
0
 public DubProject Load(string file, DubProject superProject, Solution parentSolution)
 {
     using (var fs = new FileStream(file, FileMode.Open))
     using (var sr = new StreamReader(fs))
         return Load(superProject, parentSolution, sr, file);
 }
예제 #19
0
 protected void IntroduceConfiguration(DubProject prj, DubProjectConfiguration projectConfiguration)
 {
     prj.Configurations.Add (projectConfiguration);
 }
예제 #20
0
        void InterpretGlobalProperty(SDLDeclaration decl, DubProject target)
        {
            switch (decl.Name.ToLower())
            {
            case "displayname":
                target.Name = ExtractFirstAttribute(decl);
                break;

            case "name":
                target.packageName = ExtractFirstAttribute(decl);
                break;

            case "description":
                target.Description = ExtractFirstAttribute(decl);
                break;

            case "homepage":
                target.Homepage = ExtractFirstAttribute(decl);
                break;

            case "authors":
                target.Authors.Clear();
                target.Authors.AddRange(ExtractUnnamedAttributes(decl));
                break;

            case "copyright":
                target.Copyright = ExtractFirstAttribute(decl);
                break;

            case "subpackage":
                if (decl is SDLObject)
                {
                    base.Load(target, target.ParentSolution, decl, target.FileName);
                }
                else
                {
                    DubFileManager.Instance.LoadProject(GetDubFilePath(target, ExtractFirstAttribute(decl)), target.ParentSolution, null, DubFileManager.LoadFlags.None, target);
                }
                break;

            case "configuration":
                var o = decl as SDLObject;
                if (o != null)
                {
                    var c = new DubProjectConfiguration {
                        Name = ExtractFirstAttribute(o)
                    };
                    if (string.IsNullOrEmpty(c.Name))
                    {
                        c.Name = "<Undefined>";
                    }

                    foreach (var childDecl in o.Children)
                    {
                        InterpretBuildSetting(childDecl, c.BuildSettings);
                    }

                    IntroduceConfiguration(target, c);
                }
                break;

            case "buildtype":
                var name = ExtractFirstAttribute(decl);
                if (!string.IsNullOrEmpty(name))
                {
                    target.buildTypes.Add(name);
                }
                // Ignore remaining contents as they're not needed by mono-d
                break;

            default:
                InterpretBuildSetting(decl, target.CommonBuildSettings);
                break;
            }
        }
예제 #21
0
 protected abstract void Read(DubProject target, Object streamReader, List <Object> subPackages);
예제 #22
0
 public DubProject LoadProject(string file, Solution parentSolution, IProgressMonitor monitor, LoadFlags flags = LoadFlags.LoadReferences, DubProject superProject = null)
 {
     if(monitor != null)
         monitor.BeginTask("Load dub project '" + file + "'", 1);
     try
     {
         var prj = supportedDubFileFormats.First((i) => i.CanLoad(file)).Load(file, superProject, parentSolution);
         if (flags.HasFlag(LoadFlags.LoadReferences))
             LoadSubProjects(prj, monitor);
         return prj;
     }
     finally
     {
         if (monitor != null)
             monitor.EndTask();
     }
 }
예제 #23
0
        public DubProject Load(DubProject superPackage, Solution parentSolution, Object streamReader, string originalFile)
        {
            DubProject defaultPackage;

            if(parentSolution == null)
                throw new InvalidDataException("Parent solution must be specified!");

            bool returnSubProject = superPackage != null;

            if (!returnSubProject && (defaultPackage = parentSolution.GetProjectsContainingFile(new FilePath(originalFile)).FirstOrDefault() as DubProject) != null)
            {
                return defaultPackage;
            }

            defaultPackage = returnSubProject ? new DubSubPackage() : new DubProject();

            defaultPackage.FileName = originalFile;
            defaultPackage.BaseDirectory = defaultPackage.FileName.ParentDirectory;

            if (returnSubProject)
            {
                var sub = defaultPackage as DubSubPackage;
                sub.OriginalBasePath = superPackage is DubSubPackage ? (superPackage as DubSubPackage).OriginalBasePath :
                    superPackage.BaseDirectory;
                sub.VirtualBasePath = sub.OriginalBasePath;
            }

            defaultPackage.BeginLoad();

            var subPackagesToBeLoadedDeferred = new List<Object> ();
            Read(defaultPackage, streamReader, subPackagesToBeLoadedDeferred);

            if (defaultPackage.Configurations.Count == 0) {
                defaultPackage.Configurations.Add (new DubProjectConfiguration{ Id = DubProjectConfiguration.DefaultConfigId, Name = "Default" });
            }

            // Set subpackage packageName
            if (returnSubProject)
            {
                defaultPackage.packageName = superPackage.packageName + ":" + (defaultPackage.packageName ?? string.Empty);

                var sub = defaultPackage as DubSubPackage;
                var sourcePaths = sub.GetSourcePaths().ToArray();
                if (sourcePaths.Length > 0 && !string.IsNullOrWhiteSpace(sourcePaths[0]))
                    sub.VirtualBasePath = new FilePath(sourcePaths[0]);

                // TODO: What to do with new configurations that were declared in this sub package? Add them to all other packages as well?
            }

            // Add package to solution
            if (parentSolution is DubSolution)
                (parentSolution as DubSolution).AddProject(defaultPackage);
            else
                parentSolution.RootFolder.AddItem(defaultPackage, false);

            // Load subpackages
            foreach (var subPackageDeclaration in subPackagesToBeLoadedDeferred) {
                ReadSubPackage (defaultPackage, subPackageDeclaration);
            }

            // Fill dub references
            if (defaultPackage.DubReferences.Any(dep => string.IsNullOrWhiteSpace(dep.Path)))
                FillDubReferencesPaths(defaultPackage);
            else
                defaultPackage.DubReferences.FireUpdate();

            // Add dub.json/sdl+selections file
            if (!returnSubProject)
            {
                defaultPackage.Items.Add (new ProjectFile (originalFile, BuildAction.None));

                // https://github.com/aBothe/Mono-D/issues/555
                var dubSelectionJsonPath = defaultPackage.BaseDirectory.Combine (DubSelectionsJsonFile);
                if (File.Exists (dubSelectionJsonPath))
                    defaultPackage.Items.Add (new ProjectFile (dubSelectionJsonPath, BuildAction.None));
            }

            defaultPackage.EndLoad();

            return defaultPackage;
        }
예제 #24
0
		void TryPopulateProperty(DubProject prj, string propName, JsonReader j)
		{
			switch (propName.ToLowerInvariant())
			{
				case "displayname":
					prj.Name = j.ReadAsString();
					break;
				case "name":
					prj.packageName = j.ReadAsString();
					break;
				case "description":
					prj.Description = j.ReadAsString();
					break;
				case "copyright":
					prj.Copyright = j.ReadAsString();
					break;
				case "homepage":
					prj.Homepage = j.ReadAsString();
					break;
				case "authors":
					if (!j.Read() || j.TokenType != JsonToken.StartArray)
						throw new JsonReaderException("Expected [ when parsing Authors");
					prj.Authors.Clear();
					while (j.Read() && j.TokenType != JsonToken.EndArray)
						if (j.TokenType == JsonToken.String)
							prj.Authors.Add(j.Value as string);
					break;
				case "dependencies":
					if (!j.Read() || j.TokenType != JsonToken.StartObject)
						throw new JsonReaderException("Expected { when parsing Authors");

					DeserializeDubPrjDependencies(j, prj.CommonBuildSettings);
					break;
				case "configurations":
					if (!j.Read() || j.TokenType != JsonToken.StartArray)
						throw new JsonReaderException("Expected [ when parsing Configurations");
					var sln = prj.ParentSolution;
					if (sln != null && sln.Configurations.Count == 1 && sln.Configurations[0].Id == DubProjectConfiguration.DefaultConfigId)
						sln.Configurations.Clear();
					if (prj.Configurations.Count == 1 && prj.Configurations[0].Id == DubProjectConfiguration.DefaultConfigId)
						prj.Configurations.Clear();

					while (j.Read() && j.TokenType != JsonToken.EndArray)
						prj.AddProjectAndSolutionConfiguration(DeserializeFromPackageJson(j));
					break;
				case "subpackages":
					if (!j.Read() || j.TokenType != JsonToken.StartArray)
						throw new JsonReaderException("Expected [ when parsing subpackages");

					while (j.Read() && j.TokenType != JsonToken.EndArray)
						ReadSubPackage(prj, j);
					break;
				case "buildtypes":
					if (!j.Read() || j.TokenType != JsonToken.StartObject)
						throw new JsonReaderException("Expected [ when parsing build types");

					while (j.Read() && j.TokenType != JsonToken.EndObject)
					{
						var n = j.Value as string;
						if (!prj.buildTypes.Contains(n))
							prj.buildTypes.Add(n);

						j.Skip();
					}

					prj.buildTypes.Sort();

					break;
				default:
					TryDeserializeBuildSetting(prj.CommonBuildSettings, j);
					break;
			}
		}
예제 #25
0
		public DubProject LoadProject(string file, Solution parentSolution, IProgressMonitor monitor, LoadFlags flags = LoadFlags.LoadReferences, DubProject superProject = null)
		{
			DubProject prj;

			if (FilesBeingLoaded.TryGetValue(file, out prj))
				return prj;

			using (new FilesBeingLoadedCleanser(file))
			{
				monitor.BeginTask("Load dub project '" + file + "'", 1);
				try
				{
					prj = supportedDubFileFormats.First((i) => i.CanLoad(file)).Load(file, superProject, parentSolution);
				}
				catch (Exception ex)
				{
					monitor.ReportError("Couldn't load dub package \"" + file + "\"", ex);
				}
				finally
				{
					monitor.EndTask();
				}

				if (flags.HasFlag(LoadFlags.LoadReferences))
					LoadSubProjects(prj, monitor);
			}

			return prj;
		}
예제 #26
0
 protected void IntroduceConfiguration(DubProject prj, DubProjectConfiguration projectConfiguration)
 {
     prj.Configurations.Add(projectConfiguration);
 }
예제 #27
0
        public DubProject Load(DubProject superPackage, Solution parentSolution, Object streamReader, string originalFile)
        {
            DubProject defaultPackage;

            if (parentSolution == null)
            {
                throw new InvalidDataException("Parent solution must be specified!");
            }

            bool returnSubProject = superPackage != null;

            if (!returnSubProject && (defaultPackage = parentSolution.GetProjectsContainingFile(new FilePath(originalFile)).FirstOrDefault() as DubProject) != null)
            {
                return(defaultPackage);
            }

            defaultPackage = returnSubProject ? new DubSubPackage() : new DubProject();

            defaultPackage.FileName      = originalFile;
            defaultPackage.BaseDirectory = defaultPackage.FileName.ParentDirectory;

            if (returnSubProject)
            {
                var sub = defaultPackage as DubSubPackage;
                sub.OriginalBasePath = superPackage is DubSubPackage ? (superPackage as DubSubPackage).OriginalBasePath :
                                       superPackage.BaseDirectory;
                sub.VirtualBasePath = sub.OriginalBasePath;
            }

            defaultPackage.BeginLoad();

            var subPackagesToBeLoadedDeferred = new List <Object> ();

            Read(defaultPackage, streamReader, subPackagesToBeLoadedDeferred);

            if (defaultPackage.Configurations.Count == 0)
            {
                defaultPackage.Configurations.Add(new DubProjectConfiguration {
                    Id = DubProjectConfiguration.DefaultConfigId, Name = "Default"
                });
            }

            // Set subpackage packageName
            if (returnSubProject)
            {
                defaultPackage.packageName = superPackage.packageName + ":" + (defaultPackage.packageName ?? string.Empty);

                var sub         = defaultPackage as DubSubPackage;
                var sourcePaths = sub.GetSourcePaths().ToArray();
                if (sourcePaths.Length > 0 && !string.IsNullOrWhiteSpace(sourcePaths[0]))
                {
                    sub.VirtualBasePath = new FilePath(sourcePaths[0]);
                }

                // TODO: What to do with new configurations that were declared in this sub package? Add them to all other packages as well?
            }

            // Add package to solution
            if (parentSolution is DubSolution)
            {
                (parentSolution as DubSolution).AddProject(defaultPackage);
            }
            else
            {
                parentSolution.RootFolder.AddItem(defaultPackage, false);
            }

            // Load subpackages
            foreach (var subPackageDeclaration in subPackagesToBeLoadedDeferred)
            {
                ReadSubPackage(defaultPackage, subPackageDeclaration);
            }

            // Fill dub references
            if (defaultPackage.DubReferences.Any(dep => string.IsNullOrWhiteSpace(dep.Path)))
            {
                FillDubReferencesPaths(defaultPackage);
            }
            else
            {
                defaultPackage.DubReferences.FireUpdate();
            }

            // Add dub.json/sdl+selections file
            if (!returnSubProject)
            {
                defaultPackage.Items.Add(new ProjectFile(originalFile, BuildAction.None));

                // https://github.com/aBothe/Mono-D/issues/555
                var dubSelectionJsonPath = defaultPackage.BaseDirectory.Combine(DubSelectionsJsonFile);
                if (File.Exists(dubSelectionJsonPath))
                {
                    defaultPackage.Items.Add(new ProjectFile(dubSelectionJsonPath, BuildAction.None));
                }
            }

            defaultPackage.EndLoad();

            return(defaultPackage);
        }
예제 #28
0
		void ReadSubPackage(DubProject superProject, JsonReader r)
		{
			switch (r.TokenType)
			{
				case JsonToken.StartObject:
					Load(superProject, superProject.ParentSolution, r, superProject.FileName);
					break;
				case JsonToken.String:
					DubFileManager.Instance.LoadProject(GetDubFilePath(superProject, r.Value as string), superProject.ParentSolution, null, DubFileManager.LoadFlags.None, superProject);
					break;
				default:
					throw new JsonReaderException("Illegal token on subpackage definition beginning");
			}
		}
예제 #29
0
        void FillDubReferencesPaths(DubProject prj)
        {
            string err, outp;
            var baseDir = prj.BaseDirectory.ToString();
            if (DubListOutputs.TryGetValue(baseDir, out outp))
            {
                TryInterpretDubListOutput(prj, outp);
            }
            else
            {
                try
                {
                    ProjectBuilder.ExecuteCommand(DubSettings.Instance.DubCommand, "list", baseDir, null, out err, out outp);
                    // Backward compatiblity
                    if (!string.IsNullOrWhiteSpace(err) || !TryInterpretDubListOutput(prj, outp))
                    {
                        ProjectBuilder.ExecuteCommand(DubSettings.Instance.DubCommand, "list-installed", baseDir, null, out err, out outp);
                        TryInterpretDubListOutput(prj, outp);
                    }

                    if (!string.IsNullOrWhiteSpace(outp))
                        DubListOutputs[baseDir] = outp;
                }
                catch (Exception ex)
                {
                    LoggingService.LogError("Error while resolving dub dependencies via executing 'dub list-installed'", ex);
                }
            }

            prj.DubReferences.FireUpdate();
        }
예제 #30
0
파일: DubSdl.cs 프로젝트: aBothe/Mono-D
        void InterpretGlobalProperty(SDLDeclaration decl, DubProject target)
        {
            switch (decl.Name.ToLower())
            {
                case "displayname":
                    target.Name = ExtractFirstAttribute(decl);
                    break;
                case "name":
                    target.packageName = ExtractFirstAttribute(decl);
                    break;
                case "description":
                    target.Description = ExtractFirstAttribute(decl);
                    break;
                case "homepage":
                    target.Homepage = ExtractFirstAttribute(decl);
                    break;
                case "authors":
                    target.Authors.Clear();
                    target.Authors.AddRange(ExtractUnnamedAttributes(decl));
                    break;
                case "copyright":
                    target.Copyright = ExtractFirstAttribute(decl);
                    break;
                case "subpackage":
                    if (decl is SDLObject)
                        base.Load(target, target.ParentSolution, decl, target.FileName);
                    else
                        DubFileManager.Instance.LoadProject(GetDubFilePath(target, ExtractFirstAttribute(decl)), target.ParentSolution, null, DubFileManager.LoadFlags.None, target);
                    break;
                case "configuration":
                    var o = decl as SDLObject;
                    if (o != null)
                    {
                        var c = new DubProjectConfiguration { Name = ExtractFirstAttribute(o) };
                        if (string.IsNullOrEmpty(c.Name))
                            c.Name = "<Undefined>";

                        foreach (var childDecl in o.Children)
                        {
                            InterpretBuildSetting(childDecl, c.BuildSettings);
                        }

                        IntroduceConfiguration(target, c);
                    }
                    break;
                case "buildtype":
                    var name = ExtractFirstAttribute(decl);
                    if (!string.IsNullOrEmpty(name))
                    {
                        target.buildTypes.Add(name);
                    }
                    // Ignore remaining contents as they're not needed by mono-d
                    break;
                default:
                    InterpretBuildSetting(decl, target.CommonBuildSettings);
                    break;
            }
        }
예제 #31
0
        bool TryInterpretDubListOutput(DubProject prj, string outp)
        {
            if (string.IsNullOrEmpty(outp))
                return false;

            bool ret = false;
            foreach (Match match in dubInstalledPackagesOutputRegex.Matches(outp))
            {
                ret = true;
                if (match.Success)
                {
                    foreach (var kv in prj.DubReferences.GetDependencyEntries())
                    {
                        var dep = kv.Value;
                        if (kv.Key == match.Groups["name"].Value && string.IsNullOrWhiteSpace(dep.Path) &&
                            (string.IsNullOrEmpty(dep.Version) || CheckRequiredDepVersion(dep.Version, match.Groups["version"].Value)))
                        {
                            dep.Path = match.Groups["path"].Value.Trim();
                        }
                    }
                }
            }
            return ret;
        }
예제 #32
0
        public void LoadSubProjects(DubProject defaultPackage, IProgressMonitor monitor)
        {
            var sln = defaultPackage.ParentSolution;

            foreach (var dep in defaultPackage.DubReferences)
            {
                var file = DubFileReader.GetDubFilePath(defaultPackage, dep.Path);
                if (String.IsNullOrWhiteSpace(dep.Path) || !CanLoad(file))
                    continue;

                var subProject = supportedDubFileFormats.First((i) => i.CanLoad(file)).Load(file, null, sln);

                if (defaultPackage != subProject)
                {
                    LoadSubProjects (subProject, monitor);
                }
            }
        }
예제 #33
0
파일: DubJson.cs 프로젝트: aBothe/Mono-D
 void TryPopulateProperty(DubProject prj, string propName, JSONThing j, List<Object> subPackages)
 {
     switch (propName)
     {
         case "displayname":
             prj.Name = ExpectJsonStringValue (j, propName);
             break;
         case "name":
             prj.packageName = ExpectJsonStringValue (j, propName);
             break;
         case "description":
             prj.Description = ExpectJsonStringValue (j, propName);
             break;
         case "copyright":
             prj.Copyright = ExpectJsonStringValue (j, propName);
             break;
         case "homepage":
             prj.Homepage = ExpectJsonStringValue (j, propName);
             break;
         case "authors":
             prj.Authors.Clear();
             foreach(var authorValue in ExpectJsonArray(j, propName).Items)
                 prj.Authors.Add(ExpectJsonStringValue(authorValue, propName));
             break;
         case "dependencies":
             DeserializeDubPrjDependencies(ExpectJsonObject(j, propName), prj.CommonBuildSettings);
             break;
         case "configurations":
             foreach(var o in ExpectJsonArray(j, propName).Items)
                 IntroduceConfiguration(prj, DeserializeFromPackageJson(ExpectJsonObject(o, propName)));
             break;
         case "subpackages":
             subPackages.AddRange (ExpectJsonArray(j, propName).Items);
             break;
         case "buildtypes":
             foreach (var kv in ExpectJsonObject(j, propName).Properties)
                 prj.buildTypes.Add (kv.Key);
             break;
         default:
             TryDeserializeBuildSetting(prj.CommonBuildSettings, propName, j);
             break;
     }
 }
예제 #34
0
 protected abstract DubProject ReadSubPackage(DubProject superProject, Object definition);
예제 #35
0
		public void LoadSubProjects(DubProject defaultPackage, IProgressMonitor monitor)
		{
			var sln = defaultPackage.ParentSolution;

			foreach (var dep in defaultPackage.DubReferences)
			{
				var file = DubFileReader.GetDubFilePath(defaultPackage, dep.Path);
				if (String.IsNullOrWhiteSpace(dep.Path) || !CanLoad(file))
					continue;

				var subProject = supportedDubFileFormats.First((i) => i.CanLoad(file)).Load(file, defaultPackage, sln);

				if (sln is DubSolution)
					(sln as DubSolution).AddProject(subProject);
				else if (sln != null)
					sln.RootFolder.AddItem(subProject, false);
				else
					defaultPackage.packagesToAdd.Add(subProject);
			}
		}
예제 #36
0
		protected abstract void Read(DubProject target, Object streamReader);
예제 #37
0
 public DubProject LoadProject(string file, Solution parentSolution, IProgressMonitor monitor, LoadFlags flags = LoadFlags.LoadReferences, DubProject superProject = null)
 {
     if (monitor != null)
     {
         monitor.BeginTask("Load dub project '" + file + "'", 1);
     }
     try
     {
         var prj = supportedDubFileFormats.First((i) => i.CanLoad(file)).Load(file, superProject, parentSolution);
         if (flags.HasFlag(LoadFlags.LoadReferences))
         {
             LoadSubProjects(prj, monitor);
         }
         return(prj);
     }
     finally
     {
         if (monitor != null)
         {
             monitor.EndTask();
         }
     }
 }
예제 #38
0
 public DubProject Load(string file, DubProject superProject, Solution parentSolution)
 {
     using (var fs = new FileStream(file, FileMode.Open))
         using (var sr = new StreamReader(fs))
             return(Load(superProject, parentSolution, sr, file));
 }