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

Allan McRae allan at archlinux.org
Tue Jan 15 20:36:49 EST 2013


On 16/01/13 11:29, Daniel Wallace wrote:
> 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.
> ---

Many issues:

1) Your test if a packaged is installed ignores the epoch
2) I was going to say I don't think this handles split packages, but it
is only for VCS packages...
3) There is this that I have been ignoring:
https://bugs.archlinux.org/task/18709
4) I'm not sure this is the job of makepkg...


>  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 ;;
> 



More information about the pacman-dev mailing list