[pacman-dev] [PATCH] add the ability to only build on new pkgver or pkgrel

Daniel Wallace danielwallace at gtmanfred.com
Tue Jan 15 20:29:41 EST 2013


If I haven't bumped the pkgrel, or there have been no new commits, I
don't want to rebuild the package.  Similar to the --needed flag, but
pertains to building instead of installing.
---
 contrib/bash_completion.in |  4 ++--
 contrib/zsh_completion.in  |  1 +
 doc/makepkg.8.txt          |  4 ++++
 scripts/makepkg.sh.in      | 10 +++++++++-
 4 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/contrib/bash_completion.in b/contrib/bash_completion.in
index b0901af..af382e8 100644
--- a/contrib/bash_completion.in
+++ b/contrib/bash_completion.in
@@ -74,8 +74,8 @@ _makepkg() {
   COMPREPLY=()
   _get_comp_words_by_ref cur prev
   if [[ $cur = -* && ! $prev =~ ^-(-(config|help)$|\w*[Chp]) ]]; then
-    opts=('allsource asdeps asroot check clean config force geninteg help holdver ignorearch
-           install log nobuild nocheck nocolor noconfirm nodeps noextract
+    opts=('allsource asdeps asroot buildneeded check clean config force geninteg help holdver
+           ignorearch install log nobuild nocheck nocolor noconfirm nodeps noextract
            noprogressbar nosign pkg repackage rmdeps sign skipinteg source syncdeps'
           'A L R S c d e f g h i m o p r s')
     _arch_ptr2comp opts
diff --git a/contrib/zsh_completion.in b/contrib/zsh_completion.in
index 84ee93c..342803f 100644
--- a/contrib/zsh_completion.in
+++ b/contrib/zsh_completion.in
@@ -457,6 +457,7 @@ _makepkg_longopts=(
   '--ignorearch[Ignore incomplete arch field in PKGBUILD]'
   '--clean[Clean up work files after build]'
   '--nodeps[Skip all dependency checks]'
+  '--buildneeded[Skip building if the same version is already installed]'
   '--noextract[Do not extract source files (use existing src/ dir)]'
   '--force[Overwrite existing package]'
   '--geninteg[Generate integrity checks for source files]'
diff --git a/doc/makepkg.8.txt b/doc/makepkg.8.txt
index 498c79b..d45a703 100644
--- a/doc/makepkg.8.txt
+++ b/doc/makepkg.8.txt
@@ -58,6 +58,10 @@ Options
 	will break the build process if all of the dependencies are not
 	installed.
 
+*\--buildneeded*::
+	Do not build if the installed version and the version in the build script
+	are the same.
+
 *-e, \--noextract*::
 	Do not extract source files or run the prepare() function (if present);
 	use whatever source already exists in the $srcdir/ directory. This is
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index ebc24f7..c267e56 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -65,6 +65,7 @@ SKIPCHECKSUMS=0
 SKIPPGPCHECK=0
 INSTALL=0
 NOBUILD=0
+ONLYNEWPKGVER=0
 NODEPS=0
 NOEXTRACT=0
 RMDEPS=0
@@ -707,6 +708,12 @@ update_pkgver() {
 					"$BUILDFILE"
 		fi
 	fi
+	if (( ONLYNEWPKGVER )); then
+		if run_pacman -T "$pkgname=$pkgver-$pkgrel" 2>/dev/null; then
+			msg "$(gettext "Skipping -- $pkgname-$pkgver-$pkgrel is already installed")"
+			exit 0
+		fi
+	fi
 }
 
 # Print 'source not found' error message and exit makepkg
@@ -2460,7 +2467,7 @@ ARGLIST=("$@")
 
 # Parse Command Line Options.
 OPT_SHORT="AcdefFghiLmop:rRsSV"
-OPT_LONG=('allsource' 'asroot' 'check' 'clean' 'config:' 'force' 'geninteg'
+OPT_LONG=('allsource' 'asroot' 'onlynewpkgver' 'check' 'clean' 'config:' 'force' 'geninteg'
           'help' 'holdver' 'ignorearch' 'install' 'key:' 'log' 'nobuild' 'nocolor'
           'nocheck' 'nodeps' 'noextract' 'nosign' 'pkg:' 'repackage' 'rmdeps'
           'skipchecksums' 'skipinteg' 'skippgpcheck' 'skippgpcheck' 'sign'
@@ -2503,6 +2510,7 @@ while true; do
 		--nocheck)        RUN_CHECK='n' ;;
 		--nosign)         SIGNPKG='n' ;;
 		-o|--nobuild)     NOBUILD=1 ;;
+		--buildneeded)    ONLYNEWPKGVER=1 ;;
 		-p)               shift; BUILDFILE=$1 ;;
 		--pkg)            shift; IFS=, read -ra p <<<"$1"; PKGLIST+=("${p[@]}"); unset p ;;
 		-r|--rmdeps)      RMDEPS=1 ;;
-- 
1.8.1.1



More information about the pacman-dev mailing list