Date: Fri, 28 Feb 2014 19:13:25 +0400 From: "Andrey V. Elsukov" <bu7cher@yandex.ru> To: freebsd-pkg@FreeBSD.org Subject: [patch] use custom git repo Message-ID: <5310A795.2050309@yandex.ru>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Hi,
I use this patch to be able clone and pull sources and ports from our
own repos.
For example:
# poudriere jail -c -j test -v 10.0-STABLE -m git -g
"git://github.com/freebsd/freebsd.git -b stable/10"
--
WBR, Andrey V. Elsukov
[-- Attachment #2 --]
--- poudriere.orig/common.sh 2014-02-26 18:47:40.000000000 +0400
+++ poudriere/common.sh 2014-02-28 19:06:25.629837798 +0400
@@ -2965,7 +2965,6 @@
fi
: ${SVN_HOST="svn.FreeBSD.org"}
-: ${GIT_URL="git://github.com/freebsd/freebsd-ports.git"}
: ${FREEBSD_HOST="http://ftp.FreeBSD.org"}
if [ -z "${NO_ZFS}" ]; then
: ${ZROOTFS="/poudriere"}
--- poudriere.orig/jail.sh 2014-02-26 18:47:40.000000000 +0400
+++ poudriere/jail.sh 2014-02-28 19:05:18.000000000 +0400
@@ -48,13 +48,14 @@
-M mountpoint -- mountpoint
-m method -- When used with -c, overrides the method to use by default.
Could also be \"http\", \"svn\", \"svn+http\",
- \"svn+https\", \"svn+file\", \"svn+ssh\", \"csup\".
+ \"svn+https\", \"svn+file\", \"svn+ssh\", \"csup\", \"git\".
Please note that with svn and csup the world will be
built. Note that building from sources can use src.conf
and jail-src.conf from /usr/local/etc/poudriere.d/.
Other possible method are: \"allbsd\" retrieve a
snapshot from allbsd.org's website or \"ftp-archive\"
for old releases that're no longer available on \"ftp\".
+ -g args -- git arguments for cloning.
-p tree -- Specify which ports tree the jail to start/stop with
-P patch -- Specify a patch file to apply to the source before committing.
-t version -- version to upgrade to
@@ -162,6 +163,15 @@
yes | make -C ${JAILMNT}/usr/src delete-old delete-old-libs DESTDIR=${JAILMNT}
markfs clean ${JAILMNT}
;;
+ git)
+ install_from_git
+ eval `grep "^[RB][A-Z]*=" ${JAILMNT}/usr/src/sys/conf/newvers.sh `
+ RELEASE=${REVISION}-${BRANCH}
+ jset ${JAILNAME} version ${RELEASE}
+ update_version ${RELEASE}
+ yes | make -C ${JAILMNT}/usr/src delete-old delete-old-libs DESTDIR=${JAILMNT}
+ markfs clean ${JAILMNT}
+ ;;
allbsd|gjb)
err 1 "Upgrade is not supported with allbsd, to upgrade, please delete and recreate the jail"
;;
@@ -249,6 +259,31 @@
build_and_install_world
}
+install_from_git() {
+ local UPDATE=0
+ local proto
+ [ -d ${JAILMNT}/usr/src ] && UPDATE=1
+ mkdir -p ${JAILMNT}/usr/src
+ GIT_URL=$(jget ${JAILNAME} url)
+
+ if [ ${UPDATE} -eq 0 ]; then
+ test -z "${GIT_URL}" && err 1 "git repo isn't specified"
+ msg_n "Cloning the sources from git..."
+ git clone ${GIT_URL} ${JAILMNT}/usr/src || err 1 " fail"
+ echo " done"
+ if [ -n "${SRCPATCHFILE}" ]; then
+ msg_n "Patching the sources with ${SRCPATCHFILE}"
+ patch -d ${JAILMNT}/usr/src < ${SRCPATCHFILE} || err 1 " fail"
+ echo done
+ fi
+ else
+ msg_n "Pulling the sources from git..."
+ cd ${JAILMNT}/usr/src && git pull
+ echo " done"
+ fi
+ build_and_install_world
+}
+
install_from_csup() {
local UPDATE=0
[ -d ${JAILMNT}/usr/src ] && UPDATE=1
@@ -422,6 +457,9 @@
esac
FCT=install_from_svn
;;
+ git)
+ FCT=install_from_git
+ ;;
csup)
case ${VERSION} in
.)
@@ -450,6 +488,9 @@
jset ${JAILNAME} version ${VERSION}
jset ${JAILNAME} arch ${ARCH}
jset ${JAILNAME} mnt ${JAILMNT}
+ if [ "${METHOD}" = "git" ]; then
+ jset ${JAILNAME} url ${GIT_URL}
+ fi
# Wrap the jail creation in a special cleanup hook that will remove the jail
# if any error is encountered
@@ -509,7 +550,7 @@
TMPFS_ALL=0
-while getopts "J:j:v:a:z:m:n:f:M:sdklqcip:ut:z:P:" FLAG; do
+while getopts "J:j:g:v:a:z:m:n:f:M:sdklqcip:ut:z:P:" FLAG; do
case "${FLAG}" in
j)
JAILNAME=${OPTARG}
@@ -528,6 +569,9 @@
m)
METHOD=${OPTARG}
;;
+ g)
+ GIT_URL="${OPTARG}"
+ ;;
f)
JAILFS=${OPTARG}
;;
--- poudriere.orig/ports.sh 2014-02-26 18:47:40.000000000 +0400
+++ poudriere/ports.sh 2014-02-28 19:05:15.000000000 +0400
@@ -54,12 +54,15 @@
tree by default it is portsnap, possible usage are
\"portsnap\", \"svn\", \"svn+http\", \"svn+https\",
\"svn+file\", \"svn+ssh\", \"git\"
+ -g args -- git arguments for cloning.
-B branch -- Which branch to use for SVN method (default: head)
"
exit 1
}
+: ${GIT_URL="git://github.com/freebsd/freebsd-ports.git"}
+
CREATE=0
FAKE=0
UPDATE=0
@@ -68,7 +71,7 @@
QUIET=0
VERBOSE=0
BRANCH=head
-while getopts "B:cFudlp:qf:M:m:v" FLAG; do
+while getopts "B:g:cFudlp:qf:M:m:v" FLAG; do
case "${FLAG}" in
B)
BRANCH="${OPTARG}"
@@ -76,6 +79,9 @@
c)
CREATE=1
;;
+ g)
+ GIT_URL="${OPTARG}"
+ ;;
F)
FAKE=1
;;
@@ -184,6 +190,7 @@
git)
msg "Cloning the ports tree"
git clone ${GIT_URL} ${PTMNT} || err 1 " fail"
+ pset ${PTNAME} url ${GIT_URL}
echo " done"
;;
esac
--- /usr/local/bin/poudriere 2014-02-26 18:47:40.615354000 +0400
+++ poudriere 2014-02-28 19:04:58.229839491 +0400
@@ -74,7 +74,7 @@ shift
case ${CMD} in
jail|jails)
- exec env -i PATH=${PATH} POUDRIERE_VERSION="${POUDRIERE_VERSION}" /bin/sh ${SETX} ${POUDRIEREPREFIX}/jail.sh $@
+ exec env -i PATH=${PATH} POUDRIERE_VERSION="${POUDRIERE_VERSION}" /bin/sh ${SETX} ${POUDRIEREPREFIX}/jail.sh "$@"
;;
testport)
exec env -i PATH=${PATH} POUDRIERE_VERSION="${POUDRIERE_VERSION}" SAVED_TERM=${SAVED_TERM} /bin/sh ${SETX} ${POUDRIEREPREFIX}/testport.sh $@
@@ -86,7 +86,7 @@ case ${CMD} in
exec env -i PATH=${PATH} POUDRIERE_VERSION="${POUDRIERE_VERSION}" /bin/sh ${SETX} ${POUDRIEREPREFIX}/distclean.sh $@
;;
ports)
- exec env -i PATH=${PATH} POUDRIERE_VERSION="${POUDRIERE_VERSION}" /bin/sh ${SETX} ${POUDRIEREPREFIX}/ports.sh $@
+ exec env -i PATH=${PATH} POUDRIERE_VERSION="${POUDRIERE_VERSION}" /bin/sh ${SETX} ${POUDRIEREPREFIX}/ports.sh "$@"
;;
queue)
exec env -i PATH=${PATH} POUDRIERE_VERSION="${POUDRIERE_VERSION}" /bin/sh ${SETX} ${POUDRIEREPREFIX}/queue.sh $@
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5310A795.2050309>
