/** * Imports versions from GitHub repository. * * @param \NetteAddons\Model\Addon * @return \NetteAddons\Model\AddonVersion[] * @throws \NetteAddons\IOException */ public function importVersions(Addon $addon) { $versions = array(); foreach ($this->getVersions() as $v => $hash) { $composer = $this->getComposerJson($hash); $version = new AddonVersion(); $version->addon = $addon; // version if ($composer && isset($composer->version)) { $version->version = $composer->version; // warning: multiple tags may have the same composer version } else { $version->version = $v; } // license if ($composer && isset($composer->license)) { $version->license = implode(', ', (array) $composer->license); } else { $version->license = $addon->defaultLicense; } // package links if ($composer) { foreach (AddonVersion::getLinkTypes() as $key => $type) { if (!empty($composer->{$type})) { $version->{$key} = get_object_vars($composer->{$type}); } } } // time if ($composer && isset($composer->time)) { $version->updatedAt = new \DateTime($composer->time); } else { $version->updatedAt = new \DateTime($this->repository->getCommit($hash)->commit->author->date); } // dist $version->distType = 'zip'; $version->distUrl = $this->repository->getArchiveLink('zip', $hash); // source $version->sourceType = 'git'; $version->sourceUrl = $addon->repository; $version->sourceReference = $hash; // composer.json $version->composerJson = Utils\Composer::createComposerJson($version, $composer); $versions[$version->version] = $version; // ensures that versions are unique } return array_values($versions); }
/** * Creates new addon version from values and adds it to addon. * * @param \NetteAddons\Model\Addon * @param array * @param \Nette\Security\IIdentity * @param \NetteAddons\Model\Utils\VersionParser * @return \NetteAddons\Model\AddonVersion * @throws \NetteAddons\InvalidArgumentException * @throws \NetteAddons\IOException */ public function addVersionFromValues(Addon $addon, $values, IIdentity $owner, VersionParser $versionParser) { if (!$values->license) { throw new \NetteAddons\InvalidArgumentException("License is mandatory."); } if (!$values->version) { throw new \NetteAddons\InvalidArgumentException("Version is mandatory."); } $version = new AddonVersion(); $version->addon = $addon; $version->version = $versionParser->parseTag($values->version); $version->license = is_array($values->license) ? implode(', ', $values->license) : $values->license; $version->distType = 'zip'; $version->distUrl = $values->archiveLink; $version->composerJson = Composer::createComposerJson($version); $version->composerJson->authors = array((object) array('name' => $owner->realname, 'email' => $owner->email)); $addon->versions[] = $version; return $version; }