On 12/06/11 12:13, Simon Gomizelj wrote:
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.
Great to see a new contributor. Hopefully the much delayed reply here
has not been too off-putting...
General comments about the patch. I do not think setting REPO_PATH and
REPO_DB in makepkg.conf is the way to go. I would prefer something like:
makepkg --repo-add /path/to/repo.db.tar.gz
That means I can manage multiple repos more easily on my machine. Note
I also went for "-" in the middle of --repo-add for consistency with
name of the script. I'm not sure about the need for the short "-a"
option, but I could be convinced.
From 56ef40a2dbe42fafd32a152d102962d52e33e6f4 Mon Sep 17 00:00:00 2001
From: Simon Gomizelj<simongm...@gmail.com>
Date: Sat, 11 Jun 2011 21:16:11 -0400
Subject: [PATCH] Added repo-add support.
Signed-off-by: Simon Gomizelj<simongm...@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"
+}
I think there is no need for these two functions. If a user is
managing a repo on their machine, we can just assume they have write
permissions for that repo. In fact, we can just test that early on and
error if the permissions do not allow this.
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}"
That does not look right... but I think this will get cleaned up with
removing the sudo/su checks above.
+ 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")"
This should alphabetically ordered. Again, I would stick to just
--repo-add.
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
elif? I'm sure we can both install and add to a repo.
+ 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
and again
+ 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
Again, I do not understand the if/elif there at all...
Overall, this looks a good first patch to me. Follow up the comments
here and then we can get the documentation added and this looks a nice
feature to add.
Allan