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

Eric Bélanger snowmaniscool at gmail.com
Wed Nov 4 18:37:42 EST 2009


On Wed, Nov 4, 2009 at 2:37 AM, Eric Bélanger <snowmaniscool at gmail.com> wrote:
> On Wed, Nov 4, 2009 at 1:45 AM, Allan McRae <allan at archlinux.org> wrote:
>> Eric Bélanger wrote:
>>>
>>>
>>> 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?
>>>
>>
>> The way I handle this is to just send them directly with git send-email
>> using the "In reply to" value to keep the thread... um... threaded.  Any
>> comments about the patch and what you have changed to fix things can go
>> under the "---" after the sign-off.  Of course, you can inline them as you
>> have and push them to a git repo somewhere and we can just pull from there.
>
> OK. I'll do that. I was inlining them manually to keep everything in
> the same thread.
>
>>
>> Also, can you insert newlines into you commit message to keep them at about
>> 80 characters per line.
>>
>>>
>>> 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
>>
>> I am not happy with this way of cleaning up the symlinks to packages.  If
>> the package is not a split package, then the package name will be
>> $pkgname-...   and not $pkgbase (although, they are likely the same thing).
>
>  I was following (maybe too closely) the log files removal as template
> here. I'll change it to pkgname.
>
>>  I am also not sure what the second clean-up (in the "$PKGFUNC -eq 1" test)
>> is doing that has not already by the one above it.
>
> Yeah, it probably can be removed.
>
>> However, thinking about this more, we do not remove old packages when using
>> --clean so why remove symlinks to old packages.  Only when package symlinks
>> are pointing to packages that no longer exist in PKGDEST have we made a mess
>> that needs cleaned up.  So how about something like:
>>
>> for pkg in ${pkgname[@]}; do
>>  for file in ${pkg}-*-*-${CARCH}${PKGEXT}; do
>>   if [[ -h $file & ! -e $file ]]; then
>>     rm -f $file
>>   fi
>>  done
>> fi
>>
>
> Sure. I'll use this instead.  I don't use the --clean option so I am
> indifferent. I'll send a new patch tomorrow.
>
> Eric
>
>>
>> Everything else in the patch is fine.
>>
>> Allan
>>
>>
>>
>

Here's the new patch.  I struggled getting git to work so hopefully
it's OK.  BTW, the 'git send-email' --in-reply-to option asks for an
identifier. I can't seem to find it in the patches or email headers in
gmail.



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

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index 92b0454..02ebf16 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -145,6 +145,14 @@ clean_up() {
 					rm -f "${pkg}-${pkgver}-${pkgrel}-${CARCH}-package.log"*
 				done
 			fi
+
+			for pkg in ${pkgname[@]}; do
+				for file in ${pkg}-*-*-${CARCH}${PKGEXT}; do
+					if [[ -h $file && ! -e $file ]]; then
+						rm -f $file
+					fi
+				done
+			done
 		fi
 	fi

@@ -999,21 +1007,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 +1031,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: 2587 bytes
Desc: not available
URL: <http://mailman.archlinux.org/pipermail/pacman-dev/attachments/20091104/48cfce88/attachment-0001.bin>


More information about the pacman-dev mailing list