[pacman-dev] Patch: Add install like support to makepkg for repo-add
Simon Gomizelj
simongmzlj at gmail.com
Sat Jun 11 22:13:15 EDT 2011
Hi,
First of all, I'd like to say that this is both my first patch ever to
an upstream project and my first time posting on a development mailing
list. I apologize in advance if I have befouled the rules of this
list.
I recently started playing with repo-add to build a custom repo. I
have a netbook and would like to avoid building packages directly on
the machine. However I missed the niceness of automatic install with
makepkg's -i flag. I have attempted to recreate this support for repo
management by adding an -a/--repoadd flag which, instead of using
pacman to install the package, adds it to a repo.
In order for this to work REPO_PATH and REPO_DB need to be set in
makepkg.conf, REPO_PATH being the path of the repository and REPO_DB
being the location of the database inside REPO_PATH.
I have only recently started playing with repo-add and I admit I'm not
very confident with my code. If there is any interest upstream for
this functionality, I'm willing to put in the time to perfect this
patch if someone can point me in the right direction.
>From 56ef40a2dbe42fafd32a152d102962d52e33e6f4 Mon Sep 17 00:00:00 2001
From: Simon Gomizelj <simongmzlj at gmail.com>
Date: Sat, 11 Jun 2011 21:16:11 -0400
Subject: [PATCH] Added repo-add support.
Signed-off-by: Simon Gomizelj <simongmzlj at gmail.com>
---
scripts/makepkg.sh.in | 84 +++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 81 insertions(+), 3 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index b3081fc..348cb78 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -61,6 +61,7 @@ INFAKEROOT=0
GENINTEG=0
SKIPINTEG=0
INSTALL=0
+REPOADD=0
NOBUILD=0
NODEPS=0
NOEXTRACT=0
@@ -401,6 +402,33 @@ run_pacman() {
eval "$cmd"
}
+run_repocp() {
+ local cmd
+ printf -v cmd "%q " "cp" -t $REPO_PATH "$@"
+ warning "$cmd"
+ if (( ! ASROOT )); then
+ if type -p sudo >/dev/null; then
+ cmd="sudo $cmd"
+ else
+ cmd="su root -c '$cmd'"
+ fi
+ fi
+ eval "$cmd"
+}
+
+run_repoadd() {
+ local cmd
+ printf -v cmd "%q " "$REPO_ADD" $REPO_ADD_OPTS "$@"
+ if (( ! ASROOT )); then
+ if type -p sudo >/dev/null; then
+ cmd="sudo $cmd"
+ else
+ cmd="su root -c '$cmd'"
+ fi
+ fi
+ eval "$cmd"
+}
+
check_deps() {
(( $# > 0 )) || return 0
@@ -1241,6 +1269,39 @@ install_package() {
fi
}
+repoadd_package() {
+ (( ! REPOADD )) && return
+
+ if (( ! SPLITPKG )); then
+ msg "$(gettext "Adding package %s to repo %s with %s...")"
"$pkgname" "$REPO_DB" "$REPO_ADD"
+ else
+ msg "$(gettext "Adding %s package group to repo with %s...")"
"$pkgbase" "$REPO_DB" "$REPO_ADD"
+ fi
+
+ local fullver pkg pkglist repolist
+ for pkg in ${pkgname[@]}; do
+ # TODO: this wasn't properly fixed in commit 2020e629
+ fullver=$(get_full_version $epoch $pkgver $pkgrel)
+ if [[ -f $PKGDEST/${pkg}-${fullver}-${CARCH}${PKGEXT} ]]; then
+ pkglist+=" $PKGDEST/${pkg}-${fullver}-${CARCH}${PKGEXT}"
+ repolist+=" $REPO_PATH/${pkg}-${fullver}-${CARCH}${PKGEXT}"
+ else
+ pkglist+=" $REPO_PATH/${pkg}-${fullver}-any${PKGEXT}"
+ repolist+=" $REPO_PATH/${pkg}-${fullver}-any${PKGEXT}"
+ fi
+ done
+
+ if ! run_repocp $pkglist; then
+ warning "$(gettext "Failed to copy package(s) to %s." "$REPO_PATH")"
+ return 0
+ fi
+
+ if ! run_repoadd $REPO_PATH/$REPO_DB $repolist; then
+ warning "$(gettext "Failed to add package(s) to repo %s." "$REPO_DB")"
+ return 0
+ fi
+}
+
check_sanity() {
# check for no-no's in the build script
local i
@@ -1609,6 +1670,7 @@ usage() {
echo "$(gettext " -g, --geninteg Generate integrity checks for
source files")"
echo "$(gettext " -h, --help Show this help message and exit")"
echo "$(gettext " -i, --install Install package after
successful build")"
+ echo "$(gettext " -a, --repoadd Add the package to a repo
after successful build")"
echo "$(gettext " -L, --log Log package build process")"
echo "$(gettext " -m, --nocolor Disable colorized output messages")"
echo "$(gettext " -o, --nobuild Download and extract files only")"
@@ -1659,10 +1721,10 @@ fi
ARGLIST=("$@")
# Parse Command Line Options.
-OPT_SHORT="AcCdefFghiLmop:rRsV"
+OPT_SHORT="AcCdefFghiaLmop:rRsV"
OPT_LONG="allsource,asroot,ignorearch,check,clean,cleancache,nodeps"
OPT_LONG+=",noextract,force,forcever:,geninteg,help,holdver"
-OPT_LONG+=",install,key:,log,nocolor,nobuild,nocheck,nosign,pkg:,rmdeps"
+OPT_LONG+=",install,repoadd,key:,log,nocolor,nobuild,nocheck,nosign,pkg:,rmdeps"
OPT_LONG+=",repackage,skipinteg,sign,source,syncdeps,version,config:"
# Pacman Options
OPT_LONG+=",noconfirm,noprogressbar"
@@ -1697,6 +1759,7 @@ while true; do
-g|--geninteg) GENINTEG=1 ;;
--holdver) HOLDVER=1 ;;
-i|--install) INSTALL=1 ;;
+ -a|--repoadd) REPOADD=1 ;;
--key) shift; GPGKEY=$1 ;;
-L|--log) LOGGING=1 ;;
-m|--nocolor) USE_COLOR='n' ;;
@@ -1749,6 +1812,9 @@ fi
# set pacman command if not already defined
PACMAN=${PACMAN:-pacman}
+# set repoadd command if not already defined
+REPO_ADD=${REPO_ADD:-repo-add}
+
# check if messages are to be printed using color
unset ALL_OFF BOLD BLUE GREEN RED YELLOW
if [[ -t 2 && ! $USE_COLOR = "n" && $(check_buildenv color) = "y" ]]; then
@@ -1970,6 +2036,10 @@ if (( ! SPLITPKG )); then
warning "$(gettext "A package has already been built,
installing existing package...")"
install_package
exit $?
+ elif (( REPOADD )); then
+ warning "$(gettext "A package has already been built,
adding existing package...")"
+ repoadd_package
+ exit $?
else
error "$(gettext "A package has already been built. (use
-f to overwrite)")"
exit 1
@@ -1994,6 +2064,10 @@ else
warning "$(gettext "The package group has already
been built, installing existing packages...")"
install_package
exit $?
+ elif (( REPOADD )); then
+ warning "$(gettext "The package group has already
been built, adding existing packages...")"
+ repoadd_package
+ exit $?
else
error "$(gettext "The package group has already been
built. (use -f to overwrite)")"
exit 1
@@ -2174,7 +2248,11 @@ fi
fullver=$(get_full_version $epoch $pkgver $pkgrel)
msg "$(gettext "Finished making: %s")" "$pkgbase $fullver ($(date))"
-install_package
+if (( INSTALL )); then
+ install_package
+elif (( REPOADD )); then
+ repoadd_package
+fi
exit 0 #E_OK
--
1.7.5.2
More information about the pacman-dev
mailing list