diff options
author | Miroslav Rezanina <mrezanin@redhat.com> | 2016-02-22 14:31:53 +0100 |
---|---|---|
committer | Miroslav Rezanina <mrezanin@redhat.com> | 2017-03-06 10:48:03 +0100 |
commit | 9059912187fb5b9472a220b31e577fcdc303dd89 (patch) | |
tree | 1f07e46ff68035ebda7dda47fb8efbe6539eb398 | |
parent | fa8bc7f928ac25f23532afc8beb2073efc8fb063 (diff) | |
download | dtc-9059912187fb5b9472a220b31e577fcdc303dd89.zip dtc-9059912187fb5b9472a220b31e577fcdc303dd89.tar.gz dtc-9059912187fb5b9472a220b31e577fcdc303dd89.tar.bz2 |
Add redhat directory
-rw-r--r-- | .gitpublish | 8 | ||||
-rw-r--r-- | redhat/.gitignore | 1 | ||||
-rw-r--r-- | redhat/Makefile | 67 | ||||
-rw-r--r-- | redhat/Makefile.common | 35 | ||||
-rw-r--r-- | redhat/dtc.spec.template | 81 | ||||
-rw-r--r-- | redhat/rpmbuild/BUILD/.gitignore | 2 | ||||
-rw-r--r-- | redhat/rpmbuild/RPMS/.gitignore | 2 | ||||
-rw-r--r-- | redhat/rpmbuild/SOURCES/.gitignore | 2 | ||||
-rw-r--r-- | redhat/rpmbuild/SPECS/.gitignore | 2 | ||||
-rw-r--r-- | redhat/rpmbuild/SRPMS/.gitignore | 2 | ||||
-rwxr-xr-x | redhat/scripts/frh.py | 27 | ||||
-rwxr-xr-x | redhat/scripts/git-backport-diff | 302 | ||||
-rwxr-xr-x | redhat/scripts/git-compile-check | 215 | ||||
-rwxr-xr-x | redhat/scripts/process-patches.sh | 77 | ||||
-rwxr-xr-x | redhat/scripts/tarball_checksum.sh | 3 |
15 files changed, 826 insertions, 0 deletions
diff --git a/.gitpublish b/.gitpublish new file mode 100644 index 0000000..e257527 --- /dev/null +++ b/.gitpublish @@ -0,0 +1,8 @@ +# The first profile is the default +[gitpublishprofile "rhel"] +base = rhel7/master-1.4.3 +prefix = RHEL-7.4 dtc PATCH +to = rhvirt-patches@redhat.com +suppresscc = all +message = True + diff --git a/redhat/.gitignore b/redhat/.gitignore new file mode 100644 index 0000000..8999a8b --- /dev/null +++ b/redhat/.gitignore @@ -0,0 +1 @@ +v*.tar.gz diff --git a/redhat/Makefile b/redhat/Makefile new file mode 100644 index 0000000..c6998d3 --- /dev/null +++ b/redhat/Makefile @@ -0,0 +1,67 @@ +include Makefile.common + +REDHAT:=$(shell pwd) +SCRIPTS:=$(REDHAT)/scripts +RPMBUILD:=$(REDHAT)/rpmbuild + +# Hide command calls without debug option +ifeq ($(DEBUG),1) + DS= +else + DS=@ +endif + +BREW_OPTIONS:=--scratch + +# Hide progress bar in scripts +ifeq ($(NOPROGRESS),1) + BREW_OPTIONS:=$(BREW_OPTIONS) --noprogress +endif + +# Do not wait for build finish +ifeq ($(NOWAIT),1) + BREW_OPTIONS:=$(BREW_OPTIONS) --nowait +endif + +# create an empty localversion file if you don't want a local buildid +ifneq ($(NOLOCALVERSION),1) + ifeq ($(LOCALVERSION),) + LOCALVERSION=$(shell cat ../localversion 2>/dev/null) + endif + ifeq ($(LOCALVERSION),) + LOCALVERSION:=.test + else + LOCALVERSION:=.$(LOCALVERSION) + endif +else + LOCALVERSION:= +endif + +.PHONY: rh-brew rh-srpm rh-prep rh-help rh-clean-sources +all: rh-help + +rh-clean-sources: + $(DS)for i in $(RPMBUILD)/SOURCES/*; do \ + rm -f $$i; \ + done; \ + +rh-prep: rh-clean-sources + $(DS)if [ -n "$(SOURCES_FILELIST)" ]; then \ + echo "Copying Sources: $(SOURCES_FILELIST)"; \ + cp $(SOURCES_FILELIST) $(RPMBUILD)/SOURCES; \ + fi + $(DS)$(SCRIPTS)/process-patches.sh "$(SCRIPTS)" "$(NAME)" "$(VERSION)" "$(RELEASE)" "$(DATE)" "$(COMMIT)" "$(TARFILE)" "$(TARURL)" "$(SPECFILE)" "$(BUILD_DIR)" "$(MARKER)" "$(LOCALVERSION)" "$(RHEV)" "$(ZRELEASE)" + +rh-srpm: rh-prep + $(DS)rpmbuild --define "_sourcedir $(RPMBUILD)/SOURCES" --define "_builddir $(RPMBUILD)/BUILD" --define "_srcrpmdir $(RPMBUILD)/SRPMS" --define "_rpmdir $(RPMBUILD)/RPMS" --define "_specdir $(RPMBUILD)/SPECS" --define "dist $(DIST)" --nodeps -bs $(RPMBUILD)/SPECS/$(SPECFILE) + +rh-brew: rh-srpm + @echo "Build $(SRPM_NAME)$(LOCALVERSION).src.rpm as $(BUILD_TARGET)" + $(DS)brew build $(BREW_OPTIONS) $(BUILD_TARGET) $(RPMBUILD)/SRPMS/$(SRPM_NAME)$(LOCALVERSION).src.rpm + +rh-help: + @echo "rh-brew: Build package on brew" + @echo "rh-srpm: Prepare srpm package" + @echo "rh-prep: Prepare sources and spec file in rpmbuild/" + @echo "rh-help: Print this help" + diff --git a/redhat/Makefile.common b/redhat/Makefile.common new file mode 100644 index 0000000..a7df5b2 --- /dev/null +++ b/redhat/Makefile.common @@ -0,0 +1,35 @@ +UNAME:=dtc +NAME:=dtc +RHEV:=0 +VERSION:=1.4.3 +DATE:= +COMMIT:= +RELEASE:=1 +ZRELEASE:= +RELEASE_SEPARATOR:=- + +TARFILE:=v$(VERSION).tar.gz +TARURL:=https://github.com/dgibson/dtc/archive/v1.4.3.tar.gz +TARSHA1:=cef129e4444a52dcd704c08c6375fa3894954048 +MARKER:=fa8bc7f928ac25f23532afc8beb2073efc8fb063 +SOURCES_FILELIST:= + +SPECFILE:=$(NAME).spec +DIST:=.el7 +BUILD_TARGET:=rhel-7.3-candidate + +ifeq ($(RHEV),1) + NAME_SUFFIX:=-rhev +endif + +ifneq ($(VERSION),) + BUILD_DIR:=$(UNAME)-$(VERSION) + SRPM_NAME:=$(NAME)$(NAME_SUFFIX)-$(VERSION)$(RELEASE_SEPARATOR)$(RELEASE)$(DIST) +else + BUILD_DIR:=$(UNAME)-$(GITCOMMIT + SRPM_NAME:=$(NAME)$(NAME_SUFFIX)-$(DATE)-$(RELEASE).git$(COMMIT)$(DIST) +endif + +ifneq ($(ZRELEASE),) + SRPM_NAME:=$(SRPM_NAME).$(ZRELEASE) +endif diff --git a/redhat/dtc.spec.template b/redhat/dtc.spec.template new file mode 100644 index 0000000..36b3f6f --- /dev/null +++ b/redhat/dtc.spec.template @@ -0,0 +1,81 @@ +Name: dtc +Version: %%VERSION%% +Release: %%RELEASE%%%{?dist}%%ZRELEASE%%%%LOCALVERSION%% +Summary: Device Tree Compiler +Group: Development/Tools +License: GPLv2+ +URL: https://github.com/dgibson/dtc +Source: https://github.com/dgibson/dtc/archive/v%{version}.tar.gz + +%%PATCHLIST%% + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +BuildRequires: flex, bison +ExclusiveArch: %{power64} aarch64 + +%description +The Device Tree Compiler generates flattened Open Firmware style device trees +for use with PowerPC machines that lack an Open Firmware implementation + +%package -n libfdt +Summary: Device tree library +Group: Development/Libraries + +%description -n libfdt +libfdt is a library to process Open Firmware style device trees on various +architectures. + +%package -n libfdt-devel +Summary: Development headers for device tree library +Group: Development/Libraries +Requires: libfdt = %{version}-%{release} + +%description -n libfdt-devel +This package provides development files for libfdt + +%prep +%setup -q -n dtc-%{version} + +%%PATCHAPPLY%% + +%build +make %{?_smp_mflags} + +%install +rm -rf $RPM_BUILD_ROOT +make install DESTDIR=$RPM_BUILD_ROOT PREFIX=/usr LIBDIR=%{_libdir} +rm -rf $RPM_BUILD_ROOT/%{_libdir}/*.a + +# we don't want or need ftdump, so drop +rm -f $RPM_BUILD_ROOT/%{_bindir}/ftdump + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root,-) +%doc GPL +%{_bindir}/* + +%files -n libfdt +%defattr(-,root,root,-) +%doc GPL +%{_libdir}/libfdt-%{version}.so +%{_libdir}/libfdt.so.* + +%files -n libfdt-devel +%defattr(-,root,root,-) +%{_libdir}/libfdt.so +%{_includedir}/* + +%post -n libfdt -p /sbin/ldconfig + +%postun -n libfdt -p /sbin/ldconfig + +%changelog +* Tue Aug 19 2014 Miroslav Rezanina <mrezanin@redhat.com> - 1.4.0-2 +- Update power macro for ppc64le + +* Fri Jul 25 2014 Miroslav Rezanina <mrezanin@redhat.com> - 1.4.0-1 +- Initial version diff --git a/redhat/rpmbuild/BUILD/.gitignore b/redhat/rpmbuild/BUILD/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/redhat/rpmbuild/BUILD/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/redhat/rpmbuild/RPMS/.gitignore b/redhat/rpmbuild/RPMS/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/redhat/rpmbuild/RPMS/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/redhat/rpmbuild/SOURCES/.gitignore b/redhat/rpmbuild/SOURCES/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/redhat/rpmbuild/SOURCES/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/redhat/rpmbuild/SPECS/.gitignore b/redhat/rpmbuild/SPECS/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/redhat/rpmbuild/SPECS/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/redhat/rpmbuild/SRPMS/.gitignore b/redhat/rpmbuild/SRPMS/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/redhat/rpmbuild/SRPMS/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/redhat/scripts/frh.py b/redhat/scripts/frh.py new file mode 100755 index 0000000..0968154 --- /dev/null +++ b/redhat/scripts/frh.py @@ -0,0 +1,27 @@ +#!/usr/bin/python + +import re +import sys + +def filter_file(inf): + ts_chunkstart = re.compile("diff --git ") + ts_redhat = re.compile(".*\/redhat\/") + ts_gitfile = re.compile(".*\/\.git") + skip = False + f = open(inf,"r") + for line in f.readlines(): + if ts_chunkstart.match(line) is not None: + if ts_redhat.match(line) is not None or ts_gitfile.match(line) is not None: + skip = True + else: + skip = False + if skip == False: + sys.stdout.write(line) + f.close() + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Usage: %s <filename>" % sys.argv[0]) + exit(1) + filter_file(sys.argv[1]) + diff --git a/redhat/scripts/git-backport-diff b/redhat/scripts/git-backport-diff new file mode 100755 index 0000000..0e75341 --- /dev/null +++ b/redhat/scripts/git-backport-diff @@ -0,0 +1,302 @@ +#!/bin/bash +# +# See $desc, below, for program description +# +# Copyright (c) 2013 Red Hat, Inc. +# +# Author(s): +# Jeff Cody <jcody@redhat.com> +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; under version 2 of the license +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, see <http://www.gnu.org/licenses/gpl-2.0.html>. +# + +set -C -u -e +set -o pipefail + +desc=" +$0 compares the commits in a specified git range, with the corresponding +upstream commit. This assumes that you have both the downstream and +upstream repositories added as remotes in your git repo. + +Example usage: +$0 -r qemu-kvm-0.12.1.2-2.370.el6..my_feature_branch -u v1.5.0 + +Ouput key: +[----] Indicates the patches upstream and downstream are identical +[####] Indicates the number of differences (#### is substituted) +[down] Indicates the patch only exists downstream" + +def_upstream="v1.7.0" +def_diffprog=meld +def_range="HEAD^!" +def_color='y' +def_pause='y' +def_sensitivity=0 + +upstream=`git config backport-diff.upstream || true` +diffprog=`git config backport-diff.diffprog || true` +range=`git config backport-diff.range || true` +color=`git config backport-diff.color || true` +pause=`git config backport-diff.pause || true` +sensitivity=`git config backport-diff.sensitivity || true` + +if [[ -z "$upstream" ]] +then + upstream=$def_upstream + git config backport-diff.upstream $upstream || true +fi +if [[ -z "$diffprog" ]] +then + diffprog=$def_diffprog + git config backport-diff.diffprog $diffprog || true +fi +if [[ -z "$range" ]] +then + range=$def_range + git config backport-diff.range $range || true +fi +if [[ -z "$color" ]] +then + color=$def_color + git config backport-diff.color $color || true +fi +if [[ -z "$pause" ]] +then + pause=$def_pause + git config backport-diff.pause $pause || true +fi +if [[ -z "$sensitivity" ]] +then + sensitivity=$def_sensitivity + git config backport-diff.sensitivity $sensitivity || true +fi + + +usage() { + echo "" + echo "$0 [OPTIONS]" + echo "$desc" + echo "" + echo "OPTIONS:" + echo " -r git range + optional; default is '$range' + " + echo " -u upstream git tag / branch / id + optional; default is '$upstream' + " + echo " -n do not use colors + " + echo " -d diff program to use + optional; default is '$diffprog' + " + echo " -p do not pause when viewing diffs + " + echo " -s sensitivity level of diff compares + 0: only show functional code differences + 1: show (0) + contextual differences + 2+: offer to compare all patches, regardless of any differences + " + echo " -h help" + echo "" + echo "You can set each of the default options using git-config:" + echo " git config backport-diff.upstream" + echo " git config backport-diff.diffprog" + echo " git config backport-diff.range" + echo " git config backport-diff.color" + echo " git config backport-diff.pause" +} + +while getopts ":r:u:nd:phs:" opt +do + case $opt in + r) range=$OPTARG + ;; + u) upstream=$OPTARG + ;; + n) color='n' + ;; + d) diffprog=$OPTARG + ;; + p) pause='n' + ;; + s) sensitivity=$OPTARG + if ! [[ "$sensitivity" =~ ^[0-9]+$ ]] + then + echo "Invalid argument for -s" >&2 + usage + exit 1 + fi + ;; + h) usage + exit + ;; + \?) echo "Unknown option: -$OPTARG" >&2 + usage + exit 1 + ;; + esac +done + +if [[ $color == 'y' ]] +then + bold=$(tput bold) + color1=$(tput setaf 1) + color2=$(tput setaf 2) + color3=$(tput setaf 3) + color4=$(tput setaf 4) + color5=$(tput setaf 5) + color6=$(tput setaf 6) + color7=$(tput setaf 7) + reset=$(tput sgr0) +else + bold= + color1= + color2= + color3= + color4= + color5= + color6= + color7= + reset= +fi + +trap cleanup EXIT + +cleanup() { + echo $reset +} + +total=`git rev-list "$range" |wc -l` + +# verify the upstream exists +upstream_valid='n' +# branch +if git show-ref --quiet --verify refs/heads/${upstream} +then + upstream_valid='y' +# tag +elif git show-ref --quiet --verify refs/tags/${upstream} +then + upstream_valid='y' +# remote branch +elif git show-ref --quiet --verify refs/remotes/${upstream} +then + upstream_valid='y' +# commit id +elif git rev-list --max-count=1 --quiet $upstream >/dev/null 2>&1 +then + upstream_valid='y' +fi + +numdiff=0 +label= +subjlist= +cnt=0 +compare_git() +{ + echo "Key:" + printf "[----] : patches are identical\n" + printf "[${bold}####${reset}] : number of functional differences between upstream/downstream patch\n" + printf "[${bold}${color1}down${reset}] : patch is downstream-only\n" + printf "The flags [${bold}FC${reset}] indicate (F)unctional and (C)ontextual differences, respectively\n\n" + # don't pipe the git job into read, to avoid subshells + while read hashsubj + do + let cnt=$cnt+1; + subj=${hashsubj:40} + downhash=${hashsubj:0:40} + # A little bit hackish, but find the match by looking at upstream + # subject lines, and using the last one. Not all backports contain + # the phrase "cherry-pick", so we can't really try and find the + # upstream hash from that... + uphash=`git log $upstream --pretty=format:"%H" --perl-regexp --grep="^\\Q${subj}\\E$"|tail -n 1` + if [[ -n "$uphash" ]] + then + numdiff=`diff -u <(git diff $uphash^! |egrep ^[-+])\ + <(git diff $downhash^! |egrep ^[-+])\ + | egrep '^[-+]' | egrep -v '^[-+]{3}' |wc -l || true` + # for contextual diff checking, we will ignore hashes and line number offsets + condiff=`diff -u <(git diff $uphash^\! |sed -e s/^@@.*@@//g |egrep -v ^index |egrep -v ^diff)\ + <(git diff $downhash^\!|sed -e s/^@@.*@@//g |egrep -v ^index |egrep -v ^diff)\ + | egrep '^[-+]' | egrep -v '^[-+]{3}'|wc -l || true` + f="-" + c="-" + if [[ $sensitivity -gt 1 ]] + then + showdiff=1 + else + showdiff=0 + fi + if [[ $condiff -ne 0 ]] + then + c=${bold}C${reset} + if [[ $sensitivity -gt 0 ]] + then + showdiff=1 + fi + fi + if [[ $numdiff -ne 0 ]] + then + f=${bold}F${reset} + showdiff=1 + printf "%03d/${total}:[${bold}%04d${reset}] [${f}${c}] ${bold}${color4}'${subj}'${reset}\n" $cnt $numdiff + else + printf "%03d/$total:[----] [${f}${c}] '$subj'\n" $cnt + fi + if [[ $showdiff -eq 1 ]] + then + if [[ diffprog == "meld" ]] + then + label="--label=\"#$cnt: $subj ( <-upstream, downstream-> )\"" + fi + subjlist[$cnt]=$subj + exe[$cnt]="${label} <(git show $uphash^!) <(git show $downhash^!) 2>/dev/null" + shortexe[$cnt]="<(git show ${uphash:0:7}^\!) <(git show ${downhash:0:7}^\!)" + fi + else + printf "%03d/$total:[${bold}${color1}down${reset}] ${bold}${color4}'$subj'${reset}\n" $cnt + fi + done < <(git log --pretty=tformat:"%H%s" --reverse $range) +} + +if [[ $upstream_valid != 'y' ]] +then + echo "Upstream $upstream is not valid (does not exist)!" + echo "Do you need to add the remote upstream repo?" + exit 2 +fi >&2 + +compare_git +echo "Do you want to view the diffs using ${bold}${diffprog}${reset}? y/[n]: " +read -n 1 view + +echo "" +if [[ "$view" == "y" ]] +then + for idx in ${!exe[*]} + do + if [[ $pause == 'y' ]] + then + echo "Press [Enter] to view diff(diff) of ${idx}/${total}: ${bold}${color4}${subjlist[$idx]}${reset}" + read + else + echo "Viewing diff(diff) of ${idx}/${total}: ${bold}${color4}${subjlist[$idx]}${reset}" + fi + eval ${diffprog} ${exe[$idx]} || true + done +fi +echo "To view diffs later, you may run:" +for idx in ${!shortexe[*]} +do + printf "%03d/$total: '${diffprog} ${shortexe[$idx]}'\n" $idx +done diff --git a/redhat/scripts/git-compile-check b/redhat/scripts/git-compile-check new file mode 100755 index 0000000..5c0f6bf --- /dev/null +++ b/redhat/scripts/git-compile-check @@ -0,0 +1,215 @@ +#!/bin/bash +# +# See $desc, below, for program description +# +# Copyright (c) 2013 Red Hat, Inc. +# +# Author(s): +# Jeff Cody <jcody@redhat.com> +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; under version 2 of the license +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, see <http://www.gnu.org/licenses/gpl-2.0.html>. +# + +set -C -u -e +set -o pipefail + +desc=" +$0 iterates through a git commit range, and performs the +following on each commit: + - git checkout + - make clean + - configure + - make + +It will also optionally perform a git-reset and git-clean between +checkouts, if requested via the '-f' option. + +The script will exit and report on first error on any of the above steps, +(except no error checking is performed on 'make clean') + +NOTE: While executing, the script will checkout out each commit + in the range in the current git tree. On exit, the HEAD + at the time the script was called is checked out" + + +# default range is the last commit +def_range="HEAD^!" +def_config_opt="--target-list=x86_64-softmmu" +# you may want to have make perform multiple jobs, e.g. -j4 +# this is ommitted as the default in case the project makefile +# is not safe for parallel make processes +def_make_opt="" +def_log="output-$$.log" +def_logdir="" +force_clean='n' + +logfile=$def_log +range=`git config compile-check.range || true` +config_opt=`git config compile-check.configopt || true` +make_opt=`git config compile-check.makeopt || true` +logdir=`git config compile-check.logdir || true` + +if [[ -z "$range" ]] +then + range=$def_range + git config compile-check.range $range || true +fi +if [[ -z "$config_opt" ]] +then + config_opt=$def_config_opt + git config compile-check.configopt $config_opt || true +fi +if [[ -z "$make_opt" ]] +then + make_opt=$def_make_opt + git config compile-check.makeopt $make_opt || true +fi +if [[ -z "$logdir" ]] +then + logdir=$def_logdir + git config compile-check.logdir $logdir || true +fi + +usage() { + echo "" + echo "$0 [OPTIONS]" + echo "$desc" + echo "" + echo "OPTIONS:" + echo " -r git range + optional; default is '$range' +" + echo " -c configure options + optional; default is '$config_opt' +" + echo " -m make options + optional; default is '$make_opt' +" + echo " -d log dir + optional; default is '$logdir' +" + echo " -l log filename + optional; default is output-PROCID, where PROCID is the bash process id + note: you may specify a full path for the log filename here, and exclude the + -d option. +" + echo " -f force a git reset and clean + this will cause a 'git reset --hard; git clean -fdx' to be run between checkouts. + !! WARNING: This may cause data loss in your git tree. + READ the git-clean and git-reset man pages and make + sure you understand the implications of + 'git clean -fdx' and 'git reset --hard' before using !! + If you specify this option, make sure the logfile falls outside of the tree. +" + echo " -h help" +} + +while getopts ":r:c:m:l:d:hf" opt +do + case $opt in + r) range=$OPTARG + ;; + c) config_opt=$OPTARG + ;; + m) make_opt=$OPTARG + ;; + d) logdir=$OPTARG + ;; + l) logfile=$OPTARG + ;; + f) force_clean='y' + ;; + h) usage + exit + ;; + \?) echo "Unknown option: -$OPTARG" >&2 + usage + exit 1 + ;; + esac +done + +# append a '/' to logdir if $logdir was specified without one +[[ -n "$logdir" ]] && [[ ${logdir:${#logdir}-1} != "/" ]] && logdir="${logdir}/" + +logfile="${logdir}${logfile}" + +head=`git rev-parse --abbrev-ref=strict HEAD` +if [ HEAD = "$head" ] +then + # we're at a detached head, get hash + head=`git rev-parse HEAD` +fi + + +total=`git rev-list "$range" |wc -l` + +echo "log output: $logfile" + +rm -f "$logfile" +date > "$logfile" +echo "git compile check for $range." >> "$logfile" +echo "* configure options='$config_opt'" >> "$logfile" +echo "* make options='$make_opt'" >> "$logfile" +echo "Performing a test compile on $total patches" | tee -a "$logfile" +echo "-------------------------------------------------------------" >> "$logfile" +echo "" | tee -a "$logfile" + +clean_repo() { + if [[ $force_clean == 'y' ]] + then + git reset --hard >> "$logfile" 2>&1 || true + git clean -fdx >> "$logfile" 2>&1 || true + fi +} + +# we want to cleanup and return the git tree back to the previous head +trap cleanup EXIT + +cleanup() { + echo "" + echo -n "Cleaning up..." + clean_repo + git checkout $head > /dev/null 2>&1 + echo "done." +} + +cnt=1 +# don't pipe the git job into read, to avoid subshells +while read hash +do + txt=`git log --pretty=tformat:"%h: %s" $hash^!` + echo "${cnt}/${total}: compiling: $txt" | tee -a "$logfile" + let cnt=$cnt+1; + echo "####################" >> "$logfile" + clean_repo + make clean > /dev/null 2>&1 || true + git checkout $hash >> "$logfile" 2>&1 && \ + ./configure $config_opt >> "$logfile" 2>&1 && \ + make $make_opt >> "$logfile" 2>&1 || + ( + S=$? + # don't complain for SIGINT, SIGTERM, SIGQUIT + if [ $S -ne 130 ] && [ $S -ne 131 ] && [ $S -ne 143 ] + then + echo "" | tee -a "$logfile" + echo "ERROR: commit $hash failed to build!" | tee -a "$logfile" + git show --stat $hash | tee -a "$logfile" + fi + exit 1 + ) +done < <(git log $range --pretty=tformat:"%H" --reverse) + +echo " +All patches in $range compiled successfully!" | tee -a "$logfile" +exit 0 diff --git a/redhat/scripts/process-patches.sh b/redhat/scripts/process-patches.sh new file mode 100755 index 0000000..30a66b6 --- /dev/null +++ b/redhat/scripts/process-patches.sh @@ -0,0 +1,77 @@ +SCRIPTS=$1 +shift +NAME=$1 +shift +VERSION=$1 +shift +RELEASE=$1 +shift +DATE=$1 +shift +COMMIT=$1 +shift +TARBALL=$1 +shift +TARURL=$1 +shift +SPECNAME=$1 +shift +BUILDDIR_NAME=$1 +shift +MARKER=$1 +shift +LOCALVERSION=$1 +shift +RHEV=$1 +shift +ZRELEASE=$1 + +SOURCES=rpmbuild/SOURCES +SRPMDIR=rpmbuild/SRPM +BUILDDIR=${SOURCES}/${BUILDDIR_NAME} +SPEC=rpmbuild/SPECS/${SPECNAME} + +# Pre-cleaning +rm -rf .tmp asection psection patchlist + +if [ ! -f ${TARBALL} ]; then + wget ${TARURL} +fi +cp ${TARBALL} ${SOURCES}/${TARBALL} + +if [ -n "${ZRELEASE}" ]; then + ZRELEASE=.${ZRELEASE} +fi + +# Handle patches +git format-patch --first-parent --no-renames -k --no-binary ${MARKER}.. > patchlist +for patchfile in `cat patchlist`; do + ${SCRIPTS}/frh.py ${patchfile} > .tmp + if grep -q '^diff --git ' .tmp; then + num=$(echo $patchfile | sed 's/\([0-9]*\).*/\1/') + echo "Patch${num}: ${patchfile}" >> psection + echo "%patch${num} -p1" >> asection + mv .tmp ${SOURCES}/${patchfile} + fi +done + +# Handle spec file +cp ${SPECNAME}.template ${SPEC} + +sed -i -e "/%%PATCHLIST%%/r psection + /%%PATCHLIST%%/d + /%%PATCHAPPLY%%/r asection + /%%PATCHAPPLY%%/d + s/%%VERSION%%/${VERSION}/ + s/%%RELEASE%%/${RELEASE}/ + s/%%ZRELEASE%%/${ZRELEASE}/ + s/%%DATE%%/${DATE}/ + s/%%COMMIT%%/${COMMIT}/ + s/%%LOCALVERSION%%/${LOCALVERSION}/ + s/%%TARBALL%%/${TARBALL}/ + s/%%RHEV%%/${RHEV}/" $SPEC + +# Final cleaning +rm -rf `cat patchlist` +rm -rf .tmp asection psection patchlist + diff --git a/redhat/scripts/tarball_checksum.sh b/redhat/scripts/tarball_checksum.sh new file mode 100755 index 0000000..191bc22 --- /dev/null +++ b/redhat/scripts/tarball_checksum.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +sha1sum < $1 | cut -d ' ' -f 1 |