[pacman-dev] [PATCH] makepkg: Place packages symlinks in build dir when DESTDIR is used

Eric Bélanger snowmaniscool at gmail.com
Tue Nov 3 23:59:56 EST 2009


On Tue, Nov 3, 2009 at 10:29 PM, Allan McRae <allan at archlinux.org> wrote:
> Eric Bélanger wrote:
>>
>> On Tue, Nov 3, 2009 at 7:34 PM, Eric Bélanger <snowmaniscool at gmail.com>
>> wrote:
>>
>>>
>>> On Tue, Nov 3, 2009 at 6:46 PM, Allan McRae <allan at archlinux.org> wrote:
>>>
>>>>
>>>> Eric Bélanger wrote:
>>>>
>>>>>
>>>>> On Tue, Nov 3, 2009 at 8:55 AM, Eric Bélanger <snowmaniscool at gmail.com>
>>>>> wrote:
>>>>>
>>>>>
>>>>>>
>>>>>> On Tue, Nov 3, 2009 at 3:13 AM, Ray Rashif <schivmeister at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> 2009/11/3 Eric Bélanger <snowmaniscool at gmail.com>
>>>>>>>
>>>>>>>     This is really convenient, but would it not be good if the
>>>>>>> symlink(s) are
>>>>>>> removed upon --clean?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> Sure, that can be easily done.
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> I'm not sure if removing the symlinks if --clean is used is a good
>>>>> idea after all.  After a successful build, you would probably want to
>>>>> have the package's symlink to be still there so you can test/install
>>>>> the package.
>>>>>
>>>>>
>>>>
>>>> I agree that keeping the current symlink is good, but then do you have
>>>> to
>>>> remove old symlinks manually?  I think this is a situation with no best
>>>> answer, but removing symlinks on --clean may be the better one.
>>>>
>>>
>>> I've haven't thought about old symlinks. I'll remove them on --clean.
>>>
>>>
>>>>
>>>> And here is another thought I just had.  Do we want to error out if the
>>>> symlinnk creation fails but the building of the package is successful?
>>>>  Or
>>>> jsut print a warning?
>>>>
>>>>
>>>
>>> Maybe a warning would be better.
>>>
>>>
>>
>> I added a warning. BTW, should the tar_file and pkg_file be local
>> variables?  I'll submit anew patch once I get an answer.
>>
>
> Yes they should.
>
> Allan
>

Here's the latest patch. I hope everything is correct.

BTW, do you want me to continue sending patches as attachment too?  I
see that 'git send-email' doesn't so I guess you can grab the inline
patch or get it directly from git.  Is that correct?


Signed-off-by: Eric Bélanger <snowmaniscool at gmail.com>
---
 scripts/makepkg.sh.in |   26 +++++++++++++++++++++-----
 1 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 92b0454..aaf576b 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -138,11 +138,17 @@ clean_up() {
 		if [ -n "$pkgbase" ]; then
 			# Can't do this unless the BUILDSCRIPT has been sourced.
 			rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-build.log"*
+			[[ "$PKGDEST" != "${startdir}" ]] \
+			    && rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"
 			if [ "$PKGFUNC" -eq 1 ]; then
 				rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}-package.log"*
+				[[ "$PKGDEST" != "${startdir}" ]] \
+				    && rm -f "${pkgbase}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"
 			elif [ "$SPLITPKG" -eq 1 ]; then
 				for pkg in ${pkgname[@]}; do
 					rm -f "${pkg}-${pkgver}-${pkgrel}-${CARCH}-package.log"*
+					[[ "$PKGDEST" != "${startdir}" ]] \
+					    && rm -f "${pkg}-${pkgver}-${pkgrel}-${CARCH}${PKGEXT}"
 				done
 			fi
 		fi
@@ -999,21 +1005,22 @@ create_package() {
 		*) warning "$(gettext "'%s' is not a valid archive extension.")" \
 		"$PKGEXT" ; EXT=$PKGEXT ;;
 	esac
-	local pkg_file="$PKGDEST/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${EXT}"
+	local tar_file="$PKGDEST/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${EXT}"
+	local pkg_file="$PKGDEST/${nameofpkg}-${pkgver}-${pkgrel}-${PKGARCH}${PKGEXT}"

 	local ret=0

 	# when fileglobbing, we want * in an empty directory to expand to
 	# the null string rather than itself
 	shopt -s nullglob
-	bsdtar -cf - $comp_files * > "$pkg_file" || ret=$?
+	bsdtar -cf - $comp_files * > "$tar_file" || ret=$?
 	shopt -u nullglob

 	if [ $ret -eq 0 ]; then
 		case "$PKGEXT" in
-			*tar.gz)  gzip -f -n "$pkg_file" ;;
-			*tar.bz2) bzip2 -f "$pkg_file" ;;
-			*tar.xz)  xz -z -f "$pkg_file" ;;
+			*tar.gz)  gzip -f -n "$tar_file" ;;
+			*tar.bz2) bzip2 -f "$tar_file" ;;
+			*tar.xz)  xz -z -f "$tar_file" ;;
 		esac
 		ret=$?
 	fi
@@ -1022,6 +1029,15 @@ create_package() {
 		error "$(gettext "Failed to create package file.")"
 		exit 1 # TODO: error code
 	fi
+
+	if (( ! ret )) && [[ "$PKGDEST" != "${startdir}" ]]; then
+		ln -sf "${pkg_file}" "${pkg_file/$PKGDEST/$startdir}"
+		ret=$?
+	fi
+
+	if [ $ret -ne 0 ]; then
+		warning "$(gettext "Failed to create symlink to package file.")"
+	fi
 }

 create_srcpackage() {
-- 
1.6.5.2
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-makepkg-Place-packages-symlinks-in-build-dir-when-PK.patch
Type: text/x-patch
Size: 3054 bytes
Desc: not available
URL: <http://mailman.archlinux.org/pipermail/pacman-dev/attachments/20091103/a3ae91eb/attachment-0001.bin>


More information about the pacman-dev mailing list