示例#1
0
        private bool InstallFromCache(PackageWorkingInstallFromCache installFromCache)
        {
            var mode             = installFromCache.Mode;
            var install          = installFromCache.Install;
            var packageDirectory = new DirectoryInfo(installFromCache.PackagePath);
            var path             = packageDirectory.FullName.RemoveStart(nodeModulesPath + @"\");

            try
            {
                var elapsed = TimeSpan.MinValue;

                SkipPath(packageDirectory.Name);
                AddInstallStatus(installFromCache, StatusMode.Normal, $"Installing '{ install }' from cache");

                using (this.StartStopwatch((s) => elapsed = s))
                {
                    installFromCache.InstallPackage();

                    AddPathStatus(path, CacheStatusType.PathProcessed);
                }

                AddInstallStatus(installFromCache, StatusMode.Success, "Install of '{0}' from cache took {1} seconds", path, elapsed.ToDecimalSeconds());
                AddPackageCacheStatus(path, install, CacheStatusType.PathCopiedFromCache);
            }
            catch (Exception ex)
            {
                AddInstallStatus(installFromCache, StatusMode.Error, "Error installing '{0}', ", ex.Message);
                AddPackageCacheStatus(path, install, ex);

                DebugUtils.Break();
                return(false);
            }

            return(true);
        }
示例#2
0
 public AddInstallStatusEventArgs(PackageWorkingInstallFromCache installFromCache, StatusMode mode, string status, params object[] args)
 {
     this.InstallFromCache = installFromCache;
     this.StatusMode       = mode;
     this.Status           = status;
     this.Args             = args;
 }
示例#3
0
        private void AddInstallStatus(PackageWorkingInstallFromCache installFromCache, StatusMode mode, string status, params object[] args)
        {
            using (lockObject.Lock())
            {
                if (args.Length > 0)
                {
                    status = string.Format(status, args);
                }

                installFromCache.InstallStatusList.Add(installFromCache.CreateStatus(status, mode));
            }
        }
        private void Add(string install, PackageWorkingInstallFromCache workingInstallFromCache)
        {
            this.DependenciesFromCacheToProcess.AddToDictionaryIfNotExist(install, workingInstallFromCache);

            if (this.IsRoot)
            {
                this.AllDependenciesToProcess.AddToDictionaryIfNotExist(install, workingInstallFromCache);
            }
            else
            {
                OnAddToAllDependencies.Raise(this, new KeyValuePair <string, PackageWorkingInstallFromCache>(install, workingInstallFromCache));
            }
        }
        private void InstallFromCache(string name, NpmVersion installVersion, DirectoryInfo cacheDirectory, DirectoryInfo packageDirectory, bool executeActions = true, bool executeDirectly = false)
        {
            var install = name + "@" + installVersion.Version;

            if (!this.ContainsKey(install))
            {
                var workingInstallFromCache = new PackageWorkingInstallFromCache(this.Mode, install, cacheDirectory.FullName, packageDirectory.FullName, this.PackageModules, this);

                HandleEvents(workingInstallFromCache);

                this.Add(install, workingInstallFromCache);

                workingInstallFromCache.InstallPackage(executeActions, executeDirectly);
            }
        }
        private void HandleEvents(PackageWorkingInstallFromCache workingInstallFromCache)
        {
            workingInstallFromCache.OnUpdateCacheStatus += (sender, e) =>
            {
                internalOnUpdateCacheStatus(sender, e);
            };

            workingInstallFromCache.OnQueueInstallAction += (sender, e) =>
            {
                if (this.IsRoot)
                {
                    this.InstallActionsQueue.Enqueue(e.Value);
                }
                else
                {
                    OnQueueInstallAction.Raise(sender, e.Value);
                }
            };

            workingInstallFromCache.OnAddToAllDependencies += (sender, e) =>
            {
                var pair = e.Value;

                if (this.IsRoot)
                {
                    this.AllDependenciesToProcess.Add(pair.Key, pair.Value);
                }
                else
                {
                    OnAddToAllDependencies.Raise(sender, pair);
                }
            };

            workingInstallFromCache.OnAddInstallStatus += (sender, e) =>
            {
                if (this.IsRoot)
                {
                    this.AddInstallStatus(sender, e.InstallFromCache, e.StatusMode, e.Status, e.Args);
                }
                else
                {
                    this.AddInstallStatus(e.InstallFromCache, e.StatusMode, e.Status, e.Args);
                }
            };
        }
示例#7
0
        public bool QueueInstallFromCache(string mode, string install, string cachePath, string packagePath)
        {
            using (lockObject.Lock())
            {
                if (NO_INSTALL_FROM_CACHE)
                {
                    return(false);
                }
                else
                {
                    if (!installsFromCacheToProcess.ContainsKey(install))
                    {
                        var workingInstallFromCache = new PackageWorkingInstallFromCache(mode, install, cachePath, packagePath, packageModules);

                        if (installsFromCacheStatus == null)
                        {
                            installsFromCacheStatus = new PackageInstallsFromCacheStatus("Queueing installs from cache");
                        }

                        if (!workingInstallFromCache.IsMissingPeer)
                        {
                            workingInstallFromCache.OnUpdateCacheStatus += WorkingInstallFromCache_OnUpdateCacheStatus;
                            workingInstallFromCache.OnAddInstallStatus  += WorkingInstallFromCache_OnAddInstallStatus;

                            this.NothingToPoll = false;

                            this.WriteLineNoLock("Adding '{0}' to install from cache", install);

                            installsFromCacheToProcess.AddToDictionaryIfNotExist(install, workingInstallFromCache);
                        }
                    }
                }

                return(true);
            }
        }
        public PackageWorkingInstallFromCache(string mode, string install, string cachePath, string packagePath, NpmNodeModules packageModules, PackageWorkingInstallFromCache parent = null)
        {
            var packageDirectory = new DirectoryInfo(packagePath);
            var cacheDirectory   = new DirectoryInfo(cachePath);

            this.Mode                = mode;
            this.Install             = install;
            this.CachePath           = cachePath;
            this.PackagePath         = packagePath;
            this.InstallStatusList   = new List <PackageInstallFromCacheStatus>();
            this.InstallActionsQueue = new Queue <InstallAction>();
            this.PackageModules      = packageModules;

            this.Parent = parent;

            nodeModulesPath = packageDirectory.GetParentPathToFolder("node_modules", true);
            cachePathRoot   = cacheDirectory.GetParentPathToFolder("cache", true);

            this.DependenciesFromCacheToProcess = new Dictionary <string, PackageWorkingInstallFromCache>();
            this.AllDependenciesToProcess       = new Dictionary <string, PackageWorkingInstallFromCache>();
        }
        private void AddInstallStatus(PackageWorkingInstallFromCache installFromCache, StatusMode mode, string status, params object[] args)
        {
            var installStatusEventArgs = new AddInstallStatusEventArgs(installFromCache, mode, status, args);

            OnAddInstallStatus(this, installStatusEventArgs);
        }