private static void SolveR(Package e,ref List<Package> l) { var v = from p in Settings.Installed from q in p.Depend where q == e.Name select p; foreach(Package s in v) { if(!l.Contains(s)) { l.Add(s); } SolveR(s,ref l); } }
/// <summary> /// Solve the dependence of package. /// </summary> /// <returns> /// Packages that is needed to install. /// </returns> /// <param name='r'> /// A package that you want to solve its dependence. /// </param> /// <exception cref='GuignolException'> /// Is thrown when some exception happens in solving dependence. /// </exception> public static Package[] SolveDepend(Package r,SolveType t) { try { var ret = new List<Package>(); ret.Add(r); if(t == SolveType.Obverse)Solve(r,ref ret); else SolveR(r,ref ret); return ret.ToArray(); } catch (Exception) { throw new GuignolException( "Some of Dependences isn't found from database." + "Please update repository datas and retry later."); } }
private static void Solve(Package e,ref List<Package> l) { foreach(string s in e.Depend) { var ad=new List<Package>(Settings.PackList).Find(y=>y.Name==s); if(!l.Contains(ad)) { l.Add(ad); } Solve(ad,ref l); } }
public static void Add(Package p) { var l = new List<string>(Settings.AutoExec); l.Add(p.Name); Settings.AutoExec = l.ToArray(); }