tech-pkg archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: fetch: download to temporary location
On Mon, Feb 09, 2026 at 09:34:25AM +0100, David Brownlee wrote:
> Could I ask if the temporary filename could include an easily
> identifiable suffix to make cleanup easier?
> Maybe ".$$.tmp"? (or ".$$.part" or ".$$.downloading" or
> "$$.prettymuchanything" :)
Sure, let's use .part like firefox.
Thomas
Index: fetch
===================================================================
RCS file: /cvsroot/pkgsrc/mk/fetch/fetch,v
retrieving revision 1.22
diff -u -r1.22 fetch
--- fetch 7 Feb 2026 15:15:02 -0000 1.22
+++ fetch 9 Feb 2026 09:44:28 -0000
@@ -45,6 +45,9 @@
# If the file cannot be fetched successfully, then we try the next
# listed site.
#
+# The file will be downloaded under a temporary name and
+# renamed to the proper name when the download is done.
+#
# If the file already exists on the disk and is verified, then
# no fetch action is taken.
#
@@ -189,7 +192,7 @@
done < $distinfo
fi
-# verify_file [-v] $file
+# verify_file [-v] $file $suffix
# If we can checksum the file, then see if it matches the listed
# checksums in the distinfo file. If we can check the size, then
# check that instead. We strip off ".pkgsrc.resume" from the
@@ -199,12 +202,13 @@
verify_file() {
_if_verbose=:; if [ "x$1" = "x-v" ]; then shift; _if_verbose=; fi
_file="${1#./}"
+ _suffix="$2"
${TEST} -f $_file || {
$_if_verbose ${ECHO} 1>&2 "$self: File $_file does not exist."
return 1
}
if ${TEST} -n "$checksum"; then
- ${CHECKSUM} -s ".pkgsrc.resume" $distinfo ${_file} || {
+ ${CHECKSUM} -s "${_suffix}" $distinfo ${_file} || {
$_if_verbose ${ECHO} 1>&2 "$self: Checksum of the file $_file doesn't match."
return 1
}
@@ -223,7 +227,7 @@
# If the file already exists and it verifies, then we don't need to fetch
# it again.
#
-if verify_file $path; then
+if verify_file $path ""; then
exit 0
fi
@@ -232,32 +236,23 @@
${TEST} -w $fetchdir || ${ECHO} 1>&2 "$self: WARNING: DISTDIR `cd $fetchdir && pwd` looks non-writable."
# Set the name of the output file. In the "resume" case, we initialize
-# the fetch loop by ensuring that the temporary output file already
-# exists.
+# the fetch loop by providing the existing, possibly incomplete, file.
#
-outputfile="$file"
+tmp_suffix=".$$.part"
+outputfile="$file$tmp_suffix"
outputpath="$fetchdir/$outputfile"
+if ${TEST} -f $outputpath; then
+ ${ECHO} "Temporary download file ${outputpath} already existed, deleting"
+ ${RM} -f $outputpath
+fi
if ${TEST} -n "$resume"; then
- outputfile="${file}.pkgsrc.resume"
- outputpath="$fetchdir/$outputfile"
- if ${TEST} ! -f $outputpath; then
- if ${TEST} -f $path; then
- ${CP} -f $path $outputpath
- else
- ${RM} -f $outputpath
- ${TOUCH} $outputpath
- fi
- fi
- #
- # If the temporary file verifies, then we don't need to resume
- # fetching it.
- #
- if verify_file $outputpath; then
- ${MV} -f $outputpath $path
- exit 0
+ if ${TEST} -f $path; then
+ ${CP} -f $path $outputpath
+ else
+ ${TOUCH} $outputpath
fi
size=`${WC} -c < $outputpath`
- ${ECHO} "=> Downloaded size: $size bytes"
+ ${ECHO} "=> Downloaded size (before resume): $size bytes"
fi
${TEST} -z "$distsize" || ${ECHO} "=> Total size: $distsize $distunits"
@@ -287,8 +282,8 @@
${ECHO} 1>&2 "$self: Unable to fetch expected file $file"
continue
fi
- if verify_file -v $outputpath; then
- ${TEST} -z "$resume" || ${MV} -f $outputpath $path
+ if verify_file -v $outputpath $tmp_suffix; then
+ ${MV} -f $outputpath $path
break
fi
if ${TEST} -n "$resume"; then
Home |
Main Index |
Thread Index |
Old Index