#Do policy check when a change is created in gerrit
set -x
+
+SPEC_CHECKER=${WORKSPACE}/spec_checker
+cat > $SPEC_CHECKER <<EOF
+#!/usr/bin/env python
+
+import sys
+import tempfile
+sys.path.insert(1, '/usr/share/rpmlint')
+
+from Filter import setRawOut, printed_messages
+import SpecCheck
+import Pkg
+
+import Filter
+
+def quiet(s):
+ pass
+
+Filter.__print=quiet
+
+spec_file=sys.argv[1]
+
+# the tempfile is designed for python policycheck.py, bash script doesn't use it
+output = tempfile.NamedTemporaryFile()
+setRawOut(output.name)
+
+pkg = Pkg.FakePkg(spec_file)
+check = SpecCheck.SpecCheck()
+check.check_spec(pkg, spec_file)
+pkg.cleanup()
+
+from Filter import _rawout
+_rawout.flush()
+print "rpmlint checked %s: %d errors, %s warnings." % (spec_file, printed_messages["E"], printed_messages["W"])
+for line in output.readlines():
+ line = line.strip().lstrip(spec_file+':').strip()
+ if not line.startswith('W:') and not line.startswith('E:'):
+ line = 'line '+line
+ print '- '+line
+
+EOF
+
+chmod a+x $SPEC_CHECKER
+
#osc wrapper to handle osc random failure
-OSCCMD=/${WORKSPACE}/wrapped_osc
+OSCCMD=${WORKSPACE}/wrapped_osc
cat > $OSCCMD << DATA
#!/usr/bin/python
import sys, locale
done
}
-#Check spec file
-checkspec()
+check_obs_target()
{
- spec_check_msg="Auto Policy Check Result:"
+ if [ ! -n "${OBS_STAGING_PROJECT}" -o "${needSR}" = "true" ]; then
+ if [ -n "${destprj}" ]; then
+ destprj=${destprj}" "
+ fi
+ destprj=${destprj}${OBS_DEST_PROJECT}
- if [ ! ${SPECFILE} ]; then
- if [ -d packaging ]; then
- if [ $(find ./packaging -name "*\.spec" | wc -l) -eq 1 ]; then
- SPECFILE=$(find ./packaging -name "*\.spec" | sed "s/.*packaging\/\(.*\)\.spec/\1/g")
+ #Check whether exist spec file under packaging directory
+ if [ -f ${packagingdir}/${SPECFILE}.spec ]; then
+ #Abstract version from spec file
+ cp ${packagingdir}/${SPECFILE}.spec template.spec
+ egrep "^%prep" template.spec
+ if [ $? -ne 0 ]; then
+ echo "%prep" >> template.spec
fi
- fi
- if [ ! ${SPECFILE} ]; then
- SPECFILE=${PROJECT}
- fi
- fi
- #Check whether exist spec file under packaging directory
- if [ -f packaging/${SPECFILE}.spec ]; then
- #Abstract version from spec file
- cp packaging/${SPECFILE}.spec template.spec
- egrep "^%prep" template.spec
- if [ $? -ne 0 ]; then
- echo "%prep" >> template.spec
- fi
- sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{version}\nexit\n/' template.spec > tmp.spec
- VERSION=$(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3)
- if [ ! ${VERSION} ]; then
- VERSION=$(egrep "Version:[ \t]*" tmp.spec | sed "s/.*Version:[ \t]*\(.*\)$/\1/g")
- fi
- #Abstract project name from spec file
- sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{name}\nexit\n/' template.spec > tmp.spec
- NAME=$(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3)
- if [ ! ${NAME} ]; then
- NAME=$(egrep "Name:[ \t]*" tmp.spec | sed "s/.*Name:[ \t]*\(.*\)$/\1/g")
- fi
- #Abstract source0 tarball name from spec file
- sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{SOURCE0}\nexit\n/' template.spec > tmp.spec
- TARBALL=$(basename $(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3))
- if [ ! ${TARBALL} ]; then
- sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{SOURCE}\nexit\n/' template.spec > tmp.spec
- TARBALL=$(basename $(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3))
- fi
- rm tmp.spec template.spec
+ #Abstract project name from spec file
+ sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{name}\nexit\n/' template.spec > tmp.spec
+ NAME=$(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3)
+ if [ ! -n "${NAME}" ]; then
+ NAME=$(egrep "Name:[ \t]*" tmp.spec | sed "s/.*Name:[ \t]*\(.*\)$/\1/g")
+ fi
+ rm tmp.spec template.spec
- if [ "x${direct_submit}" = "xtrue" -o "x${needSR}" = "xtrue" ]; then
- message="[IMPORTANT NOTICE]:"
$OSCCMD -A ${OBS_API_URL} -c ${OBS_OSCRC_PATH} ls ${OBS_DEST_PROJECT} | egrep "^${NAME}$"
if [ $? -ne 0 ]; then
- message=${message}" [NEW package \"${NAME}\"]"
+ newpkg=true
fi
- message=${message}" This change will be submitted to OBS ${OBS_DEST_PROJECT} project !!!"
fi
+ fi
+ return
+}
- if [ ! "${NAME}" ]; then
- lack_field="%{name}"
- fi
- if [ ! "${VERSION}" ]; then
- lack_field=${lack_field}" %{version}"
+#Check spec file
+check_spec()
+{
+ if [ -d ${packagingdir} ]; then
+ #Check whether exist spec file under packaging directory
+ if [ -f ${packagingdir}/${SPECFILE}.spec ]; then
+ msg=$($SPEC_CHECKER ${packagingdir}/${SPECFILE}.spec)
+ print ${spec_check_msg}
+ else
+ if [ -n "${lack_spec}" ]; then
+ lack_spec=${lack_spec}" "
+ fi
+ lack_spec=${lack_spec}"${SPECFILE}.spec"
fi
- if [ "${lack_field}" ]; then
- spec_check_msg=${spec_check_msg}" Warning: ${SPECFILE}.spec do not contain ${lack_field} variable."
- return
+ else
+ msg="Error: Do not contain packaging directory!"
+ fi
+ if [ -n "${msg}" ]; then
+ if [ -n "${spec_check_msg}" ]; then
+ spec_check_msg=${spec_check_msg}"
+
+"
fi
- else
- spec_check_msg=${spec_check_msg}" Error: NOT Contain spec file under packaging directory!"
- return
+ spec_check_msg=${spec_check_msg}${msg}
+ msg=""
fi
- spec_check_msg=${spec_check_msg}" Passed."
return
}
#Fetch the patch from Gerrit
git fetch ssh://${GERRIT_USERNAME}@${GERRIT_HOSTNAME}:${GERRIT_SSHPORT}/${GERRIT_PROJECT} ${GERRIT_REFSPEC} -t
git checkout FETCH_HEAD
+
+packagingdir=$(readlink packaging)
+if [ ! -n "${packagingdir}" ]; then
+ packagingdir="packaging"
+fi
+
+git show --pretty="format:" --name-only ${GERRIT_PATCHSET_REVISION} | egrep "${packagingdir}/.*\.changes"
+if [ $? -eq 0 ]; then
+ git describe --tags --exact-match ${GERRIT_PATCHSET_REVISION}
+ if [ $? -eq 0 ]; then
+ needSR=true
+ fi
+fi
+
+if [ -d ${packagingdir} ]; then
+ if [ $(find ./${packagingdir} -name "*\.spec" | wc -l) -eq 1 ]; then
+ default_spec=$(find ./${packagingdir} -name "*\.spec" | sed "s/.*${packagingdir}\/\(.*\)\.spec/\1/g")
+ fi
+ if [ ! -n "${default_spec}" ]; then
+ default_spec=${PROJECT}
+ fi
+fi
#Parse OBS target project from git-obs-mapping configuration. Result "@OBS_project#@#@OBS_staging_project#@#@OBS_package" will be recoreded in ${WORKSPACE}/mapping.txt
xml sel -t -m "/mapping/project[@name='${GERRIT_PROJECT}' and @submission='N'] | /mapping/project[@name='/${GERRIT_PROJECT}' and @submission='N'] | /mapping/project[@name='${GERRIT_PROJECT}']/branch[@name='${GERRIT_BRANCH}' and @submission='N'] | /mapping/project[@name='/${GERRIT_PROJECT}']/branch[@name='${GERRIT_BRANCH}' and @submission='N']" -v "@name" -n ${JENKINS_HOME}/git/scm/git-obs-mapping/git-obs-mapping.xml
xml sel -t -m "/mapping/default/path[@name='${PATH_NAME}']/branch[@name='${GERRIT_BRANCH}'] | /mapping/default/path[@name='${PATH_NAME}/']/branch[@name='${GERRIT_BRANCH}']" -v "concat(@OBS_project,'#@#',@OBS_staging_project,'#@#',@OBS_package)" -n ${JENKINS_HOME}/git/scm/git-obs-mapping/git-obs-mapping.xml > ${WORKSPACE}/mapping.txt
if [ $? -eq 0 -a -f ${WORKSPACE}/mapping.txt -a -s ${WORKSPACE}/mapping.txt ]; then
break
- elif [ ! ${PATH_NAME} ]; then
+ elif [ ! -n "${PATH_NAME}" ]; then
break
fi
done
fi
if [ -f ${WORKSPACE}/mapping.txt -a -s ${WORKSPACE}/mapping.txt ]; then
- line=$(head -1 ${WORKSPACE}/mapping.txt)
- if [ ! ${line} ]; then
- continue
- fi
- OBS_DEST_PROJECT=$(echo ${line} | awk -F '#@#' '{print $1}')
- OBS_STAGING_PROJECT=$(echo ${line} | awk -F '#@#' '{print $2}')
- SPECFILE=$(echo ${line} | awk -F '#@#' '{print $3}')
- if [ ! ${OBS_DEST_PROJECT} ]; then
- exit 0
- fi
- if [ ! "${OBS_STAGING_PROJECT}" ]; then
- direct_submit=true
- OBS_STAGING_PROJECT=${OBS_DEST_PROJECT}
- fi
- git show --pretty="format:" --name-only ${GERRIT_PATCHSET_REVISION} | egrep "packaging/.*\.changes"
- if [ $? -eq 0 ]; then
- git describe --tags --exact-match ${GERRIT_PATCHSET_REVISION}
+ for line in $(cat ${WORKSPACE}/mapping.txt)
+ do
+ if [ ! -n "${line}" ]; then
+ continue
+ fi
+ OBS_DEST_PROJECT=$(echo ${line} | awk -F '#@#' '{print $1}')
+ OBS_STAGING_PROJECT=$(echo ${line} | awk -F '#@#' '{print $2}')
+ SPECFILE=$(echo ${line} | awk -F '#@#' '{print $3}')
+ if [ ! -n "${OBS_DEST_PROJECT}" ]; then
+ continue
+ fi
+
+ if [ ! -n "${SPECFILE}" ]; then
+ SPECFILE=${default_spec}
+ fi
+
+ check_obs_target
+
+ #if [ -n "${OBS_STAGING_PROJECT}" -a "${needSR}" != "true" ]; then
+ # git show --pretty="format:" --name-only ${GERRIT_PATCHSET_REVISION} | egrep "${packagingdir}/${SPECFILE}.spec"
+ # if [ $? -ne 0 ]; then
+ # continue
+ # fi
+ #fi
+
+ egrep "${SPECFILE}.spec" ${WORKSPACE}/speclist
if [ $? -eq 0 ]; then
- needSR=true
+ continue
+ else
+ echo "${SPECFILE}.spec" >> ${WORKSPACE}/speclist
fi
- fi
- #Do policy check for specfile
- checkspec
+ #use rpmlint to check specfile
+ check_spec
+ done
else
- message="[IMPORTANT NOTICE]: The project will not be submitted to OBS according configuration in gerrit \"scm/git-obs-mapping\" project. If needed, please modify scm/git-obs-mapping to enable submission to OBS."
+ message="[IMPORTANT NOTICE]: The change for ${GERRIT_BRANCH} branch will not be submitted to OBS according configuration in gerrit \"scm/git-obs-mapping\" project. If needed, please modify scm/git-obs-mapping to enable submission to OBS."
fi
#Post comment back to gerrit
-if [ "${message}" ]; then
- message="- "${message}"\n"
-else
- message="- "
+if [ ! -n "${message}" ]; then
+ message="[IMPORTANT NOTICE]:"
+ if [ -n "${destprj}" ]; then
+ if [ "${newpkg}" = "true" ]; then
+ message=${message}" [New Package]"
+ fi
+ message=${message}" This change will be submitted to OBS ${destprj} project!!!"
+ else
+ message=${message}" This change will not be submitted to OBS. If want to trigger submission to OBS, please make sure this change meets all below criteria.
+- The commit includes changes to the change log file under packaging directory.
+- A tag is created on this commit, and pushed together with the commit to Gerrit at the same time."
+ fi
+fi
+if [ -n "${message}" ]; then
+ ssh -p ${GERRIT_SSHPORT} ${GERRIT_USERNAME}@${GERRIT_HOSTNAME} gerrit review ${GERRIT_CHANGE_NUMBER},${GERRIT_PATCHSET_NUMBER} --message \'"${message}"\'
+fi
+
+if [ -n "${lack_spec}" ]; then
+ spec_check_msg="Error: Not contain ${lack_spec} under packaging directory!
+
+"${spec_check_msg}
fi
-if [ "${spec_check_msg}" ]; then
- message=${message}${spec_check_msg}
+if [ -n "${spec_check_msg}" ]; then
+ ssh -p ${GERRIT_SSHPORT} ${GERRIT_USERNAME}@${GERRIT_HOSTNAME} gerrit review ${GERRIT_CHANGE_NUMBER},${GERRIT_PATCHSET_NUMBER} --message \'"${spec_check_msg}"\'
fi
-ssh -p ${GERRIT_SSHPORT} ${GERRIT_USERNAME}@${GERRIT_HOSTNAME} gerrit review ${GERRIT_CHANGE_NUMBER},${GERRIT_PATCHSET_NUMBER} --message \'"$(echo -e ${message})"\'
#Cleanup and exit
rm -rf ${WORKSPACE}/* -rf
exit 1
else
mysql -h${MYSQL_HOSTNAME} -P${MYSQL_PORT} -u${MYSQL_USERNAME} -p${MYSQL_PASSWORD} -D${MYSQL_DB_NAME} -e "UPDATE ChangeMerged_Event SET state='TRIGGER_FAILURE' WHERE changeNum='${GERRIT_CHANGE_NUMBER}' and patchsetNum='${GERRIT_PATCHSET_NUMBER}'"
- exit 0
+ exit 1
fi
}
(cd ${OBS_PROJECT}/${OBS_PACKAGE} && $OSCCMD ci --skip-validation --force -m "init package")
fi
if [ $? -eq 0 -a -d ${OBS_PROJECT}/${OBS_PACKAGE} ]; then
- if [ "x${direct_submit}" != "xtrue" ]; then
+ if [ "${OBS_STAGING_PROJECT}" != "${OBS_DEST_PROJECT}" ]; then
$OSCCMD ls ${OBS_PROJECT} | egrep "^tmp$"
if [ $? -ne 0 ]; then
(cd ${OBS_PROJECT} && $OSCCMD mkpac tmp)
xml sel -t -m "/mapping/default/path[@name='${PATH_NAME}']/branch[@name='${GERRIT_BRANCH}'] | /mapping/default/path[@name='${PATH_NAME}/']/branch[@name='${GERRIT_BRANCH}']" -v "concat(@OBS_project,'#@#',@OBS_staging_project,'#@#',@OBS_package)" -n ${JENKINS_HOME}/git/scm/git-obs-mapping/git-obs-mapping.xml > ${WORKSPACE}/mapping.txt
if [ $? -eq 0 -a -f ${WORKSPACE}/mapping.txt -a -s ${WORKSPACE}/mapping.txt ]; then
break
- elif [ ! ${PATH_NAME} ]; then
+ elif [ ! -n "${PATH_NAME}" ]; then
end success
fi
done
cd ${WORKSPACE}/${PROJECT}
git checkout origin/${GERRIT_BRANCH}
-COMMITLOG=$(git log -1 --format="%h : %s" ${GERRIT_PATCHSET_REVISION})
-line=$(head -1 ${WORKSPACE}/mapping.txt)
-if [ ! ${line} ]; then
- continue
-fi
-cd ${WORKSPACE}/${PROJECT}
-OBS_DEST_PROJECT=$(echo ${line} | awk -F '#@#' '{print $1}')
-OBS_STAGING_PROJECT=$(echo ${line} | awk -F '#@#' '{print $2}')
-SPECFILE=$(echo ${line} | awk -F '#@#' '{print $3}')
-if [ ! "${OBS_DEST_PROJECT}" ]; then
- end failure
-fi
-if [ ! "${OBS_STAGING_PROJECT}" ]; then
- direct_submit=true
- OBS_STAGING_PROJECT=${OBS_DEST_PROJECT}
+packagingdir=$(readlink packaging)
+if [ ! -n "${packagingdir}" ]; then
+ packagingdir="packaging"
fi
-if [ "x${direct_submit}" != "xtrue" ]; then
- git show --pretty="format:" --name-only ${GERRIT_PATCHSET_REVISION} | egrep "packaging/.*\.changes"
- if [ $? -ne 0 ]; then
- end success
- else
- git describe --tags --exact-match ${GERRIT_PATCHSET_REVISION}
- if [ $? -ne 0 ]; then
- end success
- fi
+
+COMMITLOG=$(git log -1 --format="%h : %s" ${GERRIT_PATCHSET_REVISION})
+
+git show --pretty="format:" --name-only ${GERRIT_PATCHSET_REVISION} | egrep "${packagingdir}/.*\.changes"
+if [ $? -eq 0 ]; then
+ git describe --tags --exact-match ${GERRIT_PATCHSET_REVISION}
+ if [ $? -eq 0 ]; then
+ needSR=true
fi
fi
-#If git-obs-mapping don't indicate use which specfile, use the only one specfile by default
-if [ ! ${SPECFILE} ]; then
- if [ -d packaging ]; then
- if [ $(find ./packaging -name "*\.spec" | wc -l) -eq 1 ]; then
- SPECFILE=$(find ./packaging -name "*\.spec" | sed "s/.*packaging\/\(.*\)\.spec/\1/g")
- fi
- fi
- if [ ! ${SPECFILE} ]; then
- SPECFILE=${PROJECT}
+for line in $(cat ${WORKSPACE}/mapping.txt)
+do
+ if [ ! -n "${line}" ]; then
+ continue
fi
-fi
-#Abstract related info from spec file
-if [ -f packaging/${SPECFILE}.spec ]; then
- cp packaging/${SPECFILE}.spec template.spec
- egrep "^%prep" template.spec
- if [ $? -ne 0 ]; then
- echo "%prep" >> template.spec
+ cd ${WORKSPACE}/${PROJECT}
+ git clean -fd
+
+ OBS_DEST_PROJECT=$(echo ${line} | awk -F '#@#' '{print $1}')
+ OBS_STAGING_PROJECT=$(echo ${line} | awk -F '#@#' '{print $2}')
+ SPECFILE=$(echo ${line} | awk -F '#@#' '{print $3}')
+ if [ ! -n "${OBS_DEST_PROJECT}" ]; then
+ end failure
fi
- sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{version}\nexit\n/' template.spec > tmp.spec
- VERSION=$(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3)
- if [ ! ${VERSION} ]; then
- VERSION=$(egrep "Version:[ \t]*" tmp.spec | sed "s/.*Version:[ \t]*\(.*\)$/\1/g")
+ if [ ! -n "${OBS_STAGING_PROJECT}" ]; then
+ OBS_STAGING_PROJECT=${OBS_DEST_PROJECT}
+ else
+ if [ "x${needSR}" != "xtrue" ]; then
+ continue
+ fi
fi
- sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{name}\nexit\n/' template.spec > tmp.spec
- NAME=$(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3)
- if [ ! ${NAME} ]; then
- NAME=$(egrep "Name:[ \t]*" tmp.spec | sed "s/.*Name:[ \t]*\(.*\)$/\1/g")
+
+ #If git-obs-mapping don't indicate use which specfile, use the only one specfile by default
+ if [ ! -n "${SPECFILE}" ]; then
+ if [ -d ${packagingdir} ]; then
+ if [ $(find ./${packagingdir} -name "*\.spec" | wc -l) -eq 1 ]; then
+ SPECFILE=$(find ./${packagingdir} -name "*\.spec" | sed "s/.*${packagingdir}\/\(.*\)\.spec/\1/g")
+ fi
+ fi
+ if [ ! -n "${SPECFILE}" ]; then
+ SPECFILE=${PROJECT}
+ fi
fi
- sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{SOURCE0}\nexit\n/' template.spec > tmp.spec
- TARBALL=$(basename $(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3))
- if [ ! ${TARBALL} ]; then
- sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{SOURCE}\nexit\n/' template.spec > tmp.spec
+ #Abstract related info from spec file
+ if [ -f ${packagingdir}/${SPECFILE}.spec ]; then
+ cp ${packagingdir}/${SPECFILE}.spec template.spec
+ egrep "^%prep" template.spec
+ if [ $? -ne 0 ]; then
+ echo "%prep" >> template.spec
+ fi
+ sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{version}\nexit\n/' template.spec > tmp.spec
+ VERSION=$(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3)
+ if [ ! -n "${VERSION}" ]; then
+ VERSION=$(egrep "Version:[ \t]*" tmp.spec | sed "s/.*Version:[ \t]*\(.*\)$/\1/g")
+ fi
+ sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{name}\nexit\n/' template.spec > tmp.spec
+ NAME=$(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3)
+ if [ ! -n "${NAME}" ]; then
+ NAME=$(egrep "Name:[ \t]*" tmp.spec | sed "s/.*Name:[ \t]*\(.*\)$/\1/g")
+ fi
+ sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{SOURCE0}\nexit\n/' template.spec > tmp.spec
TARBALL=$(basename $(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3))
- fi
- rm tmp.spec template.spec
- if [ ! ${NAME} -o ! ${VERSION} ]; then
+ if [ ! -n "${TARBALL}" ]; then
+ sed -e 's/BuildArch:.*//g' -e 's/ExclusiveArch:.*//g' -e 's/^%prep/%prep\necho %{SOURCE}\nexit\n/' template.spec > tmp.spec
+ TARBALL=$(basename $(rpmbuild -bp --nodeps --force tmp.spec --define '_topdir .' --define '_builddir .' --define '_sourcedir .' --define '_rpmdir .' --define '_specdir .' --define '_srcrpmdir .' 2>&1 | grep 'echo' | cut -d ' ' -f 3))
+ fi
+ rm tmp.spec template.spec
+ if [ ! -n "${NAME}" -o ! -n "${VERSION}" ]; then
+ end failure
+ fi
+ else
end failure
fi
-else
- end failure
-fi
-#Use gbs to generate tarball
-gbs export --spec=packaging/${SPECFILE}.spec
+ #Use gbs to generate tarball
+ gbs export --spec=${packagingdir}/${SPECFILE}.spec
-cd ${WORKSPACE}
-OBS_PACKAGE=${NAME}
-#Checkout OBS package to local
-obs_checkout ${OBS_STAGING_PROJECT} ${OBS_PACKAGE}
-if [ $? -ne 0 ]; then
- end retry
-fi
-
-#Update files in local OBS package directory
-cd ${WORKSPACE}/${OBS_STAGING_PROJECT}/${OBS_PACKAGE}
-rm ${WORKSPACE}/${OBS_STAGING_PROJECT}/${OBS_PACKAGE}/* -rf
-cp ${WORKSPACE}/${PROJECT}/packaging/* . -rf
-echo -e "Commit: ${COMMITLOG}\nOwner: ${GERRIT_PATCHSET_UPLOADER_NAME} <${GERRIT_PATCHSET_UPLOADER_EMAIL}>\nGerrit URL: ${GERRIT_CHANGE_URL}\nSubmit Time: $(date +"%x %H:%M:%S")" > ${WORKSPACE}/message.txt
-#Submit code to OBS staging project and create a request to merger to Trunk
-retry_num=3
-while [ $retry_num -ne 0 ]
-do
- $OSCCMD addremove &&
- $OSCCMD ci --skip-validation --force -F ${WORKSPACE}/message.txt &&
- if [ "x${direct_submit}" != "xtrue" ]; then
- $OSCCMD request list -U ${OBS_USERNAME} ${OBS_DEST_PROJECT} ${OBS_PACKAGE} > ${WORKSPACE}/request.txt &&
- {
- REQUEST_ID=$(head -1 ${WORKSPACE}/request.txt | awk '{print $1}')
- if [ ${REQUEST_ID} ]; then
- echo -e "" >> ${WORKSPACE}/message.txt
- $OSCCMD request show ${REQUEST_ID} > ${WORKSPACE}/request.txt &&
- awk -v key="Message:" '$0==key{p=1;next}/\State:/{p=0}p' ${WORKSPACE}/request.txt >> ${WORKSPACE}/message.txt &&
- echo "y" | $OSCCMD sr ${OBS_DEST_PROJECT} ${OBS_PACKAGE} -m "$(cat ${WORKSPACE}/message.txt)" --cleanup &&
- break
- else
- $OSCCMD sr ${OBS_DEST_PROJECT} ${OBS_PACKAGE} -m "$(cat ${WORKSPACE}/message.txt)" --cleanup &&
- break
- fi
- }
- else
- break
- fi
- let "retry_num=retry_num-1"
- if [ $retry_num -eq 0 ]; then
+ cd ${WORKSPACE}
+ OBS_PACKAGE=${NAME}
+ #Checkout OBS package to local
+ obs_checkout ${OBS_STAGING_PROJECT} ${OBS_PACKAGE}
+ if [ $? -ne 0 ]; then
end retry
fi
+
+ #Update files in local OBS package directory
+ cd ${WORKSPACE}/${OBS_STAGING_PROJECT}/${OBS_PACKAGE}
+ rm ${WORKSPACE}/${OBS_STAGING_PROJECT}/${OBS_PACKAGE}/* -rf
+ cp ${WORKSPACE}/${PROJECT}/${packagingdir}/* ${WORKSPACE}/${OBS_STAGING_PROJECT}/${OBS_PACKAGE} -rf
+ echo -e "Commit: ${COMMITLOG}\nOwner: ${GERRIT_PATCHSET_UPLOADER_NAME} <${GERRIT_PATCHSET_UPLOADER_EMAIL}>\nGerrit URL: ${GERRIT_CHANGE_URL}\nSubmit Time: $(date +"%x %H:%M:%S")" > ${WORKSPACE}/message.txt
+ #Submit code to OBS staging project and create a request to merger to Trunk
+ retry_num=3
+ while [ $retry_num -ne 0 ]
+ do
+ $OSCCMD addremove &&
+ $OSCCMD ci --skip-validation --force -F ${WORKSPACE}/message.txt &&
+ if [ "x${needSR}" = "xtrue" -a "x${OBS_DEST_PROJECT}" != "x${OBS_STAGING_PROJECT}" ]; then
+ $OSCCMD request list -U ${OBS_USERNAME} ${OBS_DEST_PROJECT} ${OBS_PACKAGE} > ${WORKSPACE}/request.txt &&
+ {
+ REQUEST_ID=$(head -1 ${WORKSPACE}/request.txt | awk '{print $1}')
+ if [ -n "${REQUEST_ID}" ]; then
+ echo -e "" >> ${WORKSPACE}/message.txt
+ $OSCCMD request show ${REQUEST_ID} > ${WORKSPACE}/request.txt &&
+ awk -v key="Message:" '$0==key{p=1;next}/\State:/{p=0}p' ${WORKSPACE}/request.txt >> ${WORKSPACE}/message.txt &&
+ echo "y" | $OSCCMD sr ${OBS_DEST_PROJECT} ${OBS_PACKAGE} -m "$(cat ${WORKSPACE}/message.txt)" --cleanup &&
+ break
+ else
+ $OSCCMD sr ${OBS_DEST_PROJECT} ${OBS_PACKAGE} -m "$(cat ${WORKSPACE}/message.txt)" --cleanup &&
+ break
+ fi
+ }
+ else
+ break
+ fi
+ let "retry_num=retry_num-1"
+ if [ $retry_num -eq 0 ]; then
+ end retry
+ fi
+ done
done
end success