예제 #1
0
        public void PushPackage(string packageFileName, Stream packageStream)
        {
            packageFileName = PackageNameUtility.NormalizeFileName(packageFileName);

            var packageFile = _directory.GetFile(packageFileName);

            using (var destinationStream = packageFile.OpenWrite())
                packageStream.CopyTo(destinationStream);

#pragma warning disable 612,618
            var zipPackage = new ZipFilePackage(packageFile);
            IndexDocument.Document.Root.Add(
                new XElement("wrap",
                             new XAttribute("name", zipPackage.Name),
                             new XAttribute("version", zipPackage.Version),
                             new XAttribute("semantic-version", zipPackage.SemanticVersion),
                             new XElement("link",
                                          new XAttribute("rel", "package"),
                                          new XAttribute("href", packageFile.Name)),
                             zipPackage.Dependencies.Select(x => new XElement("depends", x.ToString()))
                             ));
#pragma warning restore 612,618

            SaveIndex(IndexDocument);

            return;
        }
예제 #2
0
        void Publish(IPackageRepository source, string packageFileName, Stream packageStream)
        {
            var name    = PackageNameUtility.GetName(packageFileName);
            var version = PackageNameUtility.GetVersion(packageFileName);

            if (Packages.Any(x => x.Name.EqualsNoCase(name) && x.SemanticVersion == version))
            {
                throw new InvalidOperationException("Package already exists in repository.");
            }

            var inMemoryFile = new InMemoryFile("c:\\" + Guid.NewGuid());

            using (var stream = inMemoryFile.OpenWrite())
                IO.StreamExtensions.CopyTo(packageStream, stream);

            var tempFolder = new ZipFilePackage(inMemoryFile);

            var package = new InMemoryPackage(tempFolder)
            {
                Source = this
            };

            Packages.Add(package);
        }
예제 #3
0
 public override void when_creating_package()
 {
     Packager.NewFromFiles(_packageFile, _content);
     _package = new ZipFilePackage(_packageFile);
 }
예제 #4
0
        IEnumerable <ICommandOutput> ValidateInputs()
        {
            // TODO: HACK HACK HACK
            var namedRepository = Remotes.PublishRepositories(Remote).SelectMany(_ => _).FirstOrDefault();

            if (namedRepository == null)
            {
                yield return(new UnknownRemoteName(Remote));

                foreach (var _ in HintRemoteRepositories())
                {
                    yield return(_);
                }
                yield break;
            }

            if ((Username != null && Password == null) || (Username == null && Password != null))
            {
                yield return(new IncompleteCredentials());

                yield break;
            }

            bool hasAuth = Username != null && Password != null;

            if (hasAuth)
            {
                _credentials = new NetworkCredential(Username, Password);
            }
            _authenticationSupport = namedRepository.Feature <ISupportAuthentication>();
            if (hasAuth && _authenticationSupport == null)
            {
                yield return(new RemoteAuthenticatioNotSupported(namedRepository));

                yield break;
            }

            _authenticationSupport = _authenticationSupport ?? new NullAuthentication();

            //_repositories = namedRepository.
            _remoteRepository = namedRepository;
            var publishingRepo = _remoteRepository.Feature <ISupportPublishing>();

            if (publishingRepo == null)
            {
                yield return(new Error("Repository '{0}' doesn't support publishing.", namedRepository.Name));

                yield break;
            }
            if (Path != null)
            {
                var packageFile = FileSystem.GetFile(Path);
                if (!packageFile.Exists)
                {
                    yield return(new FileNotFound(Path));

                    yield break;
                }
                _packageStream   = packageFile.OpenRead;
                _packageFileName = packageFile.Name;
                // TODO: This looks iffy at best
                var package = new ZipFilePackage(packageFile);
                _packageName    = package.Name;
                _packageVersion = package.SemanticVersion;
            }
            else if (Name != null)
            {
                // get latest version of the Named package
                if (!HostEnvironment.CurrentDirectoryRepository.PackagesByName.Contains(Name))
                {
                    yield return(new Error("No package named '{0}' was found.", Name));

                    yield break;
                }
                var packageToCopy = HostEnvironment.CurrentDirectoryRepository.PackagesByName[Name].OrderByDescending(x => x.SemanticVersion).First();
                _packageStream   = () => packageToCopy.Load().OpenStream();
                _packageFileName = packageToCopy.FullName + ".wrap";
                _packageName     = packageToCopy.Name;
                _packageVersion  = packageToCopy.SemanticVersion;
            }
            else
            {
                yield return(new Error("Please specify either a file path using the -Path input, or a name using -Name."));
            }
        }