On 10/26/07, Scott Horowitz <stonecrest@gmail.com> wrote:
Hate to stomp on good ideas, but can you port this patch to the current GIT version of makepkg? I really like it because it doesn't seem to do too much, but makepkg has changed a lot since pacman 3.0.0.
Ok, attached is a patch against makepkg in git. It uses Aaron's sed line and is simplified a bit from my previous patch.
One thought- usage instructions would be nice to be in the patch too (the stuff from makepkg --help).
I'm not sure what you mean? There aren't any usage instructions, it doesn't add any public arguments. If it finds the correct svn/etc variables in the PKGBUILD, it'll update to the latest revision. (Behind the scenes, I do use a -z argument to prevent the revision number from being searched for twice due to fakeroot's makepkg call...)
Ahh, one of those hidden options. Comments below on that.
It also fixes a small typo ;-)
And finally, makepkg -p seems to be documented, but the argument doesn't appear to be valid anymore (it's not parsed). I'm not sure if your intention was to remove that option or it's simply an oversight...
Fixed on my working branch, it looks like it was an oversight in the getopt conversion. I've repasted your patch below to give a few comments. Overall looks pretty good though. I am going to have to ask you for one thing: http://archlinux.org/pipermail/pacman-dev/2007-October/009681.html This should help you make a patch: http://wiki.archlinux.org/index.php/Super_Quick_Git_Guide For everyone: to make a patch, just start your own branch based off of master (git checkout -b mybranch master), make your changes, and use the poor man's way of committing everything (git commit -a -s). Then type 'git-format-patch master' and you'll produce a stupendous patch. (Note: you may want to do 'git-config --global user.name "My Name"' and git-config --global user.email "myemail@domain.com"' to make your signoff and author lines correct.) -Dan --- pacman/scripts/makepkg.sh.in 2007-10-26 16:05:33.000000000 -0600 +++ makepkg.sh.in 2007-10-26 15:59:50.000000000 -0600 @@ -60,6 +60,8 @@ SOURCEONLY=0 IGNOREARCH=0 +FORCE_VER="" ***Perhaps a comment here stating what this var is used for? + PACMAN_OPTS= ### SUBROUTINES ### @@ -976,6 +978,72 @@ fi } +devel_check() { + newpkgver="" + if [ "$FORCE_VER" = "" ]; then + # Check if this is a svn/cvs/etc PKGBUILD; set $newpkgver if so. + # This will only be used on the first call to makepkg; subsequent + # calls to makepkg via fakeroot will explicitly pass the version + # number to avoid having to determine the version number twice. + oldpkgver=$pkgver + if [ ! -z ${_darcstrunk} ] && [ ! -z ${_darcsmod} ] ; then + msg "$(gettext "Determining latest darcs revision...")" + newpkgver=$(date +%Y%m%d) + elif [ ! -z ${_cvsroot} ] && [ ! -z ${_cvsmod} ] ; then + msg "$(gettext "Determining latest cvs revision...")" + newpkgver=$(date +%Y%m%d) + elif [ ! -z ${_gitroot} ] && [ ! -z ${_gitname} ] ; then + msg "$(gettext "Determining latest git revision...")" + newpkgver=$(date +%Y%m%d) + elif [ ! -z ${_svntrunk} ] && [ ! -z ${_svnmod} ] ; then + msg "$(gettext "Determining latest svn revision...")" + newpkgver=$(svn log $_svntrunk --limit 1 | sed -n 's/^r\([^ ]*\) .*$/\1/p') + elif [ ! -z ${_bzrtrunk} ] && [ ! -z ${_bzrmod} ] ; then + msg "$(gettext "Determining latest bzr revision...")" + newpkgver=$(bzr revno ${_bzrtrunk}) + elif [ ! -z ${_hgroot} ] && [ ! -z ${_hgrepo} ] ; then + msg "$(gettext "Determining latest hg revision...")" + if [ -d ./src/$_hgrepo ] ; then + cd ./src/$_hgrepo + make clean + hg pull + hg update + else + [[ ! -d ./src/$_hgrepo ]] && mkdir -p ./src/$_hgrepo + hg clone $_hgroot/$_hgrepo ./src/$_hgrepo + cd ./src/$_hgrepo + fi + newpkgver=$(hg tip | sed -n '1s/[^0-9]*\([^:]*\):.*$/\1/p') + cd ../../ + fi + + if [ "$newpkgver" != "" ]; then + msg2 "$(gettext "Version found: %s")" "$newpkgver" + pkgver=$newpkgver + fi + + else + # Version number retrieved from fakeroot->makepkg argument + newpkgver=$FORCE_VER + fi +} ***Trusting that this code is good, it looks sane to me. + +devel_update() { + # This is lame, but if we're wanting to use an updated pkgver for + # retrieving svn/cvs/etc sources, we'll update the PKGBUILD with + # the new pkgver and then re-source it. This is the most robust + # method for dealing with PKGBUILDs that use, e.g.: + # pkgver=23 + # ... + # _foo=pkgver + if [ "$newpkgver" != "" ]; then + if [ "newpkgver" != "$pkgver" ]; then + sed -i "s/^pkgver=[^ ]*/pkgver=$newpkgver/" ./$BUILDSCRIPT + source $BUILDSCRIPT + fi + fi +} + usage() { printf "makepkg (pacman) %s\n" "$myver" echo @@ -1058,7 +1126,7 @@ fi # Parse Command Line Options. -OPT_SHORT="AbcCdefFghiLmop:rRsSV" +OPT_SHORT="AbcCdefFghiLmopz:rRsSV" OPT_LONG="ignorearch,asroot,builddeps,clean,cleancache,nodeps,noextract,force,geninteg,help,install,log" OPT_LONG="$OPT_LONG,nocolor,nobuild,rmdeps,repackage,source,syncdeps,usesudo,version" # Pacman Options @@ -1096,6 +1164,7 @@ -R|--repackage) REPKG=1 ;; --source) SOURCEONLY=1 ;; -s|--syncdeps) DEP_BIN=1 ;; + -z) shift; FORCE_VER=$1;; ****Can you stick a comment above this parameter saying it is a hidden argument and what it is for? It might even be better to use a long option since we don't really care who has to type it- it is better to be descriptive and this way we aren't using up one of our few remaining short options. # BEGIN DEPRECATED -S|--usesudo) @@ -1255,12 +1324,15 @@ fi fi -# Run the bear minimum in fakeroot +devel_check + +# Run the bare minimum in fakeroot # fix flyspray bug 6208 -- using makepkg with fakeroot gives an error if [ "$INFAKEROOT" = "1" ]; then if [ "$REPKG" = "1" ]; then warning "$(gettext "Skipping build.")" else + devel_update run_build tidy_install fi @@ -1359,6 +1431,7 @@ if [ "$REPKG" = "1" ]; then warning "$(gettext "Skipping build.")" else + devel_update run_build tidy_install fi @@ -1368,7 +1441,11 @@ msg "$(gettext "Entering fakeroot environment...")" cd "$startdir" - fakeroot -- $0 -F $ARGLIST || exit $? + if [ "$newpkgver" != "" ]; then + fakeroot -- $0 -z $newpkgver -F $ARGLIST || exit $? + else + fakeroot -- $0 -F $ARGLIST || exit $? + fi fi create_xdelta "$PKGDEST/${pkgname}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"