USES=mono: improve makenupkg
- add support for v3 of the nuget API - switch to using v3 for NUGET [1] - rewrite makenupkg to avoid full feed list [2] - change fetch group to allow "+" in package name/version [1] NUGET redirects to the source under the v2 API, however this breaks `makenupkg` as curl fails to follow the redirect when getting the header. [2] Previously, makenupkg got the complete list of packages (and versions) a feed. However, for some feeds this takes a very really long time (slow server response rate). To avoid this, rather check if the package is available (without downloading it).
This commit is contained in:
@@ -102,7 +102,8 @@ _NUGET_PACKAGEDIR= ${WRKDIR}/.nuget/packages
|
||||
NUGET_PACKAGEDIR?= ${WRKSRC}/packages
|
||||
NUGET_LAYOUT?= legacy
|
||||
NUGET_FEEDS?= NUGET
|
||||
NUGET_URL?= https://www.nuget.org/api/v2/
|
||||
NUGET_URL?= https://api.nuget.org/v3-flatcontainer/
|
||||
NUGET_VERSION?= v3
|
||||
|
||||
PAKET_PACKAGEDIR?=
|
||||
PAKET_DEPENDS?=
|
||||
@@ -112,19 +113,25 @@ NUGET_DEPENDS?= ${PAKET_DEPENDS}
|
||||
${feed}_DEPENDS?=
|
||||
${feed}_FILE?= ${PKGDIR}/nupkg-${feed:tl}
|
||||
${feed}_URL?= https://dotnet.myget.org/F/${feed:tl:S/_/-/g}/api/v2/
|
||||
${feed}_VERSION?= v2
|
||||
. if exists(${${feed}_FILE})
|
||||
${feed}_EXTRA!= ${CAT} ${${feed}_FILE}
|
||||
. else
|
||||
${feed}_EXTRA=
|
||||
. endif
|
||||
MAKENUPKG_ENV+= ${feed:tl}_URL="${${feed}_URL}" ${feed:tl}_VERSION="${${feed}_VERSION}"
|
||||
. for depend in ${${feed}_DEPENDS} ${${feed}_EXTRA}
|
||||
. if empty(_NUGET_DEPENDS:M${depend})
|
||||
id= ${depend:C/=.*$//}
|
||||
version= ${depend:C/^.*=//}
|
||||
group= nuget_${depend:S/.//g:S/-//g:S/=//g}
|
||||
group= nuget_${depend:C/[.+=-]//g}
|
||||
nupkg= ${id:tl}.${version}.nupkg
|
||||
DISTFILES_${group}:= ${nupkg}:${group}
|
||||
. if ${${feed}_VERSION} == v2
|
||||
MASTER_SITES_${group}:= ${${feed}_URL}package/${id}/${version}?dummy=/:${group}
|
||||
. else
|
||||
MASTER_SITES_${group}:= ${${feed}_URL}${id:tl}/${version}/:${group}
|
||||
. endif
|
||||
NUGET_NUPKGS_${group}:= ${nupkg}:${depend}
|
||||
NUPKGS_${id}:= ${NUPKGS_${id}} ${version}
|
||||
|
||||
@@ -202,29 +209,26 @@ makenuget: patch
|
||||
-e '$$!s|$$| \\|g'
|
||||
|
||||
makenupkg:
|
||||
@[ -f ${NUGET_EXE} ] || fetch -o ${NUGET_EXE} ${NUGET_LATEST_URL}
|
||||
.for feed in ${NUGET_FEEDS}
|
||||
@[ -f ${WRKDIR}/.nupkg-${feed:tl} -o ${feed} = NUGET ] || mono ${NUGET_EXE} list -AllVersions -IncludeDelisted -PreRelease -Source ${${feed}_URL} | ${SED} 's/ /=/g' > ${WRKDIR}/.nupkg-${feed:tl}
|
||||
@${RM} ${WRKDIR}/nupkg-${feed:tl}
|
||||
.endfor
|
||||
@${RM} ${WRKDIR}/nupkg-*
|
||||
@for nuspec in `${FIND} ${_NUGET_PACKAGEDIR} -name '*.nuspec'`; do \
|
||||
name="`${SED} -nE 's|.*<id>(.*)</id>.*|\1|p' $$nuspec`"; \
|
||||
version="`${SED} -nE 's|.*<version>(.*)</version>.*|\1|p' $$nuspec`"; \
|
||||
${ECHO} $$name=$$version; \
|
||||
done | ${SORT} -u > ${WRKDIR}/.nupkgs
|
||||
@${CAT} ${WRKDIR}/.nupkgs | while read nupkg; do \
|
||||
default=no; \
|
||||
for feed in ${NUGET_FEEDS:tl}; do \
|
||||
if [ $$feed = nuget ]; then \
|
||||
default=yes; \
|
||||
elif ${GREP} -q "^$$nupkg\$$" ${WRKDIR}/.nupkg-$$feed; then \
|
||||
${ECHO} $$nupkg >> ${WRKDIR}/nupkg-$$feed; \
|
||||
default=na; \
|
||||
echo $$name=$$version ; \
|
||||
done | ${SORT} -u | ${SETENV} ${MAKENUPKG_ENV} ${XARGS} -n1 sh -c ' \
|
||||
for feed in ${NUGET_FEEDS:MNUGET:tl} ${NUGET_FEEDS:NNUGET:tl}; do \
|
||||
if eval [ "\$${$${feed}_VERSION}" = v2 ]; then \
|
||||
eval url="\$${$${feed}_URL}package/$${0%%=*}/$${0##*=}"; \
|
||||
else \
|
||||
eval url="\$${$${feed}_URL}$${0%%=*}/$${0##*=}/$${0%%=*}.$${0##*=}.nupkg"; \
|
||||
fi; \
|
||||
if curl --output /dev/null --silent --head --fail $$url; then\
|
||||
${ECHO} $$0 >> ${WRKDIR}/nupkg-$$feed; \
|
||||
found=yes; \
|
||||
break; \
|
||||
fi; \
|
||||
done; \
|
||||
if [ $$default = yes ]; then \
|
||||
${ECHO} $$nupkg >> ${WRKDIR}/nupkg-nuget; \
|
||||
fi; \
|
||||
done
|
||||
if [ -z "$$found" ]; then \
|
||||
echo "$$0: no feed found"; \
|
||||
exit 1; \
|
||||
fi'
|
||||
.endif
|
||||
|
||||
Reference in New Issue
Block a user