Xavier Chantry wrote:
Use the correct database format

Instead of getting all the info from the filename, which was a bit ugly, use
xdelta3 to get the source and destination files

Instead of looking for .delta files in the current directory when adding a
package, which was not very flexible, allow .delta files to be added with
repo-add just like package files. delta files can also be removed with
repo-remove. This is simply done by looking for a .delta extension in the
arguments, and calling the appropriate db_write_delta or db_remove_delta
functions.

Example usage:
repo-add repo/test.db.tar.gz repo/libx11-1.1.99.2-2-x86_64.pkg.tar.gz
repo-add repo/test.db.tar.gz repo/libx11-1.1.5-2_to_1.1.99.2-2-x86_64.delta
repo-remove repo/test.db.tar.gz libx11-1.1.5-2_to_1.1.99.2-2-x86_64.delta

Note that db_write_entry had to be modified so that the deltas file is not
lost on a package upgrade (remove + add). FS#13414 should be fixed in the
same time, by printing a different message when the same package is added.

Normal output:
==> Adding package 'repo/libx11-1.1.99.2-2-x86_64.pkg.tar.gz'
  -> Removing version 'libx11-1.1.5-2'...
Warning:
==> Adding package 'repo/libx11-1.1.99.2-2-x86_64.pkg.tar.gz'
==> WARNING: An entry for 'libx11-1.1.99.2-2' already exists, overwriting...

Signed-off-by: Xavier Chantry <[email protected]>
---
 scripts/repo-add.sh.in |  203 ++++++++++++++++++++++++++++--------------------
 1 files changed, 120 insertions(+), 83 deletions(-)

diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index c6d25aa..95b7959 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -57,8 +57,8 @@ error() {
 # print usage instructions
 usage() {
        printf "repo-add, repo-remove (pacman) %s\n\n" "$myver"
-       printf "$(gettext "Usage: repo-add [-q] <path-to-db> <package> ...\n")"
-       printf "$(gettext "Usage: repo-remove [-q] <path-to-db> <packagename> 
...\n\n")"
+       printf "$(gettext "Usage: repo-add [-q] <path-to-db> <package|delta> 
...\n")"
+       printf "$(gettext "Usage: repo-remove [-q] <path-to-db> <packagename|delta> 
...\n\n")"
        printf "$(gettext "\
 repo-add will update a package database by reading a package file.\n\
 Multiple packages to add can be specified on the command line.\n\n")"
@@ -93,36 +93,84 @@ write_list_entry() {
        fi
 }
-# write a delta entry to the pacman database
-#   arg1 - path to delta
+# Get the package name from the delta filename
+getpkgname() {
+       local tmp
+
+       tmp=${1##*/}
+       echo ${tmp%-*-*_to*}
+}

Rename this to getdeltapkgname to clarify it is only used for deltas? Self document function names make my head hurt less.

Otherwise, a quick read of the other changes made sense to me, but I will need to do this in more detail. One comment that is moderately related to this. Should there be a mechanism to inspect the deltas are remove the ones that are no longer necessary? I.e. deltas with a broken chain, deltas who chain download will be bigger than the package. Should that be a job of repo-add when adding a new delta or a separate script?

Allan



_______________________________________________
pacman-dev mailing list
[email protected]
http://www.archlinux.org/mailman/listinfo/pacman-dev

Reply via email to